常数可以有以下类型:
1.二进制数:以字母B结尾的0和1组成的数字序列,如0101110IB。
2.八进制敷:以字母O或Q结尾的0~7数字序列,如723Q,377O。
3.十进制数;0~9数字序列,可以用字母D结尾,也可以没有结尾字母1991D。
4.十六进制数:以字母H结尾的0~9和A~F(或a~f)的数字字母序列,如3A40H,0FH.为了区别由A~F组成的是一个十六进制数还是一个标识符,凡以字母A~F为起始的一个十六进制数,必须在前面冠以数宇‘O’,否则汇编程序认作标识符。
5.实数:实数包含整数、小数和指数三个部分.这是计算机中的浮点表示法:用十进制数形式给出,实数的格式为:
±整数部分·小数部分E±指数部分
其中:整数和小数部分形成这个的值,称作尾数,它可以是带符号的数。指数部分由指
标识符E开始,它表示了值的大小,如5.391E-4。汇编程序在汇编源程序时,把实数转换为由4个字节,8个字节或10个字节构成的二进制数形式存放。因此,必须用DD,DQ或DT来设置实数。
可以用十六进制数直接说明实数的二进制数编码形式,这个十六进制数必须以。0~9为起始,且不带符号。并最后用实数标识符“R”表示。
6.字符串常数:用引号括起来的一个或多个字符。这些字符用它的ASCii码形式存储在内存中。如‘A’,在内存中就是41H,“AB”是41H,42H。
在程序中,常数主要出现在:
(1) 在指令语句的源操作数中作立即数,它应与目的操作数的位数相或十六位,如:
MOV AX,0AB37H
ADD DL,63H
(2)在指令语句的变址(基址)寻址方式或基址变址寻址方式中作位移量,如
MOV BX,32H[SI]
MOV 0ABH[BX],CX
ADC DX,1234H[BP][DI]
(3)在数据定义伪指令中,如:
DB 12H ;定义一个字节数据
DW 1234H ;定义一个字数据
DD 12345678H ;定义一个双字数据
DB ‘ABCD’ ;定义四个字节的字符串数据
表3.1 各种形式的常量格式对照表如下:
常量形式 |
格式 |
X的取值 |
举例 |
说明 |
二进制常量 |
XX...XB |
0或1 |
01010110B |
以字母B为数据类型后缀 |
十进制常量 |
XX...X XX...XD |
0~9 |
12534 4512D |
可省略字母D |
八进制常量 |
XX...XO XX...XQ |
0~7 |
123456O 162Q |
数据类型后缀是英文字母O或Q |
十六进制常量 |
XX...XH |
0~9 A~F |
0ABC20H 12345H |
如果第一位数是A~F,则必须在它的前面加上0 |
浮点十六进制实数 |
XX...XR |
0~9 A~F |
376FCAD9R 0F4563AC397BD4ER |
同上 |
十进制科学表示 |
XX.XXE XX |
0~9 |
2.30E-2 38.05E 3 |
|
字符常量 |
'XX...X' "XX...X" |
ASCII字符 |
'123ABC' "STUDY" |
字符用单引号或双引号引起来 |
3.2.2 变量
变量是在程序运行期间可以随时修改数值的数据对象。在汇编语言中,变量是一个数据存贮单元的名字,即数据存放地址的符号表示。变量一般都在数据段或附加段中使用数据定义伪指令DB、DW、DD、DQ、DT和LABLE等来定义。
变量的属性:
段属性(SEGMENT)即指定义变量所在段的段首址,说明了该变量存放在哪一个段中。当需要访问该变量时,该段首址一定要在某一段寄存器中。
偏移属性(OFFSET)变量所在段的段首址到该变量定义语句的字节距离。
类型属性(TYPE)指在对该变量所对应的数据区进行存取时,其存取单位所含的字节数。它可以是字节类型(BYTE,一个数据存贮单元占1个字节),字类型(WORD,一个数据存贮单元占2个字节),双字类型(DWORD)、四字类型,十字节类型。这些类型的选择由定义该变量时所使用的伪指令确定。
变量的引用:变量可以单独作为操作数被引用,也可以构成地址表达式后作为操作数被引用:
(1) 在指令语句中,如要对某存储单元进行存取操作,就可直接引用它的变量名(即符号地址)。例如:
DA1 DB 0FEH
DA2 DW 52ACH
┆
MOV AL,DA1
MOV BX,DA2
上述第一条传送指令就是把符号地址DA1存储单元的内容0FEH传送给AL。而第二条指令是把变量DA2(11p符号地址DA2)的内容52ACH送给BX。
在许多指令语句中,无论在源操作数还是目操作数中,采用了变址(基址)寻址或基址寻址。这时,引用一个变量名就是取用它的偏移量。例如:
DA3 DB 10H DUP(?)
DA4 DW 10H DUP(1)
┆
MOV DA3[SI],AL
MOV DX,DA4[BX][DI]