常量
- 其值不会发生变化的数,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量。
- 因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是为什么高级语言常量无法修改。
常量在程序的使用
1、作指令语句的源操作数(立即寻址)
1. MOV AX, 0B2FOH
2. ADD AH, 64H
2、在指令语句的直接寻址方式、寄存器相对寻址方式或基址-变址-相对寻址方式中作位移量。
1. MOV BX,[32H]
2. MOV OABH[BX],CX
3. ADC DX,1234H [BP][DI]
3、在数据定义伪指令中使用
1. DB 10H
2. DW 3210H
分类
- 整数常量
- 实数常量
- 字符常量
- 字符串常量
整数常量
表示形式:
- 二进制数:以字母B结尾,如
01001001B
- 八进制数:以0或Q结尾,如
6310、254Q
- 十进制数:以字母D结尾,或者没有结尾字母。如
2007D、2007。
- 十六进制数:以字母H结尾,如
3FEH
。
- 仅仅十六进制中:如果常数的第一个数符为字母,为了与标识符区别,必须在其前面冠以数字“0”。
h |
十六进制 |
q/o |
八进制 |
d |
十进制 |
b |
二进制 |
例子
- 26 ;十进制
- 26d ;十进制
- 11010011b ;二进制
- 42q ;八进制
- 42o ;八进制
- 1Ah ;十六进制
- 0A3h ;十六进制 -- 以字母开头的十六进制数必须加个前置 0,以防汇编器将其解释为标识符。
整型常量表达式
- 是一种算术表达式,计算结果必须是一个整数,并可用 32 位 (从 0 到 FFFFFFFFh) 来存放。
- 对整型常量表达式而言很重要的是,要意识到它们只在汇编时计算。这里将它们简称为 整数表达式。
运算符 |
名称 |
优先级 |
() |
圆括号 |
1 |
+,- |
一元加、减 |
2 |
*, /,MOD |
乘、除、取模 |
3 |
+, - |
加、减 |
4 |
下面给出了一些有效表达式和它们的值:
表达式 |
值 |
-(3+4) * (6-1 ) |
-35 |
实数常量
- 又称为浮点数常量
- 用于表示十进制实数和编码(十六进制)实数。
- 汇编程序在汇编源程序时,可以把实数转换为4字节、8字节或10字节的二进制数形式存放。
定义格式
- 至少需要一个数字和一个十进制小数点。
- 下面是一些有效的十进制实数:
2.
+3.0
26.E5
-44.2E+05
字符常量
- 用单引号或双引号包含的一个字符。
- 汇编器在内存中保存的是该字符二进制 ASCII 码的数值。
- 例如:
'A' ;当编写字符常量“A”时,它在内存中存放的形式为数字 65 ( 或 41h)。
字符串常量
- 用引号(单引号或双引号)括起来的一个或多个字符,其值为这些字符的ASCII 码值
定义字符串常量
- 用单引号或双引号包含的一个字符 序列( 含空格符 ) :
'ABC'
'X'
"Good night, Gracie"
'40961
"This isn't a test"
'Say "Good night," Gracie'
- 和字符常量以整数形式存放一样,字符串常量在内存中的保存形式为整数字节数值序列。例如,字符串常量“ABCD”就包含四个字节 41h、42h、43h、44h。
在内存中的存储:
- 例如,字符串
ABC
的值为41H、42H、43H。在内存中的存储如图所示。