实验一 汇编基本操作一、实验目的§熟悉在PC机上建立、汇编、链接、调试、和运行汇编语言程序的全过程;§设计一个完整的顺序结构汇编语言程序,学习数据传送和算术运算指令的用法源程序源程序(文本文件)(文本文件)*.ASM目标文件目标文件(二进制文件)(二进制文件)*.OBJ可执行文件可执行文件(二进制文件)(二进制文件)*.EXE库文件库文件(各种函数)(各种函数)编译编译连接连接link二、实验内容§示例题:在屏幕上显示信息:“5A”DATA SEGMENT ;定义数据段xdb ‘5’ ;定义字节型变量x, x值存放于内存DATA段字节偏移量0处ydb ‘A’;定义字节型变量y, y值存放于内存DATA段字节偏移量1处DATA ENDS CODE SEGMENT;定义代码段(伪指令,编译器使用)ASSUME CS:CODE,DS:DATA(伪指令,编译器使用) START: MOV AX,DATA;数据段在内在重定位,以便程序能够正确引用的在数据段中MOV DS,AXMOV DL, x; x值即48D(或31H)-“5”的ASCII码存入寄器DLMOV AH, 2;INT 21H ; 调用2号DOS中断,用于显示DL中存放的字符 MOV BX,01MOV DL,[BX];通过BX寄存器间接址将y值存入DL(与第3行有相同的作用)MOV AH,2INT 21H;此段语句功能同上一段 MOV AH,4CHINT 21H;4C号DOS中断,功能是结束程序,将系统控制权返给操作系统 CODE ENDS ;以下两句为伪指令,不占用内存,编译器使用END START实验步骤§1、从“开始”->“运行”->输入“CMD”命令,进入仿真DOS状态;§2、键入D: ↙,进入D盘(↙表示回车键); §3、输入CD MASM6↙,进入MASM6目录(即汇编程序所在目录);§4、输入EDIT↙(即DOS下的文本编辑程序)编辑宏汇编语言源程序,或者用TC编辑环境,或者用Windows的文本编辑程序均可。
§选用你熟悉的文本编辑程序,按要求逐条输入给出的源程序,并对输入完毕的源程序存盘,其文件名由自己定,但文件的扩展名必须是.ASM(如果用Windows编辑程序,文件格式一定要选纯文本文件),文件保存位置为D: \ MASM6例如把示例题源程序文件取名为§5、对源程序进行编译以生成.OBJ目标文件(框内为键盘输入的内容,↙表示回车):§D:\ MASM6\>MASM ↙§ Microsoft(R§ Copyright(C) Microsoft Corp 1981-1985,1987,All rights reserved.§ 工§ Source ]: ↙ 注:源文件名,上边已输入在此直接回车即可§ Object ]: ↙ 注:目标文件名,默认与源文件同名§ Source ]:↙ 注:列表文件,直接回车表示不生成该文件§ Cross-]:↙ 注:交叉索引文件直接回车表示不生成该文件§ 50636+408356 Bytes symbol space free§ 0 Warning Errors注:编译过程没有警告性错误§ 0 Severe Errors注:没有严重错误,编译成功,如不为0刚需打开源程序按此处给出的错误提示修改错误§ D:\> 注:返回DOS环境 不同版本时,以上显示内容可能不同,但基本原理是一致的。
MASM完成对源程序的编译,若编译过程中发现语法错误,则列出错误的语句代码及错误类型,最后列出警告错误和语法错误的总数此时,就可以根据错误的性质分析错误,并使用编辑程序修改源程序,再重新汇编源程序,直至汇编后无错误发生为止§6、链接目标文件,对上步生成的目标文件进行链接生成扩展名为.exe的可执行文件§ D:\ MASM6\> LINK↙§Microsoft(R) 8086 Object,§ Copyright(C) Microsoft Corp 1983,1984,1985,All rights reserved.§ Object Modules [.OBJ]:hello↙注:目标文件名,扩展名不用输入§ Run ]: ↙ 注:可执行文件名,默认与目标文件同名§ List ]:↙注:不输出MAP文件§ Libraries[.LIB]: ↙注:不链接库文件§若连接过程有错,则显示错误信息,此时需要重新调用编辑程序修改源程序,然后再重新汇编,再经过链接,直至无错为止7、运行程序及调试程序 连接成功后,在D:\ MASM6\目录下生成了一个可执行文件(扩展名为.exe),DOS下用DIR命令可以看见该文件(或者在Windows中文件管理器中也可看见该文件)。
操作者可在该目录下直接键入文件名(或在文件管理器中双击)运行此程序:D:\ MASM6\> ↙ 注:大小写均可,扩展名可不输入回车后屏幕将显示 :5A自自己己编编程程:仿照上面程序,将自己的英文名字打印到屏幕上 反复对以上过程进行练习,认真理解各步的作用,掌握“编辑”、“编译”和“链接”的概念,了解各步的需要的输入文件,输出文件是什么实验报告要求(实验1)1. 实验题目;2. 实验目的;3. 实验内容§(1). 编程任务§(2). 解决问题的基本思路§(3). 源程序§(4). 程序运行步骤4. 实验结论;5. 本次实验的主要收获和体会(100字左右);利用利用debug调试宏汇编程序调试宏汇编程序是是DOS系统自带的汇编调试软件,系统自带的汇编调试软件,debug命命令是令是DOS的内部命令,只要进入的内部命令,只要进入DOS系统在系统在任何目录下都可以运行任何目录下都可以运行debug调试程序有多种命令,可以显示修改调试程序有多种命令,可以显示修改内存、汇编、反汇编、单步运行程序,中断内存、汇编、反汇编、单步运行程序,中断运行程序等,是调试汇编程序的常用工具运行程序等,是调试汇编程序的常用工具。
debug可以直接在运行中汇编指令,进行调可以直接在运行中汇编指令,进行调试,但由于使用这一功能要记住内存地址,试,但由于使用这一功能要记住内存地址,所以在这里不做介绍,有兴趣可以看有关的所以在这里不做介绍,有兴趣可以看有关的参考书,在这里只介绍完整的源程序的调试参考书,在这里只介绍完整的源程序的调试方法调试步骤:调试步骤:首先编写源程序,可以用任何文本文字(不首先编写源程序,可以用任何文本文字(不带格式符)编辑系统编写源程序,如带格式符)编辑系统编写源程序,如Windows下的记事本,在这里我们一般使用下的记事本,在这里我们一般使用DOS下的文本编辑器下的文本编辑器,,与一样,与一样,edit也是也是DOS系统的内部命令,在任何目录下都可以系统的内部命令,在任何目录下都可以运行但是要注意,运行但是要注意,无论用哪种编辑器,源无论用哪种编辑器,源程序的后备名必须是程序的后备名必须是.asm用记事本编用记事本编辑源程序辑源程序文件文件名为名为在在DOS下运行下运行edit,编辑源程序编辑源程序输入源程序输入源程序文件菜单,可文件菜单,可以存盘、重命以存盘、重命名、退出等名、退出等源文件编辑完成后,存盘退出,这时应将源源文件编辑完成后,存盘退出,这时应将源文件编译成目标程序文件编译成目标程序 .obj文件。
文件同样在同样在DOS下运行宏汇编编译程序下运行宏汇编编译程序这个程这个程序不是序不是DOS系统命令,须将该可执行文件拷系统命令,须将该可执行文件拷贝至源程序的目录处贝至源程序的目录处在在DOS下运行下运行masm命令命令,同时同时输入源文件名输入源文件名编译程序依次询编译程序依次询问三个选项,均问三个选项,均输入回车输入回车如果源程序无语法如果源程序无语法错误,提示错误,提示0个错个错误,表示已生成文误,表示已生成文件件如果存在错误,指如果存在错误,指出源程序的错误行出源程序的错误行数,错误类型,应数,错误类型,应返回编辑器修改返回编辑器修改两个错误两个错误错误,多个逗号错误,多个逗号错误,少个逗号错误,少个逗号当前光标所在行数当前光标所在行数成功生成文件后,对成功生成文件后,对obj文件进行连接,在文件进行连接,在DOS的当前目录下执行文件的当前目录下执行文件执行执行link a对这三个选项对这三个选项均回车跳过均回车跳过如果源程序没有堆栈如果源程序没有堆栈段,程序会提示段,程序会提示这时,我们已经成功地生成了文件,因为这这时,我们已经成功地生成了文件,因为这个汇编程序没有涉及到屏幕的输入输出,即个汇编程序没有涉及到屏幕的输入输出,即运行结果存在内存中运行结果存在内存中,虽然能在,虽然能在DOS及及Windows下正确运行,但什么结果都看不到。
下正确运行,但什么结果都看不到为了观察程序的运行结果或为了调试程序,为了观察程序的运行结果或为了调试程序,我们需要运行调试程序来观察我们需要运行调试程序来观察cpu的寄存器的的寄存器的运行状态及数据段内存的数据运行状态及数据段内存的数据在当前目录下输入在当前目录下输入debug 进入进入debug程序,这是程序,这是debug的提的提示符,可以在这个提示符下直接示符,可以在这个提示符下直接输入输入debug的各项命令的各项命令U 反汇编,可以看源程序反汇编,可以看源程序格式:格式:U [地址地址]功能:把指定地址范围的内存块全部反汇编,功能:把指定地址范围的内存块全部反汇编,一次最多显示一次最多显示32字节机器码字节机器码机器码机器码CS:IP原指令原指令T::单步运行程序单步运行程序格式:格式:T [=地址地址] 功能:从指定地址处,(默认为当前功能:从指定地址处,(默认为当前CS:IP地址)处运行一条指令,并显示寄存器内容、地址)处运行一条指令,并显示寄存器内容、标志寄存器的状态和下一条指令标志寄存器的状态和下一条指令t 命令命令CPU各寄存器内容各寄存器内容标志寄存标志寄存器状态器状态下一条指令及地下一条指令及地址、机器码址、机器码G::执行程序,直至程序结束或断点处。
执行程序,直至程序结束或断点处格式:格式:G [=地址地址] 断点地址断点地址功能:从指定地址或当前地址开始运行,遇功能:从指定地址或当前地址开始运行,遇到断点则停止,并显示断点处的各种状态到断点则停止,并显示断点处的各种状态运行到运行到0015H0015H处寄存器状态处寄存器状态下一条指令下一条指令D 显示内存命令显示内存命令格式:格式:D 地址地址 (例如(例如 D DS:0000 )功能:显示指定范围的地址内容,最多功能:显示指定范围的地址内容,最多128个个字节如如 D DS:0020 L 40 显示数据段从显示数据段从0020H开始的开始的40个字节的内容个字节的内容显示内存命令显示内存命令DS:偏移地址偏移地址内存内容,均内存内容,均为为16进制形式进制形式对应内容的对应内容的ASCII码码Q 退出退出debug程序返回返回DOS标志寄存器的含义:标志寄存器的含义:溢出标志溢出标志OF OV(溢出溢出) NV(不溢出不溢出)方向标志方向标志DF DN(减量减量) UP(增量增量)中断允许标志中断允许标志IF EI(允许允许) DI(禁止禁止)符号标志符号标志SF NG(负负) PL(正正)零标志零标志ZF ZR(零零) NZ(非零非零)进位标志进位标志CF CY(有有) NC(无无)奇偶标志奇偶标志PF PE(偶偶) PO(奇奇)辅助进位标志辅助进位标志AF AC(有有) NA(无无)。