Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU)
2011-12-04 14:14
525 查看
关于符号常量 =的例子
.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
------------------------------------------------------------------------------------------------------
哈哈 强大的宏替换吧
.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
------------------------------------------------------------------------------------------------------
哈哈 强大的宏替换吧
相关文章推荐
- 学 Win32 汇编[13]: 定义符号常量(=、EQU、TEXTEQU)
- 定义符号常量(=、EQU、TEXTEQU)
- FASM--Win32汇编学习10
- Fasm -- Win32汇编学习--15
- Intel汇编与程序设计第五版3.5符号常量
- PHP学习笔记——预定义常量;
- c#学习笔记一:变量、常量、预定义数据类型
- 面向对象的程序设计学习笔记-21-常量数据成员的定义和初始化
- <climits>头文件定义的符号常量
- Arm汇编学习笔记(五)——MOVS及^符号等
- php学习笔记--预定义常量
- 学习WIN32汇编的方法
- Python学习笔记——常量定义
- stuts2学习笔记------指定需要struts2处理的请求后缀&细说常量定义&常用常量介绍
- WIN32汇编: 5.学习更多的关于文本的知识
- swift学习之定义常量、变量、字典、数组
- Fasm---Win32汇编学习1
- <climits>头文件定义的符号常量
- 学习WIN32汇编前在软件方面的要做的准备工作
- win32汇编语言学习之二