您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 汇编语言程序设计实验篇(emu8086)
1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-MicroprocessorEmulator是集源代码编辑器、汇编/反汇编工具以及debug的模拟器。它能模拟一台虚拟的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。1.1.1创建程序1.COMTEMPLATE程序本章与指令相关的实验都是用COMTEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。在“choosecodetemplate”对话框中,选择“COMtemplate-simpleandtinyexecutablefileformat,puremachinecode.”后,单击按钮。在如所示的编辑界面中,在“;addyourcodehere”部分输入相应的指令,第一条指令默认的偏移地址为100h。输入全部指令后,单击按钮,保存相应的程序段。2.EXETEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXETEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。在“choosecodetemplate”对话框中,选择“EXEtemplate-advancedexecutablefile.header:relocation,checksum.”后,单击按钮。在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“addyourdatahere”和“;addyourcodehere”部分可以分别输入相应的变量定义和指令。输入全部指令后,单击按钮,保存相应的程序。1.1.2执行程序在编辑界面中,如图所示,单击按钮,自动完成源程序的编译和链接。在“emulator”对话框中(),左边部分列出了寄存器的当前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指令的CS和IP。单击按钮,可以单步执行一条指令;单击按钮,可以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一个程序。修改“emulator”对话框中文本框的内容,也可以观察其它段的内容,在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为6000H位置处的内存单元内容,可以在文本框中输入0700:6000,显示结果如图所示,中间部分依次列出从该地址开始的所有字节的内容。在“emulator”对话框的底部,单击按钮,可以观察栈的内容;单击按钮,可以观察标志寄存器中标志位的内容。在“emulator”对话框中,选择“view”菜单中的“memory”菜单项,也可以观察内存的情况。在“RandomAccessMemory”对话框中,可以修改文本框中的值可以确定所要观察的地址,该值由段基地址:段内偏移地址构成,如图所示,当前要观察的内存地址为(6000:0010)。在显示结果中,左边是逻辑地址,中间是从该地址的开始连续16个字节的内容,右边是每个字节对应的字符。在该对话框中,也可以直接修改存储器单元的值,如图所示,从60010H开始的连续4个字节的内容已经被修改为12H,34H,56H和78H。1.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)创建COMTEMPLATE程序,输入以下程序段,观察程序的执行情况,程序段如下:MOVBL,08H;BX=?MOVCL,BL;CL=?MOVAX,03FFH;AX=?MOVBX,AX;BX=?MOVDS:[6000H],BX;DS:[6000H]=?(提示:在emulator对话框中间的文本框中输入段基地址:段内偏移地址,可以观察其它逻辑段相应存储单元的内容)(2)创建COMTEMPLATE程序,用以下程序段将一组数据压入PUSH堆栈区,然后通过三种不同方式出栈。观察栈的变化情况(提示:在emulator对话框中,单击按钮可以察看栈中内容)以及出栈后数据的变化情况,并把结果填入表1-1中。程序段如下:MOVAX,0102HMOVBX,0304HMOVCX,0506HMOVDX,0708HPUSHAXPUSHBXPUSHCXPUSHDX第—种出栈方式的指令序列:POPDXPOPCXPOPBXPOPAX第二种出栈方式的指令序列(注:替换掉第—种出栈方式的指令序列):POPAXPOPBXPOPCXPOPDX第三种出栈方式的指令序列(注:替换掉第二种出栈方式的指令序列):POPCXPOPDXPOPAXPOPBX表1-1数据传送实验结果表格寄存器的值第一种出栈方式第二种出栈方式第三种出栈方式(AX)=(BX)=(CX)=(DX)=(3)创建COMTEMPLATE程序,分别输入下列指令,按要求设置各寄存器及内存单元的值(提示:在“emulator”对话框中,可以直接修改寄存器的值;选择“view”菜单中的“memory”菜单项可以设置内存单元的值),其中BX=0010H,SI=0001H,[60010H]=12H,[60011H]=34H,[60012H]=56H,[60013H]=78H,[60120H]=0ABH,[60121H]=0CDH,[60122H]=0EFH,观察指令执行后AX中的内容。1)MOVAX,1200H2)MOVAX,BX3)MOVAX,[0120H]4)MOVAX,[BX]5)MOVAX,0110H[BX]6)MOVAX,[BX][SI]7)MOVAX,0110H[BX][SI](4)创建COMTEMPLATE程序,试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,将DS:6000H字节存储单元中的内容传送到DS:6020H单元中。(5)设AX=1111H,BX=2222H,[DS:6010H]=3333H。试编写COMTEMPLATE程序,将AX的内容与BX的内容交换,然后再将BX的内容与DS:6010H单元的内容进行交换。(6)若[DS:6000H]=0EEFFH,[ES:7000H]=0CCDDH,请编写COMTEMPLATE程序,将两个存储单元的内容交换。5.实验习题指出下列指令的错误并加以改正,并在emu8086中验证。1)MOV[BX],[SI]2)MOVAH,BX3)MOVAX,[SI][DI]4)MOVBYTEPTR[BX],2000H5)MOVCS,AX6)MOVDS,2000H6.实验报告要求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)创建COMTEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮察看标志寄存器的值)。程序段及结果表格如表1-2。表1-2算术逻辑运算实验结果表格标志位程序CFZFSFOFPFAF程序段1000000MOVAX,1018HMOVSI,230AHADDAX,SIADDAL,30HMOVBX,3FFHADDAX,BXMOV[20H],1000HADD[20H],AXPUSHAXPOPBX程序段2000000MOVAX,0A0AHADDAX,0FFFFHMOVCX,0FF00HADCAX,CXSUBAX,AXINCAXORCX,0FFHANDCX,0F0FHMOV[10H],CX程序段3000000MOVBL,25HMOVBYTEPTR[10H],4MOVAL,[10H]MULBL程序段4000000MOVWORDPTR[10H],80HMOVBL,4MOVAX,[10H]DIVBL(2)用BX作为地址指针,从BX所指的内存单元[0010H]开始连续存入三个无符号数(10H、04H、30H),计算内存单元中这三个数的和,并将和放在0013H单元中,再求出这三个数的乘积,并将乘积存入0014单元中,写出完成此功能的COMTEMPLATE程序。(3)创建COMTEMPLATE程序,写出完成下述功能的程序段,并指出程序运行后AX=?1)将15H传送到AL;2)再将AL的内容乘以2;3)将15H传送到BL;4)把AL的内容乘以BL的内容。(4)创建以下两个程序段的COMTEMPLATE程序并上机验证。1)给数据段中从偏移地址1000H开始的12个字存储单元的内容赋值,请将第4条比较指令填写完整(划线处)。MOVSI,1000HNEXT:MOVWORDPTR[SI],1ADDSI,2CMPSI,JNENEXT2)假定要按高地址到低地址的顺序进行清除操作(高地址从1016H开始),则上述程序段应如何修改?5.实验习题简要说明ADD、SUB、AND、OR指令对标志位的影响。6.报告要求1)整理源程序段和运行结果,回答实验中的问题。1.2.3移位指令1.实验目的1)熟悉移位指令的功能。2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。2.实验设备微型计算机、emu80863.实验原理移位指令包括:1)非循环移位指令,如SAL,SAR,SHL,SHR;2)循环移位指令,如ROL,ROR,RCL,RCR4.实验内容(1)创建COMTEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提示:在emulator对话框中,单击按钮可以察看标志寄存器的值)。程序段及结果表格如表1-3。表1-3移位实验结果表格1标志位程序CFZFSFOFPFAF程序段000000MOVAX,0DECAXADDAX,3FFFHADDAX,AXNOTAXSUBAX,3ORAX,0FBFDHANDAX,0AFCFHSHLAX,1RCLAX,1(2)写出完成下述功能的COMTEMPLATE程序并上机验证,程序运行后的商=?1)传送数据2058H到[DS:1000H]单元中,数据12H到DS:1002H单元中;2)把DS:1000H单元中的数据传送到AX寄存器;3)把AX寄存器的内容算术右移二位;4)再把AX寄存器的内容除以DS:1002H字节单元中的数;5)最后把商存入字节单元DS:1003H中。(3)创建COMTEMPLATE程序,输入以下程序段,单步执行并记录每一条指令对内存单元的影响结果(提示:在“emulator”对话框中,选择“view”菜单中的“memory”菜单项可以察看内存单元的值),分析结果并说明该程序段的功能是什么。程序段及结果表格如表1-4。表1-4移位实验结果表格2程序段字单元[1A00H]=字单元[1A02H]=MOV[1A00H],0AA55HMOV[1A02H],2AD5HSHLWORDPTR[1A02H],1CMP[1A00H],8000HC
本文标题:汇编语言程序设计实验篇(emu8086)
链接地址:https://www.777doc.com/doc-8511299 .html