8051彙編:EQU指令

關於EQU彙編指令

EQU是英文單詞equal的縮寫,所以咱們也能對EQU指令有一個初步的認識:作等價替換使用。編程

在8051彙編語言中,EQU用於定義一個符號常量,其效果不會帶來存儲空間的佔用(這和C語言中定義變量有區別)。它僅僅是將一個常量(當即數)用一個符號來表示,即實現常量符號化的效果。彙編編譯器在編譯時會將這個符號替換爲對應的常量。因此,EQU的做用和C語言中的宏常量十分相似spa

其格式通常以下:code

IDATALEN        EQU     80H
COUNT           EQU     25

 在8051的啓動代碼中咱們也能夠發現許多EQU指令的使用blog

;----------下面代碼摘至STARTUP.A51-------------

; <o> IDATALEN: IDATA memory size <0x0-0x100> ; <i> Note: The absolute start-address of IDATA memory is always 0 ; <i> The IDATA space overlaps physically the DATA and BIT areas. IDATALEN EQU 80H ; ; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF> ; <i> The absolute start address of XDATA memory XDATASTART EQU 0 ; ; <o> XDATALEN: XDATA memory size <0x0-0xFFFF> ; <i> The length of XDATA memory in bytes. XDATALEN EQU 0 ; ; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF> ; <i> The absolute start address of PDATA memory PDATASTART EQU 0H ; ; <o> PDATALEN: PDATA memory size <0x0-0xFF> ; <i> The length of PDATA memory in bytes. PDATALEN EQU 0H

 

 

爲何須要它

那麼問題來了:既然彙編編譯器又會把EQU符號替換回對應的常量,爲何不在代碼中直接使用常量而使用EQU定義的符號呢?開發

 

緣由1:使得代碼易於閱讀和理解編譯器

代碼是寫給人看的。到目前人類文明爲止,只有人才能寫代碼。因此好的代碼必須具有易讀的特色,若是代碼很難閱讀和理解,那麼它就很難被更新,擴展,重用。產品

例以下面第一段代碼,將當即數24傳送到寄存器R0中,那麼24指的是什麼?24歲?24千克?24mA?沒有人知道。這種數在編程領域有個專業詞語叫作「魔數」,指那些只知其值,不知其意的字面值數。編譯

第二段代碼使用了EQU指令,將24使用符號HOUR_PER_DAY等價表示,所以咱們就知道,後面的MOV語句是將一天的小時數傳送到寄存器R0中保存。class

;-----------第一段代碼--------------
MOV R0 ,  #24

;-----------第二段代碼--------------

HOUR_PER_DAY    EQU    24

MOV R0 , #HOUR_PER_DAY 

 

緣由2:方便後續對代碼進行修改變量

考慮到這樣一個狀況,咱們開發了一個稱重系統,咱們在代碼的不少地方會用100表明稱重系統支持的最大量程100KG,後來產品更新升級,量程擴大到了150KG。若是在初版代碼中咱們直接使用100,那麼咱們就須要找到全部表示量程的100並將其改成150,這樣很是麻煩,並且容易改錯。若是咱們使用EQU定義了一個表示量程的符號常量,那麼只須要修改這個EQU定義便可。

;-----初版代碼---------------

MAX_WEIGHT   EQU     100

;...業務邏輯代碼
;...業務邏輯代碼
;...業務邏輯代碼


;-----第二版代碼---------------

MAX_WEIGHT   EQU     150

;...業務邏輯代碼
;...業務邏輯代碼
;...業務邏輯代碼
相關文章
相關標籤/搜索