【EMU8086使用及8086指令系统】—— 微机原理实验

一、实验要求

  1. 熟悉并掌握EMU8086汇编语言编程调试环境;
  2. 学习8086寻址方式(立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、基址变址相对寻址、隐含寻址)。要求对以上寻址方式进行熟悉,观察不同寻址方式下指令运行结果(每种寻址方式2个实例,可参考PPT及教材相关章节);
  3. 学习8086指令系统,输入简单的指令(程序),观察各寄存器、内存相关单元以及处理器标志位的变化(数据传送类指令,算术运算类指令,逻辑运算类指令,标志处理和CPU控制类指令,移位和循环移位类指令,处理器控制类指令、程序控制类指令、输入/输出类指令等,要求每类指令至少2个用例。具体用例自行设计,可参考PPT及教材用例);
  4. 学习汇编语言程序设计的基本步骤和方法;
  5. 学会使用EMU8086 debug调试程序(单步运行、断点设置等);
  6. 学习汇编编程中DOS功能调用方法,掌握常用的DOS功能调用;
  7. 编写一个简单的程序:将“This is my first ASM program-姓名(汉语拼音各人的姓名)”放在DS=0700H,BX=0000H开始的存储器单元中,然后将该内容搬移到BX=0100H开始的单元中,最后将该字符串通过DOS功能调用显示在屏幕上。

二、实验目的

  1. 学习EMU8086仿真开发环境的使用,理解和掌握汇编语言编程的基本步骤;
  2. 熟悉并掌握8086/8088指令系统及内部结构;
  3. 熟悉常用的DOS功能调用,掌握汇编语言编程的人机交互方法;
  4. 熟悉变量、常量及伪指令的使用;
  5. 熟悉内存单元的存储结构,字符串的处理以及简单的编程。

三、实验代码及实验结果

1. 寻址方式:立即寻址

MOV AL,06H

在这里插入图片描述

MOV DX,7000H

在这里插入图片描述

2. 寻址方式:直接寻址

MOV AX,[2000H]

在这里插入图片描述

MOV BX,CS:[1000H]

在这里插入图片描述

3. 寻址方式:寄存器寻址

MOV AX,06H;MOV DS,AX

在这里插入图片描述

MOV BL,01H;MOV DL,BL

在这里插入图片描述

4. 寻址方式:寄存器间接寻址

MOV AX,[BX]

在这里插入图片描述

MOV DX,[BP]

在这里插入图片描述

5. 寻址方式:寄存器相对寻址

MOV AL,[SI+2]

在这里插入图片描述

MOV AX,[BX+4]

在这里插入图片描述

6. 寻址方式:基址变址寻址

MOV AX,[BX][SI]

在这里插入图片描述

MOV AX,[BP][DI]

在这里插入图片描述

7. 寻址方式:基址变址相对寻址

MOV AX, [BX][SI]+2

在这里插入图片描述

MOV AX,[BX][SI]+4

在这里插入图片描述

8. 指令系统:数据传送指令

LDS SI,[BX]

在这里插入图片描述

MOV AX,4000H;
MOV SS,AX;
MOV SP,2000H;
MOV DX,2C5EH;
PUSH DX;
PUSH AX;

在这里插入图片描述

9. 指令系统:算术运算指令

ADD AX,5000H

在这里插入图片描述

MOV AX,2000;
MOV BL,120;
DIV BL

在这里插入图片描述

10. 指令系统:逻辑运算指令

AND AL,0FCH

在这里插入图片描述

XOR AL,0FH

在这里插入图片描述

11. 指令系统:移位和循环移位类指令

 MOV AL,05H;
 SAL AL,1

在这里插入图片描述

MOV AL,12;
SAR AL,2

在这里插入图片描述

12. 指令系统:处理器控制指令

MOV AX,05FH;
MOV BX,03EH;
HLT;
ADD AX,BX

在这里插入图片描述

MOV AX,4000H;
MOV SS,AX;
MOV SP,2000H;
HLT;
MOV DX,2C5EH;
PUSH DX;
PUSH AX;

在这里插入图片描述

13. 指令系统:输入/输出类指令

MOV DX,03FH;
IN AL,DX

在这里插入图片描述

MOV AX,1000H;
OUT 55H,AX

在这里插入图片描述

14. 综合

MOV AX, 0700H
MOV DS, AX
MOV BX,0000H
MOV [02H], 'T'
MOV [04H], 'h'
MOV [06H], 'i'
MOV [08H], 's'
MOV [0AH], ' '
MOV [0CH], 'i'
MOV [0EH], 's'
MOV [10H], ' '
MOV [12H], 'm'
MOV [14H], 'y'
MOV [16H], ' '
MOV [18H], 'f'
MOV [1AH], 'i'
MOV [1CH], 'r'
MOV [1EH], 's'
MOV [20H], 't'
MOV [22H], ' '
MOV [24H], 'A'
MOV [26H], 'S'
MOV [28H], 'M'
MOV [2AH], ' '
MOV [2CH], 'p'
MOV [2EH], 'r'
MOV [30H], 'o'
MOV [32H], 'g'
MOV [34H], 'r'
MOV [36H], 'a'
MOV [38H], 'm'
MOV [3AH], '-'
MOV [3CH], 'Y'
MOV [3EH], 'a'
MOV [40H], 'n'
MOV [42H], 'g'
MOV [44H], 'S'
MOV [46H], 'a'
MOV [48H], 'i'
MOV [4AH], 'l'  
MOV [4CH], 'i'
MOV [4EH], 'n'
MOV [50H], 'g'
MOV CX,0028H
MOV BX,0100H
MOV SI,0002H
COPY:
     MOV AX,DS:[SI]
     MOV DS:[BX+SI],AX
     ADD SI,2
