【100分】【马上结贴】Win32汇编问题:equ的作用想借C/C++ code
【100分】【马上结贴】Win32汇编问题:equ的作用想借
C/C++ code;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Equ 等值定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ICO_MAIN equ 1000h ;图标DLG_MAIN equ 1
这里的equ主要有什么作用?回答清楚的第一时间结贴,我一直在刷新帖子。
[解决办法]=、EQU、TEXTEQU 功能差不多, 它们定义的符号都将在编译前辈替换成它们指定的常量值.相比之下 EQU 更好用些.
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
[解决办法]masm中的equ你可以当成是C/C++中的#define,比如你前面写的:
DLG_MAIN equ 1
like : #define DLG_MAIN 1
同样的,equ也常常用来模仿C/C++中的enum功能。
具体来说有2种使用方法:
1 name EQU exp(exp为有效整数)
2 name EQU sym 或 <sym>
当masm后面遇到已定义的sym时,就用该名字代表的整数值或文本代替。
[解决办法]当然你要更好的了解equ,你还要同样了解=,TEXTEQU等伪指令,这些伪指令
看起来绝不像一些asm教材说的那样简单,还是要仔细琢磨的。