關于符號常量 =的例子
.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函數宏定義
------------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat,stdcall
include?? windows.inc
include?? kernel32.inc
includelib kernel32.lib
include?? user32.inc
includelib user32.lib
; 用 equ 給函數重命名Msg?equMessageBox
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
.modelflat,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
------------------------------------------------------------------------------------------------------------------------------------------
.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
------------------------------------------------------------------------------------------------------
?
哈哈? 強大的宏替換吧???