1、输入全部指令后,单击 按钮,保存相应的程序段。2. EXE TEMPLATE 程序本章与 DOS 功能调用和汇编源程序相关的实验都是用 EXE TEMPLATE 程序完成的。打开 emu8086,在“ welcome ”对话框中,单击 按钮,创建文件。2/33在“ choose code template”对话框中, 选择“ EXE template -advanced executable : relocation,checksum.”后,单击 按钮。在如图所示的编辑界面中, 已经可以给出了源程序的框架, 包含数据段、 堆栈段和代码段的定义以及必要的功能调用等,在“ add your dat
2、a here”和“ ;add your code here ”部分可以分别输入相应的变量定义和指令。3/33输入全部指令后,单击 按钮,保存相应的程序。1.1.2 执行程序在编辑界面中,如图所示,单击 按钮,自动完成源程序的编译和链接。在“ emulator ”对话框中() ,左边部分列出了寄存器的当前值,右边部分是已经输入的程序段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指令的 CS和 IP。单击 按钮,可以单步执行一条指令;单击 按钮,可以一次执行完所有程序;单击 按钮,可以重新回到第一条指令的位置处;单击按钮,可以重新加载另一个程序。4/33修改“ em
3、ulator ”对话框中文本框的内容, 也可以观察其它段的内容, 在图所示界面中,DS=0700H,若要察看该数据段中偏移地址为 6000H 位置处的内存单元内容,可以在文本框中输入 0700:6000 ,显示结果如图所示, 中间部分依次列出从该地址开始的所有字节的内容。在“ emulator ”对话框的底部,单击 按钮,可以观察栈的内容;单击 按5/33钮,可以观察标志寄存器中标志位的内容。在“ emulator ”对话框中,选择“ view ”菜单中的“ memory ”菜单项,也可以观察内存的情况。在“ Random Access Memory ”对话框中,可以修改文本框中的值可以确定所
4、要观察的地址,该值由段基地址:段内偏移地址构成,如图所示,当前要观察的内存地址为(6000:0010 )。在显示结果中,左边是逻辑地址,中间是从该地址的开始连续 16 个字节的内容, 右边是每个字节对应的字符。 在该对话框中,也可以直接修改存储器单元的值, 如图所示,从 60010H 开始的连续 4 个字节的内容已经被修改为 12H, 34H, 56H 和 78H 。1.2 基础实验1.2.1 数据传送指令1. 实验目的1)熟悉 8086 指令系统的数据传送指令及 8086 的寻址方式。2)利用 emu8086 调试工具调试汇编程序。2. 实验设备微型计算机、 emu80863.实验原理通用数
5、据传送指令包括: 1)通用数据传送指令,如 MOV,PUSH,POP,XCHG,CBW,CWD;2)目标地址传送指令,如 LDS,LES;3)标志传送指令,如 LAHF,SAHF,PUSHF,POPF; 4)输入输出指令,如 IN,OUT,LEA6/33寻址方式包括: 1)立即寻址; 2)直接寻址; 3)寄存器寻址; 4)寄存器间接寻值; 5)寄存器相对寻址; 6)基址 -变址寻址; 7)基址变址相对寻址; 8)隐含寻址4.实验内容(1)创建 COM TEMPLATE 程序,输入以下程序段,观察程序的执行情况,程序段如下:MOVBL , 08H;BX=?CL ,BLCL=?AX , 03FFH
6、AX=?BX ,AXDS:6000H , BX6000H=? ( 提示: 在 emulator 对话框中间的文本框中输入段基地址:段内偏移地址,可以观察其它逻辑段相应存储单元的内容)(2)创建 COM TEMPLATE 程序,用以下程序段将一组数据压入 PUSH 堆栈区,然后通过三种不同方式出栈。观察栈的变化情况( 提示: 在 emulator 对话框中,单击 按钮可以察看栈中内容)以及出栈后数据的变化情况,并把结果填入表 1-1 中。程序段如下:MOV AX , 0102HMOV BX , 0304HMOV CX , 0506HMOV DX , 0708HPUSH AXPUSH BXPUSH
7、 CXPUSH DX第种出栈方式的指令序列:POP DXPOP CXPOP BXPOP AX第二种出栈方式的指令序列(注:替换掉第种出栈方式的指令序列) :第三种出栈方式的指令序列(注:替换掉第二种出栈方式的指令序列) :表 1-1 数据传送实验结果表格寄存器的值 第一种出栈方式 第二种出栈方式 第三种出栈方式(AX )=(BX )=(CX )=7/33(DX )=(3)创建 COM TEMPLATE 程序,分别输入下列指令,按要求设置各寄存器及内存单元的值(提示:在“ emulator”对话框中, 可以直接修改寄存器的值; 选择“view ”菜单中的“memory ” 菜单项可以设置内存单元
8、的值) ,其中 BX 0010H ,SI0001H ,60010H 12H,60011H34H ,60012H 56H ,60013H 78H ,60120H 0ABH , 60121H 0CDH ,60122H0EFH ,观察指令执行后 AX 中的内容。1) MOV AX , 1200H2) MOV AX , BX3) MOV AX , 0120H4) MOV AX , BX5) MOV AX , 0110HBX6) MOV AX , BXSI7) MOV AX , 0110HBXSI(4)创建 COM TEMPLATE 程序,试分别用 8086 的直接寻址、寄存器间接寻址、变址寻址、寄存器
9、相对寻址传送指令编写程序段,将 DS: 6000H 字节存储单元中的内容传送到 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 , SI2) MOV AH ,
10、 BX3) MOV AX , SIDI4) MOV BYTE PTRBX , 2000H5) MOV CS,AX6) MOV DS,2000H6.实验报告要求1) 整理源程序段和运行结果。2) 给出几种在 emu8086 中察看内存单元的方法。1.2.2 算术逻辑运算指令1.实验目的1)熟悉算术逻辑运算指令的功能。2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。8/332.实验设备算术运算指令包括:1)加法指令,如 ADD,ADC,INC ;2)减法指令,如SUB,SBB,DEC,NEG,CMP ; 3)乘法指令,如 MUL,IMUL ; 4)除法指令,如 DIV ,IDIV 。逻辑
11、运算指令包括: AND,OR,NOT,XOR,TEST4. 实验内容(1)创建 COM TEMPLATE 程序,输入以下程序段, 单步执行并记录标志位的变化情况 (提示: 在 emulator 对话框中,单击 按钮察看标志寄存器的值) 。程序段及结果表格如表 1-2。表 1-2 算术逻辑运算实验结果表格标志位 CF ZF SF OF PF AF程序程序段 1MOV AX, 1018HMOV SI, 230AHADD AX, SIADD AL, 30HMOV BX, 3FFHADD AX , BXMOV 20H, 1000HADD 20H, AX程序段 2MOV AX, 0A0AHADD AX, 0FFFFHMOV CX, 0FF00HADC AX, CXSUB AX, AXINC AXOR CX, 0FFHAND CX, 0F0FHMOV 10H, CX程序段 39/33MOV BL, 25HMOV BYTE PTR10H, 4MOV AL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1