参考书籍:微机原理与接口技术——基于8086和Proteus仿真(第3版)p103-105,p119-122.
参考程序是p70,例4-1
在上一篇的基础上:
创建项目和汇编文件
写一个汇编程序并编译
双击8086的元件图:
可以修改size
比如这里修改成:
在asm中写一个简单的汇编程序:
DATA SEGMENT ;定义数据段
X DW 2010H ;定义被加数
Y DW 2011H ;定义加数
RESULT DW ? ;分配和数存放单元;数据段定义结束
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
ADD AX,Y
MOV RESULT,AX
JMP $
CODE ENDS
END START
编译:
编译通过:
调试:
选中内存和寄存器窗口(第一个和第二个):
F11单步调试:
发现上述代码进入调试状态后会变成这样:
停止调试,把CODE段写在前面(注意end start仍然写在最后):
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
ADD AX,Y
MOV RESULT,AX
JMP $
CODE ENDS
DATA SEGMENT ;定义数据段
X DW 2010H ;定义被加数
Y DW 2011H ;定义加数
RESULT DW ? ;分配和数存放单元;数据段定义结束
DATA ENDS
END START
进入 调试:
第二个按钮也可以实现单步调试:
单击一次该按钮后观察寄存器和内存:
观察到内存发现数据段的首地址是0020,而AX被赋值为0002。(因为地址=段首址*10H+偏移地址,偏移地址由于是从0000开始,所以是正确的)
继续单击:
此时执行到这条语句:
先看一下result的内存内容(图的右侧),发现我们用?预留的空间并不是我们预料的是个随机数,而是00 00
继续调试:
可看出:低字节送入低地址,高字节送入高地址
jmp $ 构成无条件循环,可以保证仿真持续进行。$表示当前地址。
设置断点
双击某一行左侧:
重新进入调试状态点击第一个按钮:
程序在断点处停止: