`
zzc1684
  • 浏览: 1224563 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 Win32 汇编[13]: 定义符号常量(=、EQU、TEXTEQU)

 
阅读更多

=、EQU、TEXTEQU 功能差不多, 它们定义的符号都将在编译前辈替换成它们指定的常量值.

相比之下 EQU 更好用些.



= 举例


; Test13_1.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
    
.data
    n = 1      ; = 伪指令只能定义整数或整数表达式
    n = n + 1  ; 可重复定义
.code
main proc
    PrintDec n ;2
    ret
main endp
end main


EQU 例一


; Test13_2.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
    
.data
    num1 equ 2         ; equ 可以定义整数和整数表达式
    num2 equ 3         ; 它不能像 = 一样重复定义
    num3 equ num1+num2 ; (我尝试了重复定义, 竟然有时也可以, 只是偶尔)
    
    txt  equ <'Asm'>   ; 可用 equ 定义字符串, 应使用 <>
    
    szTxt db txt, 0    ; 使用 equ 定义的常量
.code
main proc
    PrintDec num3     ;5
    PrintString szTxt ;Asm
    ret
main endp
end main


EQU 例二


; Test13_3.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
includelib kernel32.lib
include    user32.inc
includelib user32.lib

; 用 equ 给函数重命名
Msg  equ MessageBox
Exit equ <ExitProcess>  ;尖括号可保证字符串的完整、并避免和关键字冲突
; 甚至代替整个表达式
ShowMsg equ <invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK>

.data
    szMsg     db 'Hello World!', 0
    szCaption db 'Hi', 0
.code
main proc
    invoke Msg, NULL, addr szMsg, addr szCaption, MB_OK
    ShowMsg
    invoke Exit, NULL
main endp
end main


用 TEXTEQU 重做上一个例子, 完全可行:


; Test13_4.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
includelib kernel32.lib
include    user32.inc
includelib user32.lib

Msg  textequ MessageBox
Exit textequ <ExitProcess>
ShowMsg textequ <invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK>

.data
    szMsg     db 'Hello World!', 0
    szCaption db 'Hi', 0
.code
main proc
    invoke Msg, NULL, addr szMsg, addr szCaption, MB_OK
    ShowMsg
    invoke Exit, NULL
main endp
end main


用 TEXTEQU 重做 EQU 的第一个例子(Test13_2.asm), 有区别:


; Test13_5.asm
.386
.model flat, stdcall

include    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
    
.data
    num1 equ 2               ; 这里的 equ 换做 textequ 不行
    num2 textequ <3>         ; 如果用 textequ 定义整数或表达式也要放在 <> 中
    num3 textequ <num1+num2> ; 这曾是 num3 equ num1+num2
    
    txt  textequ <'Asm' ;
    txt  textequ <'Delphi'>  ; textequ 可重复定义
    
    szTxt db txt, 0
.code
main proc
    PrintDec num3     ;5
    PrintString szTxt ;Delphi
    ret
main endp
end main
分享到:
评论

相关推荐

    win32汇编语言实现冒泡排序

    ### Win32汇编语言实现冒泡排序 #### 一、背景 随着现代软件开发的不断进步和发展,大型软件项目通常不再使用汇编语言作为主要编程语言,这主要是因为汇编语言编写耗时且不易维护。然而,在某些特定场景下,如硬件...

    win32asm例子

    【win32汇编MASM】是编程领域中一个专门针对Windows 32位系统进行程序开发的技术。MASM(Microsoft Assembler)是微软提供的一个汇编语言编译器,它支持Intel x86架构下的汇编语言编程,广泛应用于低级别系统编程、...

    masm32关键字之typedef, equ, =

    在MASM32中,`typedef`, `equ`, 和 `=` 关键字各自扮演着不同的角色,帮助我们定义和管理符号。下面我们将详细探讨这三个概念及其在汇编程序中的应用。 1. `typedef`: 在C/C++中,`typedef` 关键字用于创建一个新...

    下载脚本地址.zip

    ::======================================================================================================================================== if %winbuild% LSS 7600 ( %ErrLine% echo Unsupported OS ...

    自动脚本工具.zip

    ::======================================================================================================================================== if %winbuild% LSS 7600 ( %ErrLine% echo Unsupported OS ...

    汇编语言习题册,有答案已经收编[汇编].pdf

    14. X1 EQU 1000H和X2=1000H的区别在于X1是符号常量,而X2是数值常量。 15. 两个AND指令的区别在于第一个AND操作是将AX与STR1按位与,第二个AND操作是将STR2与STR1按位与,即第一个AND影响AX,第二个AND影响STR2。 ...

    汇编语言与汇编程序.pptx

    * EQU:定义符号常量。 * DB:定义字节变量。 * DW:定义字变量。 * DD:定义双字变量。 * DQ:定义四字变量。 * DT:定义十字节变量。 常用系统功能调用与BIOS: * INT 21H:DOS系统调用。 * INT 10H:视频BIOS...

    汇编语言及汇编程序设计.pptx

    符号定义伪指令EQU用于给符号名赋值,格式为:&lt;符号名&gt; EQU &lt;表达式&gt;。例如:EQU 88HPORT EQU PORT+2,定义符号PORT代表88H,定义符号DATA代表PORT+2。 等号(赋值)伪指令用于给符号名赋值,格式为:&lt;符号名&gt; = ...

    ARM汇编语言中的符号

    在ARM汇编语言中,数字常量的定义通常使用`EQU`伪操作完成。需要注意的是,一旦定义了一个数字常量,其值就不能再被更改。 #### 六、标号的种类 - **基于PC的标号**:这种标号通常用于跳转指令的目标地址,或者...

    ARM汇编语言中的符号全

    ### ARM汇编语言中的符号全解析 #### 一、引言 ARM汇编语言作为一种重要的编程语言,在单片机开发领域具有广泛的应用。在ARM汇编语言中,符号的使用非常关键,它们不仅可以提高程序的可读性,还能帮助开发者更高效...

    汇编语言:分类统计字符个数

    .386 .MODEL FLAT INCLUDE io.h ExitProcess PROTO NEAR32 stdcall,dwExitCode:DWORD cr EQU 0dh Lf EQU 0ah .STACK 4096 .DATA

    汇编语言的伪指令语句PPT学习教案.pptx

    在汇编语言中,符号定义伪指令语句有两种形式:EQU 伪操作和等号语句。EQU 伪操作用于定义符号名,并将符号名与某个值关联起来。例如:EMP EQU 0;定义符号名 EMP 为 0。等号语句则用于重新定义符号名。例如:EMP = ...

    最好的MASM汇编教程

    3. `EQU`:用于给符号赋值,相当于常量。 4. `PROC`/`ENDP`:用于定义子程序的开始和结束。 5. `LABEL`:定义标号,作为代码或数据的引用点。 6. `ORG`:设置当前地址,用于指定代码或数据的起始位置。 7. `END`:...

    单片机原理及应用汇编语言程序设计PPT学习教案.pptx

    - **EQU**: 定义符号常量,如 `TTY EQU 1080H`。 - **DB**: 定义字节数据,例如 `DB 80H`。 - **DW**: 定义16位数据,如 `DW 1080H`。 - **DS**: 定义存储区域,如 `DS 0100H`。 - **BIT**: 定义位地址,如 `BIT 7FH...

    STM32-asm.rar_STM32 汇编_stm32 asm_stm32汇编_stm32汇编指令

    例如,`EQU`定义常量,`ORG`指定内存位置,`LABEL`定义标号。 2. **寄存器使用**: - STM32的Cortex-M内核拥有多个通用寄存器(R0-R15),其中R13作为堆栈指针SP,R14作为链接寄存器LR,R15作为程序计数器PC。 - ...

    汇编语言程序设计汇编语言的语句伪指令运算符DOS功能调用PPT学习教案.pptx

    - **EQU**:定义符号常量,如`CONSTANT EQU 100`,一个符号只能被EQU定义一次。 - **=**:类似EQU,但允许重新定义同一个符号,如`EMP=7; EMP=EMP+1`。 - **DB**,**DW**,**DD**:分别用于定义字节、字和双字的数据...

    ARM.rar_ARM 汇编_ARM汇编程序

    - **.equ**:定义符号常量,如 `.equ MY_CONST, 10`。 - **.org**:设置当前输出地址,用于填充或定位数据。 - **.byte**:插入指定数量的字节数据。 - **.word**:插入一个或多个32位字数据。 - **.align**:确保...

    2440init.s解析

    定义了寄存器符号 ;REFRESH寄存器[22]bit : 0- auto refresh; 1 - self refresh BIT_SELFREFRESH EQU (1) ;用于节电模式中,SDRAM自动刷新 ;处理器模式常量: CPSR寄存器的后5位决定目前处理器模式 M[4:0] USER...

Global site tag (gtag.js) - Google Analytics