汇编语言程序的设计实验篇(emu8086)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.汇编语言程序设计实验篇
1.1.汇编系统软件简介
Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和存单元的容。
1.1.1创建程序
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和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
寻址方式包括: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对话框中,单击按钮可以察看栈中容)以及出栈后数据的变化情况,并把结果填入表1-1中。程序段如下:MOV AX,0102H
MOV BX,0304H
MOV CX,0506H
MOV DX,0708H
PUSH AX
PUSH BX
PUSH CX
PUSH DX
第—种出栈方式的指令序列:
POP DX
POP CX
POP BX
POP AX
第二种出栈方式的指令序列(注:替换掉第—种出栈方式的指令序列):
POP AX
POP BX
POP CX
POP DX
第三种出栈方式的指令序列(注:替换掉第二种出栈方式的指令序列):
POP CX
POP DX
POP AX
POP BX
表1-1数据传送实验结果表格
寄存器的值第一种出栈方式第二种出栈方式第三种出栈方式
(AX)=
(BX)=
(CX)=