汇编语言程序格式
前言
语句格式
语句基本格式
格式
名字项
名字项可以是标号或变量
名字是符号,汇编中所有的符号都是地址。
名字都是地址。
关于名字可以参考我写的另一篇精彩绝伦的博文汇编中的名字(标号和变量)
名字项可以由字母,数字,专用字符(?[email protected]_$)组成,除了数字以外,所有字符都可以放在源语句的第一个位置。
也就是说,数字不能开头
因为如果数字可以开头,那很有可能会混淆名字和数据。
看几个例子
3FBH 数字
FB3H 变量
0FB3H 数字
判断的依据就是:名字项(变量或标号)不能以数字开头!
所以看到3FBH,它是数字开头的,很明显这就是数字,因为变量不能以数字开头
另外还是为了区分,我们规定一个数据如果开头是字母,要在字母前面加0,和变量区分开。
因此FB3H是我们起的一个变量名,而0FB3H一定是一个数字。
补充一下,人为书写的时候,为了避免0和O的混淆,写0的时候可以在0身上画一个\表示我写的这是数字0不是字母O,当然计算机中不存在这个问题,写0的时候也不是一定要画斜线,就当成一个趣味小知识了解吧。
名字中如果用到.则必须是第一个字符。名字项我们也很少加.
可以用很多字符来说明名字,但只有前面的31个字符能被汇编程序所识别。
标号
标号在代码段中定义,后面跟着冒号:
它可以作为过程名定义。
标号有三种属性:段,偏移及类型。
- 段属性定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段总是在CS寄存器中。(因为标号就是在代码段中定义的嘛)
- 偏移属性,标号的偏移地址是从段起始地址到定义标号的位置时间的字节数。
- 类型属性,用来指出该标号是在本段内引用还是在其他段中引用的。如果是在段内引用的,则称为NEAR,否则为FAR。
标号—指向—指令
变量
变量在数据段或附加数据段中定义,后面不跟冒号。变量经常在操作数字段出现。它也有段,偏移及类型三种属性。
- 段属性:定义变量的段起始地址,此值必须在一个段寄存器中。(没有规定一定要在哪个段寄存器里)
- 偏移属性:变量的偏移地址是从段的起始地址到定义变量的位置之间的字节数。在当前段内给出变量的偏移地址等于当前地址计数器($)的值。
- 类型属性:变量的类型属性定义该变量所保留的字节数,如BYTE(1个字节长)、WORD(2个字节长)、DWORD(4个字节长)
变量—指向—数据
注释项
数据定义及存储器分配伪操作
伪操作格式
操作数可以是常熟,或者是表达式
助记符字段说明所用伪操作的助记符,即伪操作,说明所定义的数据类型
变量字段是可选的,他用符号地址(比如X,Y)表示,其作用与指令语句前的标号相同,但它的后面不能跟冒号。如果语句中有变量,则表示第一个字节的偏移地址。
常量
汇编程序默认的数为10进制数
当使用其他进制表示的常数时,需要专门给予标记。
- 二进制数:一定要跟B
- 十进制数:可以加D,可以不加
- 十六进制数:一定要跟H,这个数的第一个字符必须是0~9,所以如果第一个字符是A ~ F时,应该在其前面加上数字0,如0FFFFH(这样是为了和名字区分!这里要和前面的名字结合在一起看)
我们通常使用16进制,更短更简洁,所以1234H这种形式的数字在汇编程序中经常出现。
但是在某些情况下,使用二进制可以更好的表达我们的意思,比如说
AND AL,00110110D
一眼看过去就能知道我们要把第0,3,6,7位清零,如果你用16进制写,就没这么清楚了。
类似的还有TEST,一眼看过去就知道我们要对某几位进行判断,看他们是0还是1(TEST是做与操作)
还要注意在dos环境中默认16进制,就是debug时显示出来的那些数,都是16进制的。
可以参考我的博文汇编中的进制