汇编语言常量

常量(constant)是程序中使用的一个确定数值,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量,因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是高级语言常量无法修改的原因。

整数常量

整数常量(integer literal)(又称为整型常量(integer constant))由一个可选前置符号、一个或多个数字,以及一个指明其基数的可选基数字符构成:

[{+|-}] digits [radix]

提示:本教程使用 Microsoft 语法符号。方括号内的元素是可选的;大括号内的元素用 | 符号分隔,且必须要选择其中一个元素;斜体字标识的是有明确定义或说明的元素。

由此,比如 26 就是一个有效的整数常量。它没有基数,所以假设其是十进制形式。如果想要表示十六进制数 26,就将其写为 26h。同样,数字 1101 可以被看做是十进制值,除非在其末尾添加“b”,使其成为 1101b (二进制)。下表列出了可能的基数值:

h 十六进制 r 编码实数
q/o 八进制 t 十进制(备用)
d 十进制 y 二进制(备用)
b 二进制     

下面这些整数常量声明了各种基数。每行都有注释:
26         ;十进制
26d        ;十进制
11010011b  ;二进制
42q        ;八进制
42o        ;八进制
1Ah        ;十六进制
0A3h       ;十六进制
以字母开头的十六进制数必须加个前置 0,以防汇编器将其解释为标识符。

整型常量表达式

整型常量表达式 (constant integer expression) 是一种算术表达式,它包含了整数常量和算术运算符。每个表达式的计算结果必须是一个整数,并可用 32 位 (从 0 到 FFFFFFFFh) 来存放。

下表列出了算术运算符,并按照从高 (1) 到低 (4) 的顺序给出了它们的优先级。对整型常量表达式而言很重要的是,要意识到它们只在汇编时计算。这里将它们简称为 整数表达式。

运算符 名称 优先级
() 圆括号 1
+,- 一元加、减 2
*, / 乘、除 3
MOD 取模 3
+, - 加、减 4

运算符优先级 (operator precedence) 是指,当一个表达式包含两个或多个运算符时,这些操作的执行顺序。下面是一些表达式和它们的执行顺序:
4 + 5 * 2       ;乘法,加法
12 - 1 MOD 5    ;取模,减法
-5 + 2          ;一元减法,加法
(4 + 2)  *  6   ;加法,乘法
下面给出了一些有效表达式和它们的值:

表达式
16/5 3
-(3+4) * (6-1 ) -35
-3+4*6- 1 20
25 mod 3 1

提示:在表达式中使用圆括号来表明操作顺序,那么就不用去死记运算符优先级。

实数常量

实数常量(real number literal)(又称为浮点数常量(floating-point literal))用于表示十进制实数和编码(十六进制)实数。十进制实数包含一个可选符号,其后跟随一个整数,一个十进制小数点,一个可选的表示小数部分的整数,和一个可选的指数:

[sign]integer.[integer] [exponent]

符号和指数的格式如下:

sign                {+,-}
exponent        E[{+,-}]integer

下面是一些有效的十进制实数:

2.
+3.0
-44.2E+05
26.E5

至少需要一个数字和一个十进制小数点。

编码实数(encoded real)表示的是十六进制实数,用 IEEE 浮点数格式表示短实数。比如,十进制数 +1.0 用二进制表示为:

0011 1111 1000 0000 0000 0000 0000 0000

汇编语言中,同样的值可以编码为短实数:

3F800000r

字符常量

字符常量 (character literal) 是指,用单引号或双引号包含的一个字符。汇编器在内存中保存的是该字符二进制 ASCII 码的数值。例如:

'A'
"d"

表明字符常量在内部保存为整数,使用的是 ASCII 编码序列。因此,当编写字符常量“A”时,它在内存中存放的形式为数字 65 ( 或 41h)。

字符串常量

字符串常量 (string literal) 是用单引号或双引号包含的一个字符 ( 含空格符 ) 序列:

'ABC'
'X'
"Good night, Gracie"
'40961

嵌套引号也是被允许的,使用方法如下例所示:

"This isn't a test"
'Say "Good night," Gracie'

和字符常量以整数形式存放一样,字符串常量在内存中的保存形式为整数字节数值序列。例如,字符串常量“ABCD”就包含四个字节 41h、42h、43h、44h。