汇编语言等号=伪指令

admin 2023年2月26日14:55:02评论9 views字数 993阅读3分18秒阅读模式

等号伪指令(equal-sign directive)把一个符号名称与一个整数表达式连接起来,其语法如下:

name = expression

通常,表达式是一个 32 位的整数值。当程序进行汇编时,在汇编器预处理阶段,所有出现的 name 都会被替换为 expression。假设下面的语句出现在一个源代码文件开始的位置:

COUNT = 500

然后,假设在其后 10 行的位置有如下语句:

mov eax, COUNT

那么,当汇编文件时,MASM 将扫描这个源文件,并生成相应的代码行:

mov eax, 500

为什么使用符号?

程序员可以完全跳过 COUNT 符号,简化为直接用常量 500 来编写 MOV 指令,但是经验表明,如果使用符号将会让程序更加容易阅读和维护。

设想,如果 COUNT 在整个程序中出现多次,那么,在之后的时间里,程序员就能方便地重新定义它的值:

COUNT = 600

假如再次对该源文件进行汇编,则所有的 COUNT 都将会被自动替换为 600。

当前地址计数器

最重要的符号之一被称为当前地址计数器(current location counter),表示为 $。例如,下面的语句声明了一个变量 selfPtr,并将其初始化为该变量的偏移量:

selfPtr DWORD $

键盘定义

程序通常定义符号来识别常用的数字键盘代码。比如,27 是 Esc 键的 ASCII 码:

Esc_key = 27

在该程序的后面,如果语句使用这个符号而不是整数常量,那么它会具有更强的自描述性。

使用
mov al,Esc_key ;好的编程风格
而非
mov al,27      ;不好的编程风格

使用DUP操作符

数据定义》一节说明了怎样使用 DUP 操作符来存储数组和字符串。为了简化程序的维护,DUP 使用的计数器应该是符号计数器。

在下例中,如果已经定义了 COUNT,那么它就可以用于下面的数据定义中:

array dword COUNT DUP(0)

重定义

用“=”定义的符号,在同一程序内可以被重新定义。下例展示了当 COUNT 改变数值后,汇编器如何计算它的值:

COUNT = 5mov al,COUNT ; AL = 5COUNT = 10mov al,COUNT ; AL = 10COUNT = 100mov al,COUNT ; AL = 100

符号值的改变,例如 COUNT,不会影响语句在运行时的执行顺序。相反,在汇编器预处理阶段,符号会根据汇编器对源代码处理的顺序来改变数值。


汇编语言等号=伪指令



原文始发于微信公众号(汇编语言):汇编语言等号=伪指令

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月26日14:55:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   汇编语言等号=伪指令https://cn-sec.com/archives/1575542.html

发表评论

匿名网友 填写信息