网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
学 Win32 汇编 [13]: 定义符号常量(=、EQU、TEXTEQU)
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/26
下载{$ArticleTitle}原创论文样式

  =、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 
(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号