您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 实验一-8086汇编语言上机调试及基本操作
实验一:8086汇编语言上机调试及基本操作(验证性)1、实验目的:(1)掌握常用DEBUG命令:G,D,R,T,U,Q。(2)掌握工具软件EMU8086。(3)掌握完整程序设计方法的格式,能正确书写数据段,代码段等。(4)掌握简单的数值转换算法2、实验说明:计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制之间的转换是一种基本功。3、程序框图:对于0-999(即000H-3E7H)范围内的二进制数4、参考程序:;将AX中的三位数拆为三个BCD码,并存入Result开始的三个单元DATASEGMENT;数据段RESULT_1DB1RESULT_2DB1RESULT_3DB1DATAENDSSTACKSEGMENTSTACK;堆栈段STADB64DUP(0)STACK_TOPDB0STACKENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AX;设置数据段MOVAX,STACKMOVSS,AX;设置堆栈段LEASP,STACK_TOP;设置栈顶指针MOVAX,2afHMOVCL,100DIVCLMOVRESULT_1,AL;除以100,得百位数MOVAL,AHMOVAH,0MOVCL,10DIVCLMOVRESULT_2,AL;余数除以10,得十位数MOVRESULT_3,AH;余数为个位数MOVAX,4C00H;返回DOSINT21H;CODEENDSENDSTART;最后一行要按回车键5、实验及报告要求:1)用合适的编辑软件编辑以上源文件并存入合适目录;要求补充注释未注释的伪指令和指令;2)分别在DOS和Windows下编译、连接生成可执行文件,比较两个环境下生成的机器码的长度和内容;试指出第2、5、7、10、14条指令的IP和机器码。3)分别在debug和emu8086下调试该可执行文件,给出程序运行时的各段地址(CS=?,DS=?SS=?ES=?)举例说明debug的t,d,g,u等命令操作方法并对寄存器的变化作出解释;试改变被转换的三位数,并解释转换过程中标志寄存器中各标志位的结果;如何观察转换结果的变化?4)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法和微机原理学习方法作出总结。6、思考题:1)用单步执行命令t运行程序,运行到movax,4c00h,int21h指令后,cs和IP寄存器内容前后有何变化?产生变化的原因是什么?2)试写出将BCD转换成二进制码的汇编程序。【实验辅导资料】1汇编语言程序的上机过程在计算机上运行汇编语言程序的步骤是:1.用编辑程序建立ASM源文件;2.用MASM程序把ASM文件转汇编成OBJ文件;3.用LINK程序把OBJ文件转连接成EXE文件;4.用DOS命令直接键入文件名就可执行该程序。编辑程序连接程序汇编程序文件EXMP.ASMLINKASMMASMTASMEDLINEWPSWORDEDIT文件EXMP.OBJ(EXMP.LST)(EXMP.CRF)文件EXMP.EXE(EXMP.MAP)(EXMP.LIB)DEBUG出错出错出错出错操作得到的文件操作使用的工具说明:图1汇编语言程序的建立及汇编过程1.检查源程序;2.测出源程序中的语法错误,并给出出错信息;3.产生目标文件(.OBJ),并可给出列表文件(同时列出汇编语言源程序和机器语言目标程序的文件,称之为.LST文件)和交叉索引文件(列出程序中使用的符号、变量和标号以及引用情况,称之为.CRF文件)。4.展开宏指令。1.1建立汇编语言的工作环境为运行汇编语言程序至少要在磁盘上提供以下文件:1.编辑程序,如EDIT.EXE2.汇编程序,如MASM.EXE3.连接程序,如LINK.EXE4.调试程序,如DEBUG.COM1.2汇编语言源程序上机过程1.建立汇编源程序ASM文件2.汇编产生OBJ文件3.链接产生EXE文件4.程序的调试和执行5.生成EXE或COM文件2汇编语言程序格式存储器的物理地址由段基址和偏移地址组合而成,任何一个逻辑段,无论是代码段,数据段,堆栈段,附加段都必须进行段定义,以便连接程序把不同段和模块连接成一个可执行程序。此外,还必须明确段和段寄存器之间的关系,这可使用段分配语句来完成。1、段定义语句4个逻辑段不一定全部要定义,通常代码段和数据段是必须的,附加段可以省略。但当代码段中使用了串指令,必须设置附加段作目标串基址用,附加段也可用来存放数据,增大数据段容量。一般程序结构:(1)代码段:存放程序执行的指令(2)数据段:存放程序所需的数据(3)堆栈段:存放程序执行的临时信息数据段定义格式:DATASEGMENT;数据段RESULT_1DB1RESULT_2DB1RESULT_3DB1DATAENDS附加段的定义:EXTRASEGMENTDEST_BUFFERDB50DUP(‘?’)EXTRAENDS堆栈段的定义:STACKSEGMENTSTACK;堆栈段STADB64DUP(0)STACK_TOPDB0STACKENDS2、段分配语句在8086/8088系统中存储器采用分段结构,各段容量≦64K字节,用户可以设置多个逻辑段,但只允许4个逻辑段同时有效,段分配语句用来完成将逻辑段分别定义成代码段、数据段、堆栈段和附加段。由于ASSUME伪指令只指定某个段分配给哪个段寄存器,并将代码段的段基址自动装入CS寄存器中,而不能自动把其它段基址装入相应的段寄存器中,所以在代码段的开始要有一段初始化程序完成这一工作。对堆栈段来说除了将段基址送入SS寄存器外,还要将栈顶偏移地址置入堆栈指示器SP中。ASSUMECS:段名,DS:段名,ES:段名,SS:段名(一)DOS下的汇编调试:步骤1汇编调试所需的文件已拷贝在D:\MASM子目录下,它们是:(1)用文本编辑软件UltraEdit、WINDOWS中的记事本或其它的文本编辑器输入汇编语言程序,注意在最后一行的END输入完后要按一次回车键,保存的源文件的扩展各一定要是ASM如:EXAMPLE.ASM(2)MASM.EXE宏汇编工具,把ASM源文件生成OBJ目标文件,(3)LINK.EXE链接工具,把OBJ文件生成EXE文件(4)DEBUG.COM调试工具,可对程序进行调试,跟踪2、进入WindowsXP的命令行方式(在运行程序栏中输入command/cmd并按回车键)或WindowsME和Windows98的MS-DOS方式(在开始→程序→附件MS-DOS方式)。3、在DOS提示符下进行汇编、连接、动态调试等操作。例如:对源文件EXAMPLE.ASM进行的操作D:\MASM\MASMEXAMPLE;汇编源程序操作D:\MASM\LINKEXAMPLE;连接并生成扩展名为.EXE的可执行文件D:\MASM\DEBUGEXAMPLE.EXE对可执行文件进行调试3、要求掌握的调试命令(在DEBUG中使用的命令)a:U-反汇编命令用法:-U代码段地址:起始偏移地址如:-UCS:100b:D-显示内存中的数据命令用法:-D数据段地址:存放数据的偏移地址如:-DDS:0020c:T-单步执行程序命令用法:-T要执行的指令条数如:-T3d:G-连续执行程序命令用法:-G=代码段地址:指令的起始偏移地址指令的结束偏移地址如:-G=CS:100106注意:结束地址一定要是操作码的所在地址e:R-查看和修改寄存器数据命令用法:-R回车如:-RAXf:F-对内存单元填充数据命令用法:-F数据段地址:偏移首地址偏移未地址填入的数据如:-FDS:100120ffg:Q-退出”DEBUG“应用程序命令4、应用例子及操作步骤将AX中的十六进制数拆为三个BCD码,并存入Result_1,Result_2,Result_3的三个单元中。DATASEGMENT;数据段RESULT_1DB1RESULT_2DB1RESULT_3DB1DATAENDSSTACKSEGMENTSTACK;堆栈段STADB64DUP(0)STACK_TOPDB0STACKENDSCODESEGMENT;代码段ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:;程序开头必须要有的五条指令MOVAX,DATAMOVDS,AX;设置数据段MOVAX,STACKMOVSS,AX;设置堆栈段LEASP,STACK_TOP;设置栈顶指针;---------------------------------------;程序的中间部分MOVAX,587MOVCL,100DIVCLMOVRESULT_1,AL;除以100,得百位数MOVAL,AHMOVAH,0MOVCL,10DIVCLMOVRESULT_2,AL;余数除以10,得十位数MOVRESULT_3,AH;余数为个位数;------------------------------------------;程序结束必须要有的两条指令MOVAX,4C00H;INT21H;;------------------------------------------CODEENDSENDSTART;最后一行要按回车键⑴、对源程序进行汇编产生OBJ文件--编译过程D:\MASMMASMEXAMPLE;Microsoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.51514+408822Bytessymbolspacefree0WarningErrors0SevereErrors⑵、对目标文件进行连接产生EXE文件--连接过程D:\MASMLINKEXAMPLE;Microsoft(R)8086ObjectLinkerVersion3.05Copyright(C)MicrosoftCorp1983,1984,1985.Allrightsreserved.⑶、对可执行文件进行调试--调试过程D:\MASMDEBUGEXAMPLE.EXE-UCS:0000用反汇编命令“U代码段地址:起始偏移地址”显示出程序的标识符-U02C160D:0000B80716MOVAX,1607;程序的起始地址是160DH:0000H160D:00038ED8MOVDS,AX160D:0005B80816MOVAX,1608160D:00088ED0MOVSS,AX160D:000A8D264100LEASP,[0041]160D:000EB84B02MOVAX,024B160D:0011B164MOVCL,64160D:0013F6F1DIVCL160D:0015A20000MOV[0000],AL160D:00188AC4MOVAL,AH160D:001AB400MOVAH,00160D:001CB10AMOVCL,0A160D:001EF6F1DIVCL160D:0020A20100MOV[0001],AL160D:002388260200MOV[0002],AH160D:0027B8004CMOVAX,4C00;程序的结束地址是160DH:0027H160D:002ACD21INT21160D:002C9ESAHF-执行程序前观察内存中的数据-DDS:0000;显示内存中的数据命令,命令“D数据段地址:存放数据的偏移地址”显示内存中的数据-DDS:03015F7:0000CD2000A0009AF0FE-1DF03C035D0F7703..........].w.15F7:00105D0F04035D0F4C0F-0101010002FFFFFF]...].L.........15F7:0020FFFFFFFFFFFFFFFF-FFFFFFFFE6154C01..............L.--G=CS:00000027;连续执行
本文标题:实验一-8086汇编语言上机调试及基本操作
链接地址:https://www.777doc.com/doc-2457492 .html