1. 汇编语言程序设计实验篇1.1. 汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug的模拟器它能模拟一台"虚拟"的电脑运营程序,拥有独立的“硬件”, 避免访问真实硬件该软件兼容Intel的下一代解决器,涉及PentiumII、Pentium4运用该软件提供的调试工具,可以单步跟踪程序,观测程序执行过程中寄存器、标志位、堆栈和内存单元的内容1.1.1 创立程序1. COM TEMPLATE程序本章与指令有关的实验都是用COM TEMPLATE类型的程序完毕的打开emu8086,在“welcome…”对话框中,单击按钮,创立文献在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h输入所有指令后,单击按钮,保存相应的程序段2. EXE TEMPLATE程序本章与DOS功能调用和汇编源程序有关的实验都是用EXE TEMPLATE程序完毕的。
打开emu8086,在“welcome…”对话框中,单击按钮,创立文献在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮在如图所示的编辑界面中,已经可以给出了源程序的框架,涉及数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令输入所有指令后,单击按钮,保存相应的程序1.1.2 执行程序在编辑界面中,如图所示,单击按钮,自动完毕源程序的编译和链接在“emulator”对话框中(),左边部分列出了寄存器的目前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和相应的机器代码,中间的文本框中列出了目前指令的CS和IP单击按钮,可以单步执行一条指令;单击按钮,可以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一种程序修改“emulator”对话框中文本框的内容,也可以观测其他段的内容,在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为6000H位置处的内存单元内容,可以在文本框中输入0700:6000,显示成果如图所示,中间部分依次列出从该地址开始的所有字节的内容。
在“emulator”对话框的底部,单击按钮,可以观测栈的内容;单击按钮,可以观测标志寄存器中标志位的内容 在“emulator”对话框中,选择“view”菜单中的“memory”菜单项,也可以观测内存的状况在“Random Access Memory”对话框中,可以修改文本框中的值可以拟定所要观测的地址,该值由段基地址:段内偏移地址构成,如图所示,目前要观测的内存地址为(6000:0010)在显示成果中,左边是逻辑地址,中间是从该地址的开始持续16个字节的内容,右边是每个字节相应的字符在该对话框中,也可以直接修改存储器单元的值,如图所示,从60010H开始的持续4个字节的内容已经被修改为12H,34H,56H和78H1.2 基本实验1.2.1 数据传送指令1. 实验目的1)熟悉8086指令系统的数据传送指令及8086的寻址方式2)运用emu8086调试工具调试汇编程序2. 实验设备微型计算机、emu80863. 实验原理通用数据传送指令涉及:1)通用数据传送指令,如MOV,PUSH,POP,XCHG,CBW,CWD;2)目的地址传送指令,如LDS,LES;3)标志传送指令,如LAHF,SAHF,PUSHF,POPF;4)输入输出指令,如IN,OUT,LEA寻址方式涉及:1)立即寻址;2)直接寻址;3)寄存器寻址;4)寄存器间接寻值;5)寄存器相对寻址;6)基址-变址寻址;7)基址—变址—相对寻址;8)隐含寻址4. 实验内容(1)创立COM TEMPLATE程序,输入如下程序段,观测程序的执行状况,程序段如下:MOV BL,08Hﻩﻩﻩ;BX=?MOV CL,BL ﻩ;CL=?MOV AX,03FFH ;AX=?MOV BX,AX ;BX=?MOV DS:[6000H],BX ;DS:[6000H]=?(提示:在emulator对话框中间的文本框中输入段基地址:段内偏移地址,可以观测其他逻辑段相应存储单元的内容)(2)创立COM TEMPLATE程序,用如下程序段将一组数据压入PUSH堆栈区,然后通过三种不同方式出栈。
观测栈的变化状况(提示:在emulator对话框中,单击按钮可以察看栈中内容)以及出栈后数据的变化状况,并把成果填入表 11中程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX第—种出栈方式的指令序列:POP DXPOP CXPOP BXPOP AX第二种出栈方式的指令序列(注:替代掉第—种出栈方式的指令序列):POP AXPOP BXPOP CXPOP DX第三种出栈方式的指令序列(注:替代掉第二种出栈方式的指令序列):POP CXPOP DXPOP AXPOP BX表 11数据传送实验成果表格寄存器的值第一种出栈方式第二种出栈方式第三种出栈方式(AX)=(BX)=(CX)=(DX)=(3)创立COM TEMPLATE程序,分别输入下列指令,按规定设立各寄存器及内存单元的值(提示:在“emulator”对话框中,可以直接修改寄存器的值;选择“view”菜单中的“memory”菜单项可以设立内存单元的值),其中BX=0010H,SI=0001H,[60010H]=12H,[60011H]=34H,[60012H]=56H,[60013H]=78H,[60120H]=0ABH,[60121H]=0CDH,[60122H]=0EFH,观测指令执行后AX中的内容。
1)MOV AX,1200H2)MOV AX,BX3)MOV AX,[0120H]4)MOV AX,[BX]5)MOV AX,0110H[BX]6)MOV AX,[BX][SI]7)MOV AX,0110H[BX][SI](4)创立COM TEMPLATE程序,试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,将DS:6000H字节存储单元中的内容传送到DS:6020H单元中5)设AX=1111H,BX=2222H,[DS:6010H]=3333H试编写COM TEMPLATE程序,将AX的内容与BX的内容互换,然后再将BX的内容与DS:6010H单元的内容进行互换6)若[DS:6000H]=0EEFFH,[ES:7000H]=0CCDDH,请编写COM TEMPLATE程序,将两个存储单元的内容互换5. 实验习题指出下列指令的错误并加以改正,并在emu8086中验证1)MOV [BX],[SI]2)MOV AH,BX3)MOV AX,[SI][DI]4)MOV BYTE PTR[BX],H5)MOV CS,AX6)MOV DS,H6. 实验报告规定1) 整顿源程序段和运营成果。
2) 给出几种在emu8086中察看内存单元的措施1.2.2 算术逻辑运算指令1. 实验目的1)熟悉算术逻辑运算指令的功能2)理解标志寄存器中各标志位的意义以及指令执行对它的影响2. 实验设备微型计算机、emu80863. 实验原理算术运算指令涉及:1)加法指令,如ADD,ADC,INC;2)减法指令,如SUB,SBB,DEC,NEG,CMP;3)乘法指令,如MUL,IMUL;4)除法指令,如DIV,IDIV逻辑运算指令涉及:AND,OR,NOT,XOR,TEST4. 实验内容(1)创立COM TEMPLATE程序,输入如下程序段,单步执行并记录标志位的变化状况(提示:在emulator对话框中,单击按钮察看标志寄存器的值)程序段及成果表格如表 12表 12算术逻辑运算实验成果表格标志位程序 CFZFSFOFPFAF程序段1000000MOV AX, 1018HMOV SI, 230AHADD AX, SIADD AL, 30HMOV BX, 3FFHADD AX,BXMOV [20H], 1000HADD [20H], AXPUSH AXPOP BX程序段2000000MOV AX, 0A0AHADD AX, 0FFFFHMOV CX, 0FF00HADC AX, CXSUB AX, AXINC AXOR CX, 0FFHAND CX, 0F0FHMOV [10H], CX程序段3000000MOV BL, 25HMOV BYTE PTR[10H], 4MOV AL, [10H]MUL BL程序段4000000MOV WORD PTR[10H],80HMOV BL, 4MOV AX, [10H]DIV BL(2)用BX作为地址指针,从BX所指的内存单元[0010H]开始持续存入三个无符号数(10H、04H、30H),计算内存单元中这三个数的和,并将和放在0013H单元中,再求出这三个数的乘积,并将乘积存入0014单元中,写出完毕此功能的COM TEMPLATE程序。
3)创立COM TEMPLATE程序,写出完毕下述功能的程序段,并指出程序运营后AX=?1)将15H传送到AL;2)再将AL的内容乘以2;3)将15H传送到BL;4)把AL的内容乘以BL的内容4)创立如下两个程序段的COM TEMPLATE程序并上机验证1)给数据段中从偏移地址1000H开始的12个字存储单元的内容赋值,请将第4条比较指令填写完整(划线处。