微机原理Emu8086仿真软件实验讲义.docx

上传人:小飞机 文档编号:5285970 上传时间:2023-06-22 格式:DOCX 页数:34 大小:677.25KB
返回 下载 相关 举报
微机原理Emu8086仿真软件实验讲义.docx_第1页
第1页 / 共34页
微机原理Emu8086仿真软件实验讲义.docx_第2页
第2页 / 共34页
微机原理Emu8086仿真软件实验讲义.docx_第3页
第3页 / 共34页
微机原理Emu8086仿真软件实验讲义.docx_第4页
第4页 / 共34页
微机原理Emu8086仿真软件实验讲义.docx_第5页
第5页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《微机原理Emu8086仿真软件实验讲义.docx》由会员分享,可在线阅读,更多相关《微机原理Emu8086仿真软件实验讲义.docx(34页珍藏版)》请在三一办公上搜索。

1、实验一显示程序实验1.emu8086 介绍Emu8086-Assembler and Microprocessor Emulator 是-一个可在Windows环境下运行的8086CPU汇编仿真软件,Emu8086集源代码编辑器,汇编/反汇编工具以及可以运行debug的模拟器(虚拟机器)于一身,它优于一般编译器的地方在 于提供了一个虚拟的0x86环境,拥有自己一套独立的“硬件”,可以完成一些纯软 件编译器无法完成的功能例如ed显示,交通灯,步进电机等等,而且动态调试(DEBUG)时非常方便一. 软件启动启动界面如图1所示,用户可以选择新建文本、程序实例、启动指南、近期文档。注册的用户名随意,密

2、码112,即可成功。二. 新建文件单击图1中的“New”选项,软件会弹出如图2所示的选择界面。emptv workspacethe emulatorCancelCOM template - simple and tiny executable file format, pure machine code.EXE template - advanced executable file, header: relocation, checksum.use Flat Assembler / Intel syntax see: fasm_compatibility .asm in examples图2新

3、建立本格式选择COM模板一一适用于简单且不需分段的程序,所有内容均放在代码段中,程序代码默认从ORG 0100H开始;EXE模板一一适用于需分段的复杂程序,内容按代码段、数据段、堆栈段划分。需要注意的是采用该模板时,用户不可将代码段人为地设置为ORG 0100H,而应由编译器自动完成空间分配; BIN模板一一二进制文件,适用于所有用户定义结构类型; BOOT模板一一适用于在软盘中创建文件。此外,若用户希望打开一个完全空的文档,则可选择empty workspace的选项。三. 编译和加载程序用户可根据上述选择的模板中编写程序,如图3所示。该编辑界面集文档编 辑、指令编译、程序加载、系统工具、在

4、线帮助为一体,其菜单功能如表1所示。编写完程序后,用户只需单击工具栏上的“ compile ”按钮,即可完成程序 的编译工作,并弹出如图4所示的编译状态界面。若有错误则会在窗口中提示, 若无错误则还会弹出保存界面,让用户将编译好的文件保存相应的文件夹中。默 认文件夹为emu8086MyBuild,但您可以通过菜单中assembler/ set output directory对默认文件夹进行修改。用户保存的文件类型与第一阶段所选择的模板 有关。完成编译和保存文件后,用户可按下图4中的“close”按钮先关闭该窗体, 再利用工具栏上的“ emulate ”按钮打开真器界面和原程序界面进行真调试,

5、也 可以按下图4中的Run按钮运行直接程序。表1编译器菜单功能一级菜单名称二级菜单名称三级菜单名称功能file文件new新建com templatecom模板exe templateexe模板bin templatebin模板boot templateboot模板example实例open打开文件save保存文件save as另存为prints打印文件export to HTML转换为超文本文件exit退出edit编辑undo取消redo重复cut剪切cope复制paste粘贴select all选择全部find查找find next查找下一个replace代替indent缩进outdent凸

6、出comment block将被选块变为注释uncomment block将被注释变为指令advanced editormacros高级宏汇编advanced高级设置Show line numbers显示仃编号tabitfy selection空格转换为定位字元untabitfy selection定位字元转换为空格lowercase selection用小写字母表示uppercase selection用大与字母表示display white space显示出空格出空间bookmark书签toggle bookmark在光标处放置标签previous bookmark跳到上一个标签处next

7、 bookmark跳到下一个标签处jump to first跳到第一个标签处jump to last跳到最后一个标签处clear all bookmark清除所有标签assembler汇编compile编译compile and load in the emulation编译并加载到真器中fasmFasm汇编set output directory设置输出文件夹emulator真器show emulator显示真窗口assemble and load in the emulator编译并加载到真器中math数学计算multi base calculator多进制基本计算器base conver

8、ter基本转换器ascii codeASCII码表help帮助documentation and tutorials文档及指南check for an update软件更新检查about关于软件四. 仿真调试当用户完成程序编译后,利用工具栏中的“ emulate ”按钮可将编译好的文 件加载到仿真器进行真调试。除使用“ emulate ”按钮外,用户也可以用菜单栏 中的 assembler/compile and load in the emulation 或 emulator/assemble and load in the emulator打开仿真器。仿真器界面如图5所示。0700:010

