• 汇编语言等号=伪指令

    等号伪指令(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 = 5
    mov al,COUNT ; AL = 5
    COUNT = 10
    mov al,COUNT ; AL = 10
    COUNT = 100
    mov al,COUNT ; AL = 100

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

更多...

加载中...