LOOP COPY
MOV BX,0102H
MOV CX,0028H
PRINTF:    
    MOV DL,[BX]
    MOV AH,02H
    INT 21H
    ADD BX,2
LOOP PRINTF
MOV AH,1
INT 21H

MOV AH,4CH
INT 21H
RET

四、实验总结

这是微机系统综合实验的第一次试验,通过在emu8086上的模拟,我对8086汇编语言有了一定的了解,并且学会了各种寻址方式的基本用法和原理,8086指令系统以及如何用简单的汇编语言来编写一段简单的代码。通过一步步的调试运行,我知道了自己经常犯的错误和今后需要改进的地方,感觉本次实验对我意义很大。

<think>好的,我现在需要帮助用户了解如何在微机原理实验使用Emu8086模拟器。首先,我应该回忆一下Emu8086的基本信息,它是一款用于模拟Intel 8086处理器的工具,适合教学和实验。用户可能需要进行汇编语言编程和调试,所以教程需要覆盖安装、编写代码、编译、运行以及调试的步骤。 根据用户提供的引用,特别是引用[1]提到的仿真器设计思路,我应该强调Emu8086如何模拟8086的状态,比如寄存器、内存等,而不需要复制硬件本身。引用[3]提到微架构的设计,说明Emu8086可能通过模拟各个功能模块(如ALU、寄存器)来实现指令执行,这可能需要在教程中解释模拟器的内部工作原理,但用户更可能需要实际操作步骤。 接下来,我需要组织回答的结构,确保符合用户的要求:分步骤说明,包含代码示例、界面使用和调试方法。同时,要使用中文,正确应用LaTeX格式的数学公式,比如在涉及地址计算时使用$...$,例如$[2000H]$。独立公式可能需要用$$...$$,但暂时不确定是否有必要,先标记可能的位置。 然后,检查是否有需要引用的地方。引用[1]提到仿真器分解为小块模拟,这可能对应Emu8086将各个硬件模块分开模拟,比如内存管理单元、寄存器组等。在解释模拟器的工作原理时,可以引用这一点。引用[3]关于微架构和指令执行的部分,可以在解释指令如何被解码和执行时引用。 用户的问题涉及实验使用教程,可能需要具体步骤,如安装、编写第一个程序、调试断点、观察寄存器变化等。同时,用户可能需要了解如何查看内存、单步执行,以及如何将程序下载到实验板(如果有的话)。需要确认Emu8086是否支持这些功能,根据我的知识,Emu8086确实包含这些基础调试功能。 在生成相关问题部分,要考虑用户可能进一步询问的内容,比如调试技巧、常见错误处理、高级功能(如中断模拟)或者与其他工具的比较。根据引用提到的仿真器设计,可能的问题涉及Emu8086的架构模拟细节或与其他模拟器的对比。 最后,确保回答符合格式要求:代码块用正确语法,引用标识自然添加。例如,在讲解仿真器模块时,末尾添加[^1],在提到指令执行和微架构时引用[^3]。</think>### Emu8086模拟器使用教程 Emu8086是一款基于x86架构的8086微处理器仿真工具,主要用于学习汇编语言微机原理实验。以下为基本使用步骤: #### 1. **安装与界面介绍** - 下载安装后,主界面包含代码编辑区、寄存器/内存查看窗口、调试工具栏等[^1]。 - 关键模块: - **代码编辑器**:编写汇编指令。 - **模拟器面板**:显示寄存器、标志位和内存状态,如$AX=0000H$、$[2000H]=0x1A$。 - **调试工具**:支持单步执行、断点设置。 #### 2. **编写第一个程序** ```assembly ; 示例:计算1+2,结果存入AX MOV AX, 1 ADD AX, 2 HLT ; 暂停执行 ``` - 代码说明: - `MOV`:赋值操作。 - `ADD`:算术加法。 - `HLT`:停止仿真。 #### 3. **编译与运行** - 点击 **“Compile”** 生成机器码。 - 点击 **“Run”** 执行程序,观察寄存器变化(如$AX$变为$0003H$)。 #### 4. **调试功能** - **单步执行**:逐条跟踪指令,查看寄存器/内存实时变化。 - **断点设置**:在代码行号左侧点击,添加断点。 - **内存查看**:输入地址如`DS:2000`,查看内存单元值。 #### 5. **实验案例:数据搬运** ```assembly ORG 100H ; 程序起始地址 MOV SI, 2000H ; 源地址 MOV DI, 3000H ; 目标地址 MOV CX, 000AH ; 搬运10字节 REP MOVSB ; 循环搬运 HLT ``` - 执行后,地址$3000H$至$3009H$将复制$2000H$至$2009H$的数据。 #### 6. **连接硬件实验板(可选)** - 通过菜单 **“External Device” → “Load to Memory”** 将程序下载到实验板,模拟真实硬件执行[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值