此文章主要记录代码的编写,编译,连接,调试过程,相关工具的安装和使用介绍在前面的文章中已提供。
主要功能通过栈实现两个数的交换
源代码如下:
assume cs:codesg
codesg segmentmov ax,2000Hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxmov ax,4c00Hint 21Hcodesg 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