Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU) |
您所在的位置:网站首页 › 定义符号常数 › Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU) |
关于符号常量 =的例子 .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 ; 可用 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 ;尖括号可保证字符串的完整、并避免和关键字冲突 ; 甚至代替整个表达式 ShowMsg equ .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 ShowMsg textequ .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 ; 如果用 textequ 定义整数或表达式也要放在 中 num3 textequ ; 这曾是 num3 equ num1+num2 txt textequ ; txt textequ ; textequ 可重复定义 szTxt db txt, 0 .code main proc PrintDec num3 ;5 PrintString szTxt ;Delphi ret main endp end main ------------------------------------------------------------------------------------------------------
哈哈 强大的宏替换吧 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |