来看一个简化段定义:
.model small ; 储存模型
.stack ; 默认1024字节
.data ; 数据段
msg db 'Good afternoon, good evening, and good night!$'
.code ; 代码段
.startup ; 自动设置ds、ss、sp
mov ah, 09h ; 打印字符串
lea dx, msg
int 21h
.exit ; 自动生成退出指令
end
使用Windows下6.11版本的masm
编译出1.exe
,然后进入DOS下debug
反汇编。
<aside>
🌈 如果忘记了如何使用6.11版本的masm
编译,请参考实验一。
</aside>
观察反汇编出的.code
代码段,可以发现:
.startup
被编译成了一些设置ds
、ss
、sp
寄存器的指令。
.exit
被编译成了那个每次都得写的mov ah, 4ch
中断退出。
可见,汇编伪代码,大都就是一些简化写法,让编译器去生成那些啰里吧嗦的话。
<aside> 🌈 如果你用过C语言的宏,也许会发现它们有点像,都会在预编译阶段被编译器展开。
</aside>
一些常用的代码段,应该定义成子程序,避免反复书写,提高源码可读性。
比如,在.code
代码段定义一个打印字符的子程序:
print_char proc ; 打印字符dl
push ax ; 保护ax
mov ah, 02h
int 21h
pop ax
ret
print_char endp