9、0;上:跄:上:上:跪一&:上:上:上:_:上:.:.:土:上:.:.:土:上:.:.;代码指针0700:0100 热:.oo loo 加W 匹I加而口7皿07100: B8 107101: 03 007102: 00 0MOV AX, 00003H07104 07105 07106 07107 07108 07109 0710A 0710B 0710C 0710D 0710E JB710F 9,或(AF)=1贝 U(AL) (AL)+06H(AH) (AH)+1(AF)1(CF) (AF)(AL) (AL) A0FH)否则 (AL) (AL) A0FH)由上可见,指令将影响AF和CF标志,但

10、状态标志位SF、ZF、PF和OF的状态不确定。在用AAA指令调整以前,先用指令ADD (多字节加法时用ADC)进行8位数的加法运算,相 加结果放在AL中,用AAA指令调整后,非压缩型BCD码结果的低位在AL寄存器,高位在AH寄 存器。3. 实验内容:本实验要求计算X+Y=Z,其中,X、Y、Z为BCD码,其中X=09H,Y=05H。4. 参考程序:;this example shows the use of aaa instruction (ascii adjust after addition).;it is used to add huge bcd numbers.name bcd_aaao

11、rg100h;first number 9:mov ah, 09h;second number 5:mov al, 05h;al = al + ah =;=09h + 05h = 0ehadd al, ah;clear tens byte of bcd;result:xor ah, ah;adjust result to bcd form,;ah = 1, al = 4 - 14aaa;print the result:; store contents of;ax register:movdx, ax;print first digit:movah, 0eh;convert to ascii:

12、ordh, 30hmoval, dhint10h;print second digit:;convert to ascii:or dl, 30hmov al, dlint10h;wait for any key press:mov ah, 0int 16hret ; return control to operating system.5总结思考:(1)xor指令含义;(2)aaa指令的操作过程实验三串操作类指令应用程序1. 实验目的(1) 掌握串操作类指令编程及调试方法。(2) 掌握串操作类指令对各状态标志位的影响及测试方法。2. 实验原理(1)在计算机中,大部分数据存放在主存中,8086C

13、PU提供了一组处理主存中连续存放的 数据串的指令一一串操作指令。串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS 中;目的操作数用寄存器DI寻址,默认在附加段ES中。每执行一次串操作指令,作为源地址指 针的SI和作为目的地址指针的DI将自动修改:+/-1(对于字节串)或+/-2 (对于字串)。地址 指针时增加还是减少取决于方向标志DF。在系统初始化后或者执行指令CLD指令后,DF=0,此时 地址指针增1或2;在执行指令STD后,DF=1,此时地址指针减1或2。串操作指令寻址方式:源操作数和目的操作数分别使用寄存器DS:SI和ES:DI进行间接寻址,源指针DS:SI和目的指针ES:DI将

14、自动进行修改:1、2、4,其对应的分别是字节操作、字操作和双字 操作。串比较指令:CMPSB;字节串比较:DS:SI-ES:DI,SI SI+/-1,DIDI+/-1CMPSW;字串比较:DS:SI-ES:DI,SI SI+/-2,DIDI+/-2比较指令的功能是比较源串与目的 串是否相同,并根据其减法结果设置标志位;指令在每次比较后修改SI和DI寄存器的值,使之 指向下一个元素。串扫描指令:格式1: SCASB;字节操作功能 1: AL(DI), DI-DI 1格式2: SCASW;字操作功能 2: AX(DI), DI-DI 2重复前缀指令:任何一个串操作指令,都可以在前面加一个重复前缀,

