=、EQU、TEXTEQU 功能差不多, 它们定义的符号都将在编译前辈替换成它们指定的常量值.

相比之下 EQU 更好用些.



= 举例


; Test13_1.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.datan = 1      ; = 伪指令只能定义整数或整数表达式n = n + 1  ; 可重复定义
.code
main procPrintDec n ;2ret
main endp
end main

EQU 例一


; Test13_2.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.datanum1 equ 2         ; equ 可以定义整数和整数表达式num2 equ 3         ; 它不能像 = 一样重复定义num3 equ num1+num2 ; (我尝试了重复定义, 竟然有时也可以, 只是偶尔)txt  equ <'Asm'>   ; 可用 equ 定义字符串, 应使用 <>szTxt db txt, 0    ; 使用 equ 定义的常量
.code
main procPrintDec num3     ;5PrintString szTxt ;Asmret
main endp
end main

EQU 例二


; Test13_3.asm
.386
.model flat, stdcallinclude    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>.dataszMsg     db 'Hello World!', 0szCaption db 'Hi', 0
.code
main procinvoke Msg, NULL, addr szMsg, addr szCaption, MB_OKShowMsginvoke Exit, NULL
main endp
end main

用 TEXTEQU 重做上一个例子, 完全可行:


; Test13_4.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
includelib kernel32.lib
include    user32.inc
includelib user32.libMsg  textequ MessageBox
Exit textequ <ExitProcess>
ShowMsg textequ <invoke MessageBox, NULL, addr szMsg, addr szCaption, MB_OK>.dataszMsg     db 'Hello World!', 0szCaption db 'Hi', 0
.code
main procinvoke Msg, NULL, addr szMsg, addr szCaption, MB_OKShowMsginvoke Exit, NULL
main endp
end main

用 TEXTEQU 重做 EQU 的第一个例子(Test13_2.asm), 有区别:


; Test13_5.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.datanum1 equ 2               ; 这里的 equ 换做 textequ 不行num2 textequ <3>         ; 如果用 textequ 定义整数或表达式也要放在 <> 中num3 textequ <num1+num2> ; 这曾是 num3 equ num1+num2txt  textequ <'Asm'>     ;txt  textequ <'Delphi'>  ; textequ 可重复定义szTxt db txt, 0
.code
main procPrintDec num3     ;5PrintString szTxt ;Delphiret
main endp
end main

学 Win32 汇编[13]: 定义符号常量(=、EQU、TEXTEQU)相关推荐

  1. 学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一

    记得刚学多线程的时候, 碰到一个结构: //Delphi 的语法描述 PContext = ^TContext; _CONTEXT = recordContextFlags: DWORD;Dr0: D ...

  2. 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS

    为什么80%的码农都做不了架构师?>>>    PTR: 指定要操作的数据尺寸 ; Test12_1.asm .386 .model flat, stdcallinclude win ...

  3. 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV

    MUL: 无符号乘 ;影响 OF.CF 标志位 ;指令格式: ;MUL r/m ;参数是乘数;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX ;如果参数是 r16/m16, 将把 AX ...

  4. 学 Win32 汇编[6]: 伪指令 DUP 与数组

    为什么80%的码农都做不了架构师?>>>    声明数组实例: ; Test6_1.asm .386 .model flat, stdcallinclude windows.inc ...

  5. 学 Win32 汇编[24] - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD

    SHL.SHR.SAL.SAR: 移位指令 ;SHL(Shift Left): 逻辑左移 ;SHR(Shift Right): 逻辑右移 ;SAL(Shift Arithmetic Left): 算术 ...

  6. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  7. 学 Win32 汇编[26] - 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

    为什么80%的码农都做不了架构师?>>>    ;INC(Increment): 加一 ;DEC(Decrement): 减一 ;NEG(Negate): 求补(求反) ;ADD(A ...

  8. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  9. Win32汇编环境配置

    放假了,发现自己知识面窄,趁有时间就打算折腾下Win32汇编.其实在学校也上过汇编课,是基于dos的.那时老师不务正业,老跟我们讲政治经济文化,唯独不怎么讲课;再加上自己的问题,导致了dos汇编学得好 ...

  10. Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU)

    关于符号常量 =的例子 .386 .model flat,stdcall include   windows.inc include   kernel32.inc include   masm32.i ...

最新文章

  1. idea中如何打开RunDashboard窗口,微服务最实用设置
  2. 从绩点 1.8 逆袭的复旦博士,华为天才少年!
  3. laravel ajax login,设置在ajax上记住laravel登录
  4. 004_Mysql数据库的CRUD的操作
  5. Django的CBV与FBV
  6. java中volatile关键字---学习笔记
  7. DVWA暴力破解(Brute Force)——全等级(Low,Medium,High,lmpossible)精讲
  8. 【数据库学习笔记】——操作sqlite(增删改查)以及cursor的方法介绍
  9. php安装包解压后,ps下载后怎么解压安装
  10. opengl 高级技巧
  11. 基于matlab移位寄存器,基于Matlab产生m序列(DOC X页).doc
  12. ETL__pentaho__SPOON_PDI
  13. 伪随机算法c语言,伪随机算法实现各语言实现示例。
  14. notepad++自动补全括号
  15. python将输出结果写入csv_Python怎么把输出整体写入CSV文件
  16. 深入浅出数据分析(一)——MySQL+EXCEL+R统计问卷调查
  17. 【Css】Css实现DIV半透明效果(示例)
  18. uniapp+nvue实现仿微信App聊天应用 —— 成功实现好友聊天+语音视频通话功能
  19. python re sub 替换多个_re.sub 实现多处替换
  20. Excel按列合并相同相邻单元格和拆分单元格

热门文章

  1. cnpm 没反应_世界上“最蠢”的鱼, 被吃了一半还没反应, 但永远不会灭绝
  2. Harmony OS — PageSliderIndicator滑动页面指示器
  3. Spring ——《第一章》Spring的基本应用
  4. git如何撤销已经push到远程仓库的代码提交
  5. environment variable is too large 2047
  6. 使用yum方式安装mysql5.6
  7. java环境变量配置方法
  8. javascript 多线程异步队列
  9. CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
  10. HDOJ 1465 不容易系列之一