格式
該偽指令的含義是為EQU後面的<表達式>起一個叫做<符號名>的名字。這樣一來,程式中凡是需要用到該表達式的地方,就都可以用這個名字代替了。這裡,<表達式>可以是任何有效的數據,可以是能夠算出值的表達式,也可以是有效的助記符等。
equ偽指令並不為符號分配空間,編譯器將equ符號直接替換為其值,作為指令中的立即數。
例 COUNT EQU 256
表示賦予數256一個名字,叫做COUNT。
VAR1 EQU COUNT-2
表示賦予表達式COUNT-2一個名字,叫做VAR1。如果有“COUNT EQU 256”在先,那么由於COUNT是數值256,所以VAR1就代表數值254。
PH EQU PUSH
表示賦予PUSH一個名字PH。由於PUSH是彙編語言的一個助記符,因此,在程式中書寫PH AX,就相當於 PUSH AX。
EQU與偽指令“=”的區別
它們的區別是:由EQU偽指令定義後的符號名是不能重複再定義的,而“=”偽指令中定義的符號名可重複定義。例如:
EMP=7
┋
EMP=EMP+2
這表示,開始把符號名EMP定義為是數值7,後來把符號名EMP重新定義為代表數值9。但是不能寫成:
EMP EQU 7
┋
EMP EQU EMP+2
EQU與DATA的區別
EQU的作用相當於C語言中常量的定義,如
SIN1 EQU 0X7814
看見SIN1的時候就等於看到了0X7814. 兩者完全等價,所以使用時既可以作為地址也可以作為數據使用,看你做什麼用了。
而DATA 的作用是定義數據存儲器地址的指令,比如
AAA DATA 50H
意思就是將地址50H賦給 AAA。
51彙編的EQU不支持大於16位的常量定義
如:
MOV TL1,#256-FOSC/12/32/BAUDRATE
MOV TH1,#256-FOSC/12/32/BAUDRATE
結果會發現表達式並不能傳遞一個準確的數值給TL1,TH1。EQU定義的常量不能大過65535(2的16次方),把高過16位的略去一算,果然就是傳進去的數值。