灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4875回复:0

[系统教程]经典汇编语言教程:4.8 符号定义语句

楼主#
更多 发布于:2012-09-23 09:19
在程序中,我们经常要使用一些常量或数值表达式,并把它们直接写在指令中,但当需要修改时,就要对它们逐个进行修改,这无疑会增加维护程序的工作量,而且每个常量或表达式所代表的含义也容易遗忘。
为了改善程序的可读性,尽量减少维护程序的工作量,汇编语言提供了为常量或表达式定义一个符号名的方法。一旦定义了符号名,在指令中就可直接使用它们。


4.8.1 等价语句

1、一般格式
等价语句的一般使用格式如下:
符号名 EQU 表达式
作用是左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名,也不能被重新定义。
2、用符号名代表常量或表达式
当把一个常量或表达式定义成一个具有一定含义的符号名后,在程序中就可以用该符号名来代表该常量或表达式。
例如:
NUMBEREQU100;给缓冲区的长度取一个符号名
BUFF_LENEQUNUMBER+2
CREQU13;给“回车”符的ASCII码定义一个符号名
LFEQU10;给“换行”符的ASCII码定义一个符号名
BUFFERDBNUMBER, ?, NUMBER DUP (?);用符号名来定义缓冲区
3、用符号名代表字符串
用一个具有一定含义的符号名定义某一个较长的字符串,在随后的程序中就用该符号名。例如:
GREETING EQU "How are you!"
在该定义之后,就可使用符号名GREETING来代表字符串"Howare you!"。
4、用符号名关键字或指令助忆符
用一个(组)程序员自己习惯的符号名来代替汇编语言中的关键字或指令助忆符。但在此建议不要这样做,因为程序的编写者习惯,程序的其他阅读者可能会觉得很别扭。
例如:
MOVEEQU MOV ;给指令MOV取另一个符号名MOVE
COUNTER EQU CX ;给寄存器CX取一个叫“计数器”的符号名
上面的定义只是给原来的助忆符MOV和CX起了另一个别名,而原来助忆符MOV和CX仍然可以使用,所以,我们可编写如下语句:
MOVE AX, CX ;相当于指令:MOV  AX, CX
MOV COUNTER, BX ;相当于指令:MOV CX, BX
5、用符号名定义存储单元的别名
可对一片存储单元定义另一个数据类型的符号名,有关叙述参见前面的操作符THIS。
例如:
WORD1EQU THIS WORD;给后面的字节存储单元取一个字属性的符号名
BYTE1DB 12h, 21h
FLAGDW 1234H
FLAG1EQU byte ptr FLAG;给FLAG的低字节取一个字节属性的符号名
FLAG2EQU byte ptr FLAG+1;给FLAG的高字节取一个字节属性的符号名
有了上述定义后,可编写如下语句:
MOV AX, WORD1 ;执行后,(AX)=2112H
MOV BL, FLAG1 ;执行后,(BL)=34H

喜欢0 评分0
游客

返回顶部