汇编程序的格式和模板
前言
通用的模板
王爽老师的《汇编语言》在P127说:
我们可以这样来安排程序的框架:
assume cs:code
code segment
……
数据
……
start:
……
代码
……
code ends
end start
这个模板还可以更详细
古老的模板
但是我们有时候也会看到这样的程序
关于这种程序框架,请参考这俩篇回答
汇编中main proc far是什么意思?
一个古老的汇编框架
这是一种最原始的DOS下EXE程序的框架。
那时候,DOS的版本很低,DOS还没有提供4CH号DOS功能调用,结束程序只能用INT 20H完成。
而 INT 20H结束程序要求执行时CS指向程序段前缀(PSP)所在的段地址。
所以,程序需要将主程序定义成远调用过程(proc far),这样就会将 ret指令汇编成远调用返回(RETF)。而代码开始的三条指令是将PSP段地址入栈,再将0入栈。这样,执行RET的时候就会执行到PSP段偏移地址为0处的一条INT 20H指令,保证正确返回DOS。
后来稍高一点版本的DOS有了4CH号功能调用,就不需要这种程序框架了。
也就是说,这也是一种汇编框架,但现在用的很少了。
这种汇编框架的格式为:
main proc far
push ds
xor ax, ax
push ax
…
ret
main endp
end main
看ppt的时候觉得看不懂
push ds
xor ax, ax
push ax
这几句在干嘛,但其实这就是一个套路,一个模板而已。
两种模板的小比较
当一个程序结束时,需要程序返回。
在第一种模板里,这件事是由
MOV AH,4CH
INT 21H
来做的。
第二种模板比较古老,当时还没有
MOV AH,4CH
INT 21H
这些语句,因此它只能通过
main proc far
……
main endp
来实现程序返回。