`
zzc1684
  • 浏览: 1191813 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

相比之下 EQU 更好用些.



= 举例


; Test13_1.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
    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 例二


; Test13_3.asm
.386
.model flat, stdcall

include    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>

.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
.model flat, 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


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


; Test13_5.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 换做 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
分享到:
评论

相关推荐

    下载脚本地址.zip

    ::======================================================================================================================================== if %winbuild% LSS 7600 ( %ErrLine% echo Unsupported OS ...

    自动脚本工具.zip

    ::======================================================================================================================================== if %winbuild% LSS 7600 ( %ErrLine% echo Unsupported OS ...

    汇编语言:分类统计字符个数

    .386 .MODEL FLAT INCLUDE io.h ExitProcess PROTO NEAR32 stdcall,dwExitCode:DWORD cr EQU 0dh Lf EQU 0ah .STACK 4096 .DATA

    masm32关键字之typedef, equ, =

    masm32 typedef, equ, = 三者间的关系

    2440init.s解析

    定义了寄存器符号 ;REFRESH寄存器[22]bit : 0- auto refresh; 1 - self refresh BIT_SELFREFRESH EQU (1) ;用于节电模式中,SDRAM自动刷新 ;处理器模式常量: CPSR寄存器的后5位决定目前处理器模式 M[4:0] USER...

    sourceInsight4.0完美支持汇编 ,根据官网改写,Asm.xclf

    sourceInsight4.0完美支持汇编,识别equ定义常量,ds定义变量,“:”结束的函数,可以跳转,还有各种汇编指令高亮。注意只支持4.0,3.0版本不支持.xclf导入。使用方法网上很多,csdn博客搜一大堆,给上一个别人写的...

    80X86 汇编指令符号大全

    对符号进行定义和赋值,功能与 EQU相似,但允许(重复)再定义。 :∶修改属性运算符(操作符)——段操作符。用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀...

    def2equ.rar_RC_test-zone search_testzonesearch_文件 复制 程序 asm_汇编

    Aogosoft.com站上一网友写的程序,专门用来转换资源(rc文件)中的常量定义到汇编的INC文件格式 使用Win32Asm编程的过程中,经常要用到常数定义,如果是有资源的程序更是如此, 自己当初编程时是先将要转换的C语言常数...

    常用ARM指令集及汇编.pdf

    符号定义伪指令59 GBLA、GBLL、GBLS 59 LCLA、LCLL、LCLS60 SETA、SETL、SETS 61 RLIST61 CN 62 CP62 DN、SN62 FN63 数据定义伪指令63 LTORG64 MAP64 FIELD 65 SPACE66 DCB 66 DCD 和 ...

    [详细完整版]单片机上机.doc

    实验一 8051单片机简单编程与调试 实验内容: 1、存储块置全"1"源代码: 汇编语言源程序: ORG 00H START EQU 30H ;起始地址 MOV R1,#START MOV R0,#32H ;Rn中设置32字节计数值 MOV A,#0FFH LOOP: mov @R1,A INC R1 ...

    电子发声设计实验(1).doc

    《微机原理与接口技术》 实 验 报 告 学 院: 专 业: 班级学号: 学生姓名: 实验日期: 指导老师: 五邑大学计算机学院制表 实 验 八 1. 实验名称:电子发声设计实验 2. 实验目的: 学习8253定时/计数器使蜂鸣器...

    汇编写的显示网页的小程序

    include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\comctl32.inc include \masm32\include\gdi32.inc include \masm32\include\shell32.inc include \masm32...

    汇编编写的电子时钟.汇编课程设计

    汇编语言电子时钟、做课程设计是很理想的资源哦 tab db 0c0h,0f9h,0a4h,0b0h,099h,092h,082h,0f8h,080h,090h,088h,083h,0c6h,0a1h,086h,08eh porta1 equ 200h portb1 equ 204h portc1 equ 208h portp1 equ 20ch ...

    汇编语言程序基本结构与组成

    1. 汇编介绍:机器语言不方便记忆编写,因此有了汇编,不具有通用性和移植性; 2. 介绍指令集的组成,基本格式,程序组成框架等。 3. 介绍伪指令:EQU, ;LABLE, 4. 汇编的顺序,分支,循环,调用实现。

    简易测温(DS18B20)的汇编程序

    TEMH EQU 20H TEMH EQU 20HTEMH EQU 20HTEMH EQU 20HTEMH EQU 20HTEMH EQU 20HTEMH EQU 20HTEMH EQU 20HTEMH EQU 20H TEMH EQU 20H TEML EQU 21HTEML EQU 21H TEML EQU 21H TEML EQU 21HTEML EQU 21H TEML EQU 21H ...

    音乐汇编程序 汇编语言书写

    汇编语言书写 界面简介明了 DATAS SEGMENT MESG DB 5 DUP(0AH) DB 30 DUP(20H),' MENU ',0DH,0AH DB 30 DUP(20H),' +=========================+ ',0DH,0AH DB 30 DUP(20H),' | 1. MUSIC_1 | ',0DH,0AH DB 30 ...

    超级记事本

    )&if %%i equ 44 (echo 斐波纳齐:!all!)&pause&gt;nul&exit 05) 执行应用程序 例︰"control.exe appwiz.cpl" 06) 执行VBS脚本 例︰a=3:b=4:c=5:p=(a+b+c)/2:msgbox "Area=" & sqr(p*(p-a)*(p-b)*(p-c)),64,...

    myasm51,小型的51单片机汇编器源码

    myasm51,小型的51单片机汇编器源码。 基于Linux环境下编写的小型的51单片机汇编器,源码开放,采用lex和yacc两个扫描和分析工具创建,代码小巧,易于研读和分析。对汇编源程序2遍扫描完成汇编,可以生成列表文件,...

    汇编语言学生管理系统

    第一次运行程序时,必须按“n”再根据提示按... NAM_LENGTH EQU 20 SEX_LENGTH EQU 1 SCORE_LENGTH EQU 5 查找) 本程序还有一隐含功能:在主界面按“n”可以清空数据库,如果出现未知错误时可据此操作。

    用lex与yacc构造汇编器vasm及其指令模拟器vsim

    vasm及vsim源于Designing Digital Computer Systems with Verilog一书中定义的VeSPA(一个小型的RISC指令集的CPU)的指令集。 vasm通过两遍扫描的方式将VeSPA的汇编程序翻译为机器指令。 vsim模拟CPU的取指-&gt;译码-&gt;...

Global site tag (gtag.js) - Google Analytics