实验一汇编语言程序设计.ppt
微机原理与接口技术,朱华贵2016年04月12日,微机原理与接口技术,实验一 汇编语言程序设计,朱华贵2016年04月12日,微机原理与接口技术,汇编语言程序的上机过程,1.上机环境要运行调试汇编语言程序,至少需要以下程序文件:编辑程序:EDIT.COM或其他文本编辑工具软件,用于编辑源程序。汇编程序:MASM.EXE,用于汇编源程序,得到目标程序。连接程序:LINK.EXE,用于连接目标程序,得到可执行程序。调试程序:DEBUG.EXE,用于调试可执行程序。,2.上机过程,汇编语言程序上机操作包括:编辑、汇编、连接和调试几个阶段。1.编辑源程序用文本编辑软件创建、编辑汇编源程序。常用编辑工具有:EDIT.COM、记事本、Word等。无论采用何种编辑工具,生成的文件必须是纯文本文件,所有字符为半角,且文件扩展名为.asm(文件名不分大小写,由18个字符组成)。,2.上机过程(续),2.汇编用汇编工具对上述源程序文件(.asm)进行汇编,产生目标文件(.obj)等文件。汇编程序的主要功能是:检查源程序的语法,给出错误信息;产生目标程序文件;展开宏指令。,2.上机过程(续),汇编过程如下:在DOS状态下,输入命令:MASM MYFILE.ASM(回车),即启动了汇编程序。此命令执行后,会出现下面的3行信息,依次按回车键(即选择默认值)即可建立3个输出文件,其扩展名分别为:.OBJ(目标文件),.LST(列表文件)和.CRF(交叉引用文件)。ObjectFilename MYFILE.OBJ:SourceListing Nul.LST:CrossReference Nul.CRF:,2.上机过程(续),如果汇编过程中发现有语法错误,则屏幕上会显示出错语言的位置和出错的类型。此时,需要进行修改,然后再进行汇编。如此进行,直至汇编无错误,得到目标文件为止。,2.上机过程(续),3.连接汇编产生的目标文件(.obj)并不是可执行的程序,还要用连接程序把它转换为可执行的EXE文件。连接过程如下:在DOS状态下,输入命令:LINK MYFILE.OBJ(回车),即可完成连接。与汇编过程类似,如果连接过程中出错,那么程序会在屏幕上显示提示信息。此时,需要对源程序进行查错、修改,然后再进行汇编、连接,直至连接无错误,得到可执行文件为止。,2.上机过程(续),4.程序运行在DOS提示符下输入可执行程序的文件名即可运行程序。若程序能够运行但不能得到预期结果,则就需要检查源程序,改错后再汇编、连接、运行。5.程序调试在程序运行阶段,有时不容易发现问题,尤其是碰到复杂的程序更是如此,这时就需要使用调试工具进行动态查错。常用的动态调试工具为DEBUG。,3.运行调试,DEBUG是为汇编语言设计的一种调试工具,它通过单步、设置断点等方式为汇编语言程序员提供了非常有效的调试手段,它可以直接调试COM文件和EXE文件。DEBUG状态下的所有数据都采用十六进制形式显示,无后缀H。,3.运行调试(续),1.DEBUG的运行在DOS状态下,输入下列命令之一,就可以进入DEBUG调试状态。命令一:DEBUG(回车)格式二:DEBUG 可执行文件名(回车)进入DEBUG调试状态后,将显示提示符“”,此时,可输入所需的DEBUG命令。,3.运行调试-DEBUG的主要命令,(1)显示内存单元内容的命令D格式为:-D 地址 或-D 范围说明:上面格式中的“-”符号是DEBUG的提示符,下同。例如,显示指定范围(DS:100DS:1FF)内存单元内容的命令是:-D 100 1FF这里没有指定段地址,D命令自动显示DS段的内容。,3.运行调试-DEBUG的主要命令,(2)修改内存单元内容的命令E 格式一:用给定内容代替指定范围的单元内容-E 地址 内容表例如,-E DS:100 F3 58 59 5A 8D格式二:逐个单元相继地修改-E 地址例如:-E DS:10018E4:0100 89.78,此命令是将0100单元内容89改为78。78是程序员从键盘输入的。程序员在修改完一个单元后,可按空格键继续修改下一单元内容,直至按回车键结束该命令。,3.运行调试-DEBUG的主要命令,(3)检查和修改寄存器内容的命令R 格式一:显示CPU内部所有寄存器内容和标志寄存器中的各标志位状态-R格式二:显示和修改某个指定寄存器内容-R寄存器名例如:-R AX格式三:显示和修改标志寄存器内容-RF,3.运行调试-DEBUG的主要命令,(4)运行命令G格式为:-G=地址1地址2地址3其中,地址1指定了运行的起始地址,后面的均为断点地址。当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容和下一条要执行的指令。,3.运行调试-DEBUG的主要命令,(5)跟踪命令T格式一:逐条指令跟踪-T=地址该命令从指定地址起执行一条指令后停下来,显示所有寄存器及标志位的内容。若未指定地址,则从当前的CS:IP开始执行。格式二:多条指令跟踪-T=地址值该命令从指定地址起执行n条指令后停下来,n由值确定。,3.运行调试-DEBUG的主要命令,(6)汇编命令A格式为:-A 地址该命令允许输入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。必须注意:输入的数字均默认为十六进制数。,3.运行调试-DEBUG的主要命令,(7)反汇编命令U格式一:从指定地址开始,反汇编32字节-U 地址格式二:对指定范围内的存储单元进行反汇编-U 范围,3.运行调试-DEBUG的主要命令,(8)执行命令P格式为:-P=地址 指令数该命令控制CPU执行指定地址处的指令。若指定了指令数,则CPU执行从指定地址开始的若干条指令。若未指定地址和指令数,则CPU执行由(CS:IP)指定地址处的一条指令。P命令与T命令的差别在于P命令把子程序调用(CALL)、重复字符串指令(REP)或软件中断(INT)当成一条指令来执行,简化了跟踪过程。,3.运行调试-DEBUG的主要命令,(9)退出DEBUG命令Q格式为:-Q该命令退出DEBUG程序,返回DOS。,3.运行调试-DEBUG使用说明,在DEBUG中的提示符“-”下才能输入命令,在按回车键后,该命令才开始执行。命令是单个字母,命令和参数的大小写可混合输入。命令和参数、参数和参数之间要用空格、逗号或制表符等分隔。可以用“段值:偏移量”的形式来表示地址,也可以用段寄存器来代表“段值”。例如,1000:0,DS:10,CS:30等。,3.运行调试-DEBUG使用说明(续),范围:用来表示地址范围,从哪个地址开始,到哪个地址结束。它有两种表示方式。地址 地址前者表示起始地址,要用“段值:偏移量”来表达,后者表示终止地址,只用“偏移量”来表示。地址 长度前者表示起始地址,要用“段值:偏移量”来表达,后者表示该区域的大小,用字母“L”开头的数值来表示。例如:100:50 100100:50 L100,3.运行调试-DEBUG使用说明(续),当命令出现语法错误时,将在出错位置显示 Error。可用组合键Ctrl+C或Ctrl+Break来终止当前命令的执行,还可用组合键Ctrl+S来暂停屏幕显示(当连续不断地显示信息时)。,实验准备:用DEBUG验证程序段,通常汇编教学中,汇编程序结构会在指令系统后面讲,学生在学习指令系统时由于没有讲汇编程序结构而无法编写汇编程序来加深对汇编指令的理解,因此,在这里我们通过2个例子,介绍使用DEBUG调试工具编写程序段来学习汇编指令。有关DEBUG的常用命令的用法请参看相关资料和课件。,题目:非压缩BCD码的减法运算,做68-9,mov ax,0608hmov bl,09hsub al,blaas,运行debug,首先用A命令输入程序,Debug中只使用16进制数,且无需加H后缀,直接用回车退出汇编编辑状态,使用T命令跟踪执行,第一个T命令要带上程序首地址,后面的T命令无需地址,标志位,当前指令执行后的各寄存器的结果,这是还未执行的下一条指令的反汇编,这是还未执行的下一条指令的地址和指令码,下面给出DEBUG中标志位状态符号的含义。,调试完后用Q命令退出DEBUG。,再举一个有访存操作的例子,MOV SI,0050H;(DS)=2000H MOV DI,0100H;(ES)=3000H MOV CX,5 CLD REP MOVSB,1)先用A命令输入程序,2)用R命令修改DS和ES寄存器到约定值,DS的原始值,输入的修改值,3)用D命令查看源数据区和目标数据区,4)用E命令初始化源数据区后再用D命令检查源数据区和目的数据区,5)单步跟踪执行程序,6)执行后检查源数据区和目标数据区,注意,用A命令输入指令时,如果输入错误debug会立即指出错误和位置。地址不会变化,以便用户修正指令。,附2:汇编语言上机过程,用DEBUG调试程序:,段值 偏移 指令码 反汇编的源码,1)用U命令查看程序和目标码及指令地址,2)用T命令单步跟踪,逐条执行看中间结果,DEBUG将显示每个寄存器以及各标志位的当前值,3)对于系统功能调用,可以用G命令设置断点执行,也可以用P命令跳过过程与系统功能服务程序。,设断点执行,断点设在INT 21H的后一句,INT 21H输出的一个字符,实验1 汇编语言程序的调试与运行,一实验目的1学习数据传送和算术运算指令的用法2熟悉在PC机上编辑、汇编、连接、调试和运行汇编语言程序的过程。二实验内容编程实现 SUM=a1b1+a2b2+a10b10。,三、参考程序,;内存数据定义DATA SEGMENT ORG 1000H;为调试方便将数据存于指定地址处,adb 89,5,56,80;10个数据 ORG 2000H;便于查看和设置 bdb 18,29,12,38;10个数据 ORG 3000H;SUMdw?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX,MOV DX,0 MOV SI,0 MOV CX,10LOP1:MOV AL,aSI MULbSI ADDDX,AX INC SI LOOP LOP1;MOV SUM,DX MOV AH,4CH INT 21H CODE ENDS END START,四、调试步骤1编辑源程序,建立一个以后缀为 ASM的文件.2汇编源程序,检查程序有否错误,有错时回到编辑状态,修改程序中错误行。无错时继续第3步。3.连接目标程序,产生可执行程序。4.DEBUG调试可执行程序,利用T命令进行操作并记录程序每次执行到处,CX、SI、AX及数据段DS:3000HDS:3001H的内容。,4.DEBUG调试结果分析:,五、思考题编写程序将定义的一组字符串中的小写字母全部转换成大写字母(其余字符不变)例如下面BUFFER中定义的一组字符串。DATA SEGMENT BUFFER DB hello ASM!20151030STRLEN EQU$-BUFFER OUTSTR DB STRLEN DUP(?)DATA ENDS,