此文章主要记录代码的编写,编译,连接,调试过程,相关工具的安装和使用介绍在前面的文章中已提供。
主要功能通过栈实现两个数的交换
源代码如下:
assume cs:codesg
codesg segment
mov ax,2000H
mov ss,ax
mov sp,0
add sp,10
pop ax
pop bx
push ax
push bx
pop ax
pop bx
mov ax,4c00H
int 21H
codesg ends
ends
保存p1.asm,打开DOCBOX,运行如下命令进行编译和连接:
masm p1.asm;
link p1.obj;
运行debug进行调试:
debug p1.exe
r命令查看各个寄存器情况:
u命令查看代码:
t命令进行单步调试:
执行了 mov ax,2000H
执行了 mov ss,ax
执行了 add sp,+0a
源代码和具体执行的指令不一致什么原因?
mov sp,0
add sp,10
这里需要注意两点,一是编译连接对源程序进行了优化,两句变成了一句,二是10是十进制,相当于十六进制的A
pop ax
pop bx
push ax
push bx
push ax
结束
mov ax,4c00H
int 21H