2.1 常量


常量

  • 其值不会发生变化的数,在汇编阶段就可以确定,直接编码于指令代码中,不是保存在存储器中可变的变量。
  • 因为是编码在指令中的量,和指令一起存储了,所以不用单独开辟主存空间,所以也就没法动态改变它了,这也正是为什么高级语言常量无法修改

常量在程序的使用

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

分类

  1. 整数常量
  2. 实数常量
  3. 字符常量
  4. 字符串常量

整数常量

表示形式:

  1. 二进制数:以字母B结尾,如01001001B
  2. 八进制数:以0或Q结尾,如6310、254Q
  3. 十进制数:以字母D结尾,或者没有结尾字母。如2007D、2007。
  4. 十六进制数:以字母H结尾,如3FEH
    1. 仅仅十六进制中:如果常数的第一个数符为字母,为了与标识符区别,必须在其前面冠以数字“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。在内存中的存储如图所示