汇编语言程序设计实验篇emu8086.docx
《汇编语言程序设计实验篇emu8086.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验篇emu8086.docx(48页珍藏版)》请在冰豆网上搜索。
汇编语言程序设计实验篇emu8086
汇编语言程序设计实验篇(emu8086)
1.汇编语言程序设计实验篇
1.1.汇编系统软件简介
Emu8086-MicroprocessorEmulator是集源代码编辑器、汇编/反汇编工具以及debug
的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序
1.COMTEMPLATE程序
本章与指令相关的实验都是用COMTEMPLATE类型的程序完成的。
打开emu8086,
在“welcome”对话框中,单击按钮,创建文件。
在“choosecodetemplate”对话框中,选择“COMtemplate-simpleandtinyexecutable,pure
machinecode.”后,单击按钮。
1/33
汇编语言程序设计实验篇(emu8086)
在如所示的编辑界面中,在“;addyourcodehere”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXETEMPLATE程序
本章与DOS功能调用和汇编源程序相关的实验都是用EXETEMPLATE程序完成的。
打开emu8086,在“welcome”对话框中,单击按钮,创建文件。
2/33
汇编语言程序设计实验篇(emu8086)
在“choosecodetemplate”对话框中,选择“EXEtemplate-advancedexecutable:
relocation,
checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码
段的定义以及必要的功能调用等,在“addyourdatahere”和“;addyourcodehere”部分可以分别输入相应的变量定义和指令。
3/33
汇编语言程序设计实验篇(emu8086)
输入全部指令后,单击按钮,保存相应的程序。
1.1.2执行程序
在编辑界面中,如图所示,单击按钮,自动完成源程序的编译和链接。
在
“emulator”对话框中(),左边部分列出了寄存器的当前值,右边部分是已经输入的程序
段,中间部分是右边每条指令的物理地址和对应的机器代码,中间的文本框中列出了当前指
令的CS和IP。
单击按钮,可以单步执行一条指令;单击按钮,可
以一次执行完所有程序;单击按钮,可以重新回到第一条指令的位置处;单击
按钮,可以重新加载另一个程序。
4/33
汇编语言程序设计实验篇(emu8086)
修改“emulator”对话框中文本框的内容,也可以观察其它段的内容,在图所示界面中,
DS=0700H,若要察看该数据段中偏移地址为6000H位置处的内存单元内容,可以在文本框
中输入0700:
6000,显示结果如图所示,中间部分依次列出从该地址开始的所有字节的内容。
在“emulator”对话框的底部,单击按钮,可以观察栈的内容;单击按
5/33
汇编语言程序设计实验篇(emu8086)
钮,可以观察标志寄存器中标志位的内容。
在“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.实验设备
微型计算机、emu8086
3.实验原理
通用数据传送指令包括:
1)通用数据传送指令,如MOV,PUSH,POP,XCHG,CBW,CWD;2)目标地址传送指令,如LDS,LES;3)标志传送指令,如LAHF,SAHF,PUSHF,POPF;4)输入输
出指令,如IN,OUT,LEA
6/33
汇编语言程序设计实验篇(emu8086)
寻址方式包括:
1)立即寻址;2)直接寻址;3)寄存器寻址;4)寄存器间接寻值;5)寄存器相对寻址;6)基址-变址寻址;7)基址—变址—相对寻址;8)隐含寻址
4.实验内容
(1)创建COMTEMPLATE程序,输入以下程序段,观察程序的执行情况,程序段如下:
MOV
BL,08H
;BX=?
MOV
CL,BL
;CL=?
MOV
AX,03FFH
;AX=?
MOV
BX,AX
;BX=?
MOV
DS:
[6000H],BX
;DS:
[6000H]=?
(提示:
在emulator对话框中间的文本框中
输入段基地址:
段内偏移地址,可以观察其它逻辑段相应存储单元的内容)
(2)创建COMTEMPLATE程序,用以下程序段将一组数据压入PUSH堆栈区,然后通过
三种不同方式出栈。
观察栈的变化情况(提示:
在emulator对话框中,单击按钮可
以察看栈中内容)以及出栈后数据的变化情况,并把结果填入表1-1中。
程序段如下:
MOVAX,0102H
MOVBX,0304H
MOVCX,0506H
MOVDX,0708H
PUSHAX
PUSHBX
PUSHCX
PUSHDX
第—种出栈方式的指令序列:
POPDX
POPCX
POPBX
POPAX
第二种出栈方式的指令序列(注:
替换掉第—种出栈方式的指令序列):
POPAX
POPBX
POPCX
POPDX
第三种出栈方式的指令序列(注:
替换掉第二种出栈方式的指令序列):
POPCX
POPDX
POPAX
POPBX
表1-1数据传送实验结果表格
寄存器的值第一种出栈方式第二种出栈方式第三种出栈方式
(AX)=
(BX)=
(CX)=
7/33
汇编语言程序设计实验篇(emu8086)
(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,1200H
2)MOVAX,BX
3)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,BX
3)MOVAX,[SI][DI]
4)MOVBYTEPTR[BX],2000H
5)MOVCS,AX
6)MOVDS,2000H
6.实验报告要求
1)整理源程序段和运行结果。
2)给出几种在emu8086中察看内存单元的方法。
1.2.2算术逻辑运算指令
1.实验目的
1)熟悉算术逻辑运算指令的功能。
2)了解标志寄存器中各标志位的意义以及指令执行对它的影响。
8/33
汇编语言程序设计实验篇(emu8086)
2.实验设备
微型计算机、emu8086
3.实验原理
算术运算指令包括:
1)加法指令,如ADD,ADC,INC;2)减法指令,如
SUB,SBB,DEC,NEG,CMP;3)乘法指令,如MUL,IMUL;4)除法指令,如DIV,IDIV。
逻辑运算指令包括:
AND,OR,NOT,XOR,TEST
4.实验内容
(1)创建COMTEMPLATE程序,输入以下程序段,单步执行并记录标志位的变化情况(提
示:
在emulator对话框中,单击按钮察看标志寄存器的值)。
程序段及结果表格如
表1-2。
表1-2算术逻辑运算实验结果表格
标志位CFZFSFOFPFAF
程序
程序段1
0
0
0
0
0
0
MOVAX,1018H
MOVSI,230AH
ADDAX,SI
ADDAL,30H
MOVBX,3FFH
ADDAX,BX
MOV[20H],1000H
ADD[20H],AX
PUSHAX
POPBX
程序段2
0
0
0
0
0
0
MOVAX,0A0AH
ADDAX,0FFFFH
MOVCX,0FF00H
ADCAX,CX
SUBAX,AX
INCAX
ORCX,0FFH
ANDCX,0F0FH
MOV[10H],CX
程序段3
0
0
0
0
0
0
9/33
汇编语言程序设计实验篇(emu8086)
MOVBL,25H
MOVBYTEPTR[10H],4
MOVAL