15、以实现串操作的重复执行,重复次数隐含在CX寄存器中 REP;REP前缀用在MOVS、STOS、LODS指令前,每次执行一次指令,CX减1;直到CX=0, 重复执行结束. REPZ;也可以表示为REPE,用在CMPS、SCAS指令前,每执行一次串指令CX减1,并判 断ZF标志是否为0;只要CX=0或ZF=0,则重复执行结束。 REPNZ;也可以表达为REPNE,用在CMPS、SCAS指令前,每执行一次串操作指令CX减1, 并判断ZF标志是否为1,只要CX=0或ZF=1,则重复执行结束。REP前缀可以理解为“当数据串没有结束(CX#0),则继续传送”REPZ/REPE前缀可以理解为“当数据串没有结

16、束(CX#0),并且串相等(ZF=1)则继续比较”REPNZ/REPNE前缀可以理解为“当数据串没有结束(CXU0),并且串不相等(ZF=0)则继续比较”(2) $是指当前指令的地址3. 实验内容3.1利用repe cmps指令比较两个字符串是否相等。若相等,显示字符Y,否则显示N。3.2利用repne scasb指令在一个字符串中查找一个指定的字符。4. 参考程序:4.1; how to use cmpsb instruction to compare byte strings.name cmpsborg 100h;set forward direction: cld;load source

17、 into ds:si,;load target into es:di:movax, csmovds, axmoves, axleasi, str1leadi, str2;set counter to string length:mov cx, size;compare until equal: repecmpsbjnznot_equal;yes - equal!moval, ymovah, 0ehint10hjmpexit_herenot_equal:; no - not equal!moval, nmovah, 0ehint 10hexit_here:;wait for any key p

18、ress:mov ah, 0int 16hret;strings must have equal lengths:x1:str1 db test stringstr2 db test stringsize = ($ - x1) / 24.2; this sample shows how to use scasb instruction to find a symbol.org 100hjmp startstr1 db aaabbbxddds_found db yes - found!, 0Dh,0Ah, $s_not db no - not found!, 0Dh,0Ah, $find_wha

19、t equ x start:;set forward direction: cld;set counter to string size: mov cx, 10;load string address into es:dimov ax, csmov es, axlea di, str1;we will look for the character in string: mov al, find_whatrepne scasbjz foundnot_found:;no - not found!mov dx, offset s_notmov ah, 9int 21hjmp exit_here fo

20、und: ;yes -found!mov dx, offset s_foundmov ah, 9int 21h;wait for any key press. mov ah, 0 int 16hexit_here: ret5.思考写出参考程序1和2的流程图实验四堆栈指令程序1. 实验目的(1)掌握堆栈类指令编程及调试方法。(2)掌握堆栈类指令对各状态标志位的影响及测试方法。2. 实验原理堆栈是存储器中专用的缓冲区,用于暂存寄存器数据或地址指针,push/pop就用于堆栈的操 作,这两个指令一般用在:1. 子程序调用,为了保护现场,把所要用的寄存器中的内容先暂时保存起来,在子程序调用结束 之前,

21、按照先进后出的原则,把数据恢复。2. 有时候,需要临时用一下某些寄存器,也可用一下,凭个人喜好。堆栈是一个先进后出的主存区域,位于堆栈段中,使用SS段寄存器记录器段地址。栈只有一 个出口,即当前栈顶。栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。堆栈的 两种基本操作,对应两条基本指令:(1)进栈指令push进栈指令先使堆栈指令sp减2,然后把一个字操作数存入堆栈顶部。堆栈操作的对象只能是 字操作数,进栈时底字节存放于低地址,高字节存放于高地址,sp相应向低地址移动两个字节 单元。(2)出栈指令pop出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针sp加2。目的操作数应为

22、字操作数,字从栈顶弹出时,低地址字节送低字节,高地址字节送高字节。注意: 因为堆栈指针sp总是指向已经存入数据的栈顶(不是空单元),所以PUSH指令是将(SP) 减2,后将内容压栈(即先修改SP是指指向空单元,后压入数据),而POP是先从栈顶 弹出一个字,后将堆栈指针SP加2. 用PUSH指令和POP指令时只能按字访问堆栈,不能按字节访问堆栈。3. 实验内容通过堆栈指令观察堆栈寄存器内容的变化4. 参考程序:;this sample shows how the stack works.;click stack button in emulator to see the contents of

23、the stack.;stack is important element in computer architecture.;this code does nothing useful, except printing Hi in the end.name stackorg100h ; create tiny com file.movax, 1234hpushaxmovdx, 5678hpushdxpopbxpopcx;function call pushes ip value of the next instruction:calltfuncmovax, 7890hpushaxpopbx;

24、 interrupts are like funtions,;but in addition they push code segment into the stack mov ax, 3int 10h; set standart video mode.;a typical use of stack is to set segment registers.;set ds to video memory segment:mov ax, 0b800hpushaxpopds;print hi:mov170h, Hmov172h, i; color attribute for hmov171h, 11

25、001110b; color attribute for imov173h, 10011110b;wait for any key press.mov ah, 0int 16h ;here we pop the ip value,;and return control to the operating system: ret ;the test procedure:tfunc procxorbx, bxxorcx, cx;here we pop the ip value,;and return control to the main program: retendp5.思考列出参考程序的堆栈内

26、容变化过程实验五求找最大值和最小值程序设计1. 实验目的(1) 掌握比较类指令编程及调试方法。(2) 掌握综合程序的设计及调试2. 实验原理微机系统的内存是分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成。8086CPU有四个段寄存器CS,DS,ED,SS.2.1段定义 段名 SEGMENT,;段内的具体内容,段名ENDS例如参考程序的数据段DDATA SEGMENTMES1 DB The least number is:$MES2 DB 0AH,0DH,The largest number is:$NUMB DB 0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9HDDATA ENDS代码段CODE SEGMENTASSUME CS:CODE,DS:DDATA.CODE ENDS2.2段寄存器说明语句每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式:ASSUME段寄存器名:段名,段寄存器名:段名,(1)通常情况下,代码段的第一条语句就是用ASSUME语句来说明段寄存器与段之间的对应

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号