常量(constant)是程序中使用的一个确定数值,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量,因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是高级语言常量无法修改的原因。
整数常量(integer literal)(又称为整型常量(integer constant))由一个可选前置符号、一个或多个数字,以及一个指明其基数的可选基数字符构成:
提示:本教程使用 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))用于表示十进制实数和编码(十六进制)实数。十进制实数包含一个可选符号,其后跟随一个整数,一个十进制小数点,一个可选的表示小数部分的整数,和一个可选的指数:
符号和指数的格式如下:
下面是一些有效的十进制实数:
至少需要一个数字和一个十进制小数点。
编码实数(encoded real)表示的是十六进制实数,用 IEEE 浮点数格式表示短实数。比如,十进制数 +1.0 用二进制表示为:
在汇编语言中,同样的值可以编码为短实数:
字符常量 (character literal) 是指,用单引号或双引号包含的一个字符。汇编器在内存中保存的是该字符二进制 ASCII 码的数值。例如:
表明字符常量在内部保存为整数,使用的是 ASCII 编码序列。因此,当编写字符常量“A”时,它在内存中存放的形式为数字 65 ( 或 41h)。
字符串常量 (string literal) 是用单引号或双引号包含的一个字符 ( 含空格符 ) 序列:
嵌套引号也是被允许的,使用方法如下例所示:
和字符常量以整数形式存放一样,字符串常量在内存中的保存形式为整数字节数值序列。例如,字符串常量“ABCD”就包含四个字节 41h、42h、43h、44h。