表达式及有关运算符
指令语句可能有一个、两个或没有操作数,而伪指令是否需要操作数,需要何种操作数,随伪操作命令不同而不同。可充当操作数的有常量、变量、标号、寄存器和表达式等。在8086/8088汇编语言中,表达式分为两类:数值表达式和地址表达式 。数值表达式的运算结果是一数值常量,它只有大小而没有属性。而地址表达式的值是与存储器地址相联系,所以它具有段、偏移及类型三个属性)。
3.2.1 常量
常量是没有属性的纯数,它的值在汇编时已完全确定,而且在程序运行期间也不会发生改变。常量主要用于伪指令语句中给变量赋初值,或者用作指令语句中的立即操作数,也可以作为存储器操作数的位移量。
直接以数值形式出现在汇编语句中的常量叫数值常量;对经常引用的数值常量,可以事先为它定义一个名字,然后在语句中用名字来表示该常量,这种常量叫符号常量。
例如:COUNT EQU 32
MOV BX,1200H
MOV [BX] COUNT
ADD AX,COUNT[BX]
其中1200H是数值常量,COUNT是符号常量
常数可以有以下类型:
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" |
字符用单引号或双引号引起来 |