MASM中的Label伪指令
在学习16位MASM汇编中,label并不陌生,在代码中通过名称+冒号(:)的形式定义label非常常见。但label伪指令却不常见,但有时确实很重要。它相当于把所在位置后的代码或数据看成label定义的新的数据类型或新的label(冒号形式)。听着有点抽象,实例如下:
一、代码标号(code label)
语法:name LABEL distance
distance可以是:near、far和proc(proc的意思是可以使near或far,要根据内存模型memory model决定)
作用是为子程序proc提供一个其他入口,例如:
task proc far
... ...
task1 label far(第二个入口)
... ...
ret
task endp
二、为变量提供其他尺寸的访问方式(label variables)
语法:name LABEL type
type可以使:byte、word、dword、fword、qword、tword,也可使结构图(structrue)等。
作用是为数据提供其他的访问方式,例如:
warry label word
darry label dword
barry label 100 dup(?)
三、定义子例程
语法:name LABEL far/near
... ...
retf [constant]/retn [constant]
这里的name label near就可以直接定义成name:(编号+冒号)的形式。
例如:
mypro label far
... ...
retf
总的来说,label伪指令可以提供重新访问代码或数据的方式,可以用在任何地方,类型为near、far或proc就可以通过call访问,类型为byte、word、dword、fword、qword、tword等,就可以通过mov等数据指令访问。