定義符號常量 EQU TEXTEQU

2021-06-22 17:14:48 字數 4244 閱讀 2992

=、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

;2ret

main

endp

endmain

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

retmain

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 ;尖括號可

保證字串的完整、並避免和關鍵字衝突(

是否類似於c中巨集定義的()?

; 甚至代替整個表示式

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

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

; 這曾是 num3 equ num1+num2

txt

textequ

<

'asm'

>  ;

txt

textequ

<

'delphi'

> ; textequ 可重複定義

sztxt

db txt, 0.

code

main

proc

printdec num3  ;5

printstring sztxt;delphi

retmain

endp

end main

常量符號定義

1 特點 編譯時符號所在的位置就會替換為它代表的常量 2 偽指令 2.1 語法 name expreion 2.1.1 expression 只能是整數或整數表示式 2.1.2 name 可以重複定義為不同的整數或整數表示式 例如 count 500 size list 3 equ 偽指令 3.1 ...

c語言 陣列定義 符號常量定義

1在定義語句中用乙個初始值列表來初始化乙個陣列 include includeint main for size t b 0 b 5 b system pause return 0 如果初始值列表提供的初始值少於陣列元素個數,則餘下的陣列元素將初始化為0.如 int a 5 則有a 1 34 a 2...

常量與符號常量

通過 數學中的變數與常量 章節的介紹,我們知道了常量的定義,就是其資料不可以修改的量。例如100這個數值,它的數值就是100,不可以改變,所以,稱為常量,可以稱為 常量100。那麼,在c語言中定義的資料報括有數值 整數,浮點數 字元等等。其內容不可改變的量,就稱為常量,有 100,20,30 這樣的...