A51 伪指令
---------------------------------------------
-- 時間:2018-11-25
-- 創建人:Ruo_Xiao
-- 郵箱:xclsoftware@163.com
-- 原網址:http://blog.sina.com.cn/s/blog_436479630100e4bn.html
---------------------------------------------
本章講解匯編器的偽指令。說明如何定義符號和怎樣控制代碼和數據在程序存儲器中的位置。
????簡介
?
????Ax51匯編器有一些偽指令,可以讓我們定義符號值,預留和初始化內存,以及控制代碼的位置。
???? 不要把偽指令與指令相混淆。偽指令不產生可執行的代碼,除DB,DW和DD之外,它們對代碼存儲器的內容沒有直接的影響。這些偽指令改變匯編器的狀態,定義用戶符號,以及添加信息到目標文件。
???? 下表是對匯編器偽指令的一個匯總。關于每條偽指令的詳細信息,請點擊相應鏈接查看。
| BIT | 符號 BIT 位地址 | 在位數據空間定義一個位地址。 |
| BSEG | BSEG [AT 絕對地址] | 在位地址空間定義一個絕對地址段。 |
| CODE | 符號 CODE 代碼地址 | 為代碼空間內的一個指定地址分配一個符號名。 |
| CSEG | CSEG [AT 絕對地址] | 在代碼地址空間定義一個絕對地址段。 |
| DATA | 符號 DATA 數據地址 | 給一個指定的片內數據地址分配一個符號名。 |
| DB | [標號:] DB 表達式[, 表達式...] | 定義一列字節型數值。 |
| DBIT | [標號:] DBIT 表達式 | 在位單元中預留一個空間。 |
| DD | [標號:] DD 表達式[, 表達式...] | 定義一列雙字型數值。 |
| DS | [標號:] DS 表達式 | 在字節空間預留空間。 |
| DSB | [標號:] DSB 表達式 | 在字節空間預留空間。 |
| DSD | [標號:] DSD 表達式 | 在雙字空間預留空間。 |
| DSEG | DSEG [AT 絕對地址] | 在間接尋址內部數據空間定義一個絕對段。 |
| DSW | [標號:] DSW 表達式 | 在字空間預留空間;增加當前段的位置計數器。 |
| DW | [標號:] DW 表達式[, 表達式...] | 定義一列字數值。 |
| END | END | 指示程序的結束。 |
| EQU | EQU 表達式 | 永久設置符號值。 |
| __ERROR__ | __ERROR__ 文本 | 產生一條標準的出錯信息。羅畝按:前后均是兩條下劃線(_)。 |
| EVEN | EVEN | 確保變量的字對齊。 |
| EXTRN | EXTRN 存儲空間類型 [:數據類型] (符號 [, ...]) | 定義在當前模塊中引用的在其它模塊中定義的符號。 |
| EXTERN | EXTERN 存儲空間類型[:數據類型] (符號 [, ...]) | |
| IDATA | 符號 IDATA idata地址 | 為指定的間接尋址的內部地址定義一個符號名稱。 |
| ISEG | ISEG [AT 絕對地址] | 在內部數據空間內定義一個絕對段。 |
| LABEL | 名稱[:] LABEL [數據類型] | 在段中為一個地址位置定義一個符號名。 |
| LIT | 符號 LIT '文字串' | 為字符串定義一個符號名。 |
| NAME | NAME 模塊名稱 | 為當前模塊命名 |
| ORG | ORG 表達式 | 設置當前段的位置計數器 |
| PROC | 名稱 PROC [數據類型] | 定義一個函數的開頭和結尾。 |
| ENDP | 名稱 ENDP | |
| PUBLIC | PUBLIC 符號 [, 符號...] | 標明可以用于當前模塊外部的符號。 |
| RSEG | RSEG 段名 | 選擇一個可重定位的段。 |
| SEGMENT | 段名 SEGMENT 存儲空間類型 [reloctype] [alloctype] | 定義一個可重定位的段。 |
| SET | SET 表達式 | 臨時設置符號值。 |
| sfr, | sfr 符號 = 地址; | 定義一個特殊功能寄存器(SFR)符號或者一個SFR位符號。 |
| sfr16 | sfr16 符號 = 地址; | |
| sbit | sbit 符號 = 地址; | |
| USING | USING 表達式 | 設置預定義的符號化寄存器地址,并為指令的寄存器堆預留空間。 |
| XDATA | 符號 XDATA xdata地址 | 為指定的片外數據地址定義一個符號名。 |
| XSEG | XSEG [AT 絕對地址] | 在外部數據地址空間定義一個絕對段。 |
???? 背景為綠色的偽指令和選項僅適用于AX51和A251。
???? 羅畝按:原文中把END和EQU行的背景也設為了綠色,我認為這可能是明顯的筆誤,因為這兩個偽指令在A51中使用得很好,所以此外沒有加綠色背景。如果哪位網友認為我的理解有誤,請斧正。
???? 偽指令被分為如下幾大類:
- 段控制
通用段:SEGMENT,RSEG
絕對段:CSEG,DSEG,BSEG,ISEG,XSEG - 符號定義
通用符號:EQU,SET
地址符號:BIT,CODE,DATA,IDATA,XDATA
SFR符號:sfr,sfr16,sbit
文本替代:LIT - 存儲空間初始化
DB,DW,DD - 存儲空間預留
DBIT,DS,DSB,DSB,DSW,DSD - 程序說明
PROC/ENDP,LABEL - 程序連接
PUBLIC,EXTRN/EXTERN,NAME - 地址控制
ORG,EVEN,USING - 其它
END,__ERROR__
????Ax51匯編器是一個多次掃描匯編器。在第一次掃描時,符號值被確定。在接下來的掃描中,前向引用被解析,目標代碼生成。這種結構產生了對源程序的一種限制:定義符號值的表達式和控制位置計數器的表達式不可以有前向引用。
(SAW:Game Over!)總結
- 上一篇: C51 数据存储器
- 下一篇: Keil的可重定位段