一个简单的 8086 汇编子程序(函数)。
assume cs:code
code segment
main: mov ax, 1000h
call add1
mov ax, 4c00h
int 21h
add1: add ax, 1
ret
code ends
end main
- 标号
main
可以简单地理解为 C 语言中的 main 函数等入口函数; - 标号
add1
是函数 add1 的地址; - 指令
call add1
调用add1
函数。在汇编中,call add1
具体操作:将当前地址CS:IP
压入栈SS:SP
(这就是传说中的栈帧的由来吧?)中,接着转到add1
开始执行; - 标号
add1
执行完add ax, 1
之后,指令ret
会将上一步中保存到SS:SP
栈顶的地址传到CS:IP
,再将该地址出栈; - 函数
add1
执行完毕。 - 指令
mov ax, 4c00h
、int 21h
退出程序。
对以上汇编代码进行处理。
汇编
链接
调试
在这段代码中,我们重点关注 ax 寄存器。
-
上图中的
-r
、-t
等是输入的命令,-
相当于输入的提示符,r
、t
才是实际输入的字符;在每个输出中的最后显示的是下一个将要执行的汇编指令,如MOV AX,1000
。 -
r
查看当前寄存器状态。ax 初始值为 FFFF,下面将要执行的代码是MOV AX, 1000
。 -
t
执行指令,并显示最新的寄存器状态。