学 Win32 汇编[13]: 定义符号常量(=、EQU、TEXTEQU)
=、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)相关推荐
- 学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
记得刚学多线程的时候, 碰到一个结构: //Delphi 的语法描述 PContext = ^TContext; _CONTEXT = recordContextFlags: DWORD;Dr0: D ...
- 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS
为什么80%的码农都做不了架构师?>>> PTR: 指定要操作的数据尺寸 ; Test12_1.asm .386 .model flat, stdcallinclude win ...
- 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV
MUL: 无符号乘 ;影响 OF.CF 标志位 ;指令格式: ;MUL r/m ;参数是乘数;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX ;如果参数是 r16/m16, 将把 AX ...
- 学 Win32 汇编[6]: 伪指令 DUP 与数组
为什么80%的码农都做不了架构师?>>> 声明数组实例: ; Test6_1.asm .386 .model flat, stdcallinclude windows.inc ...
- 学 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): 算术 ...
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- 学 Win32 汇编[26] - 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP
为什么80%的码农都做不了架构师?>>> ;INC(Increment): 加一 ;DEC(Decrement): 减一 ;NEG(Negate): 求补(求反) ;ADD(A ...
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...
- Win32汇编环境配置
放假了,发现自己知识面窄,趁有时间就打算折腾下Win32汇编.其实在学校也上过汇编课,是基于dos的.那时老师不务正业,老跟我们讲政治经济文化,唯独不怎么讲课;再加上自己的问题,导致了dos汇编学得好 ...
- Win32汇编学习[7]: 定义符号常量(=、EQU、TEXTEQU)
关于符号常量 =的例子 .386 .model flat,stdcall include windows.inc include kernel32.inc include masm32.i ...
最新文章
- idea中如何打开RunDashboard窗口,微服务最实用设置
- 从绩点 1.8 逆袭的复旦博士,华为天才少年!
- laravel ajax login,设置在ajax上记住laravel登录
- 004_Mysql数据库的CRUD的操作
- Django的CBV与FBV
- java中volatile关键字---学习笔记
- DVWA暴力破解(Brute Force)——全等级(Low,Medium,High,lmpossible)精讲
- 【数据库学习笔记】——操作sqlite(增删改查)以及cursor的方法介绍
- php安装包解压后,ps下载后怎么解压安装
- opengl 高级技巧
- 基于matlab移位寄存器,基于Matlab产生m序列(DOC X页).doc
- ETL__pentaho__SPOON_PDI
- 伪随机算法c语言,伪随机算法实现各语言实现示例。
- notepad++自动补全括号
- python将输出结果写入csv_Python怎么把输出整体写入CSV文件
- 深入浅出数据分析(一)——MySQL+EXCEL+R统计问卷调查
- 【Css】Css实现DIV半透明效果(示例)
- uniapp+nvue实现仿微信App聊天应用 —— 成功实现好友聊天+语音视频通话功能
- python re sub 替换多个_re.sub 实现多处替换
- Excel按列合并相同相邻单元格和拆分单元格
热门文章
- cnpm 没反应_世界上“最蠢”的鱼, 被吃了一半还没反应, 但永远不会灭绝
- Harmony OS — PageSliderIndicator滑动页面指示器
- Spring ——《第一章》Spring的基本应用
- git如何撤销已经push到远程仓库的代码提交
- environment variable is too large 2047
- 使用yum方式安装mysql5.6
- java环境变量配置方法
- javascript 多线程异步队列
- CSS 魔法系列:纯 CSS 绘制各种图形《系列六》
- HDOJ 1465 不容易系列之一