A51僞指令這一部分的詳細內容在 "uVsion Help" -> " Ax51 Assembler User's Guide" -> " Control Statements" 下,有詳細的說明和使用方法。
同樣,Cx51的預處理指令在 "uVsion Help" -> "Cx51 Compiler User's Guide" -> "Preprocessor" -> "Preprocessor Directives" 下。
對了,我用的是UV4。
另外,一點題外話,與編譯器相關的東東(其它也是如此),最全、最權威的參考永遠是幫助文檔和官網,只是不太容易閱讀,需要一點耐心去查找。不過,只要瞭解了文檔的結構,掌握一定查看的小技巧,也沒有想像中的那麼繁瑣。以後不要盲目地去網上轉載各種所謂的“技巧”和“知識”。
/************************************************************************************************/
/************************我是分割線,以下是轉載內容****************************************/
/***********************************************************************************************/
文章來源: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彙編器是一個多次掃描彙編器。在第一次掃描時,符號值被確定。在接下來的掃描中,前向引用被解析,目標代碼生成。這種結構產生了對源程序的一種限制:定義符號值的表達式和控制位置計數器的表達式不可以有前向引用。