首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

【100分】【马上结贴】Win32汇编有关问题:equ的作用想借

2012-02-03 
【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教材说的那样简单,还是要仔细琢磨的。

热点排行