STM32學習(一)--匯編指令總結


一、EQU:等價語句

1、一般使用格式:
符號名 EQU 表達式
作用是左邊的符號名代表右邊的表達式。
注意: 等價語句不會給符號名分配存儲空間,符號名不能與其它符號同名,也不能被重新定義(類似宏定義)
 
2、用符號名代表常量或表達式
當把一個常量或表達式定義成一個具有一定含義的符號名后,在程序中就可以用該符號名來代表該常量或表達式。
例如:
 
NUMBER EQU 100 ;給緩沖區的長度取一個符號名
BUFF_LEN EQU NUMBER+2
CR EQU 13 ;給“回車”符的ASCII碼定義一個符號名
LF EQU 10 ;給“換行”符的ASCII碼定義一個符號名
 
3、用符號名代表字符串
用一個具有一定含義的符號名定義某一個較長的字符串,在隨后的程序中就用該符號名。例如:
GREETING EQU "How are you!"
在該定義之后,就可使用符號名GREETING來代表字符串"How are you!"。
 
4、用符號名關鍵字或指令助憶符
用一個(組)程序員自己習慣的符號名來代替匯編語言中的關鍵字或指令助憶符。但在此建議不要這樣做,因為程序的編寫者習慣,程序的其他閱讀者可能會覺得很別扭。
例如:
MOVE EQU MOV ;給指令MOV取另一個符號名MOVE
COUNTER EQU CX ;給寄存器CX取一個叫“計數器”的符號名
上面的定義只是給原來的助憶符MOV和CX起了另一個別名,而原來助憶符MOV和CX仍然可以使用 ,所以,我們可編寫如下語句:
MOVE AX, CX ;相當於指令:MOV AX, CX
MOV COUNTER, BX ;相當於指令:MOV CX, BX
 
5、用符號名定義存儲單元的別名
可對一片存儲單元定義另一個數據類型的符號名,有關敘述參見前面的操作符THIS。
 
二、AREA

AREA 命令指示匯編程序匯編一個新的代碼段或數據段。段是獨立的、指定的、不可見的代碼或數據塊,它們由鏈接程序處理。

語法:     AREA sectionname{,attr}{,attr}...

    其中:

sectionname:將要指定的段名。

           可以為段選擇任何段名。但是,以一個數字開始的名稱必須包含在豎杠號內,否則會產生一個缺失段名錯誤。例如,|1_DataArea|。 有些名稱是習慣性的名稱。例如,|.text| 用於表示由 C 編譯程序產生的代碼段,或用於以某種方式與 C 庫關聯的代碼段。

attr:一個或多個用逗號分隔的段屬性。有效的屬性是:

ALIGN=expression

默認情況下,ELF 段在四字節邊界上對齊。expression 可以擁有 0 到 31 的任何整數。段在 2expression 字節邊界上對齊。例如,如果 expression 是 10,則段是在 1KB 邊界上對齊。這與 ALIGN 命令所指定的方式並不相同。

ASSOC=section

section 指定一個關聯的 ELF 段。sectionname必須包含在含有 section 的任何鏈接中。

CODE     

包含機器指令。READONLY 是默認值。

COMDEF   

是一個公共段定義。這是包含代碼或數據的 ELF 段。其必須等同於與其它源文件中擁有相同名稱的任何其它段須是同一段。擁有相同名稱的同一 ELF 段在存儲器的相同段中被鏈接程序覆蓋。如果有任何段不同,則鏈接程序產生一個警告,並且不覆蓋這些段。請參閱RealView 編譯工具 2.0 版鏈接程序和實用程序指南 中的鏈接程序 一章。

COMMON

是公共數據段。不能在其中定義任何代碼或數據。其由 鏈接程序初始化為零。擁有相同名稱的所有公共段在存 儲器的相同段中被鏈接程序覆蓋。它們並不都需要具有 相同的大小。鏈接程序按每個名稱的最大公共段的需要 分配空間。

DATA

包含數據但不含指令。READWRITE 是默認值。

NOALLOC

表示在目標系統上沒有為此 AREA 分配存儲器。

NOINIT

表示數據段是未初始化的或初始化為零。其只包含零初始化的空間保留命令 SPACE 或 DCB、DCD、DCDU、DCQ、DCQU、DCW 或 DCWU。可以決定在鏈接時 AREA 是未初始化的還是零初始化的(請參閱RealView 編譯工具 2.0 版鏈接程序和實用程序指南 中的鏈接程序 一章)。

READONLY

表示不能寫到此段中。這是代碼區域的默認情況。

READWRITE

表示可以讀和寫此段。這是數據區域的默認情況

三、

SPACE和DCD的區別在於:

SPACE和DCD的功能類似,SPACE申請一片內存空間,DCD申請一個字(32bit)的內存空間。

SPACE和DCD的區別在於,SPACE申請空間但不賦初值,DCD申請一個字的空間,並賦初值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM