MCS-51微控制器常用偽指令
一)符號定義偽指令
符號定義名 用 法 說 明
EQU 為常量,符號名等定義符號化常量名 符號名不能重名定義
= 為常量,符號名等定義符號化常量名 符號名不能重名定義
DATA 用來為一個位元組型別的符號定值 符號名不能重名定義
BYTE 用來為一個位元組型別的符號定值 符號名不能重名定義
WORD 用來為一個字型別的符號定值 符號名不能重名定義
BIT 用來定義一個字位型別 符號名不能重名定義
SET 用來定義整數型別的符號名 符號名可重名定義
1. EQU(=) 指令
EQU 指令用於將一個數值或暫存器名賦給一個指定符號名。
指令格式: 符號名 EQU(=) 表示式
符號名 EQU(=) 暫存器名
經過EQU 指令賦值的符號可在程式的其它地方使用,以代替其賦值。
例如:MAX EQU 2000
則在程式的其它地方出現MAX,就用2000 代替。
2. SET 指令
SET 指令類似於EQU 指令,不同的是SET 指令定義過的符號可重定義。
指令格式:符號名 SET 表示式
符號名 SET 暫存器名
例如:MAX SET 2000
MAX SET 3000
3. BIT 指令
BIT 指令用於將一個位地址賦給指定的符號名。
指令格式:符號名 BIT 位地址
經BIT 指令定義過的位符號名不能更改。
例如:X_ON BIT 60H ;定義一個絕對位地址
X_OFF BIT 24h.2 ;定義一個絕對位地址
4. DATA(BYTE) 指令
DATA 指令用於將一個內部RAM 的地址賦給指定的符號名
指令格式:符號名 DATA 表示式
數值表示式的值應在0~255 之間,表示式必須是一個簡單再定位表示式。
例如:REGBUF DATA(BYTE) 40H
PORT0 DATA(BYTE) 80H
DATA與BYTE的區別: DATA與BYTE是相類似的偽指令。 當程式執行到DATA偽指令定義的符號名時,該符號名將被顯示;而由BYTE定義的符號名不被顯示。
5. XDATA 指令
XDATA 指令用於將一個外部RAM 的地址賦給指定的符號名。
指令格式:符號名 XDATA 表示式
例如:RSEG XSEG1 ;選擇一個外部資料段
ORG 100H
MING DS 10 ;在標號MING 處保留10 個位元組
HOUR XDATA MING+5
MUNIT XDATA HOUR+5
6. IDATA 指令
IDATA 指令用於將一個間接定址的內部RAM 地址賦給指定的符號名。
指令格式:符號名 IDATA 表示式
例如:FULLER IDATA 60H
7. CODE 指令
用於將程式儲存器ROM 地址賦給指定的符號名。
指令格式:符號名 CODE 表示式
例如:RESET CODE 00H
8. SEGMENT 指令
SEGMENT 指令用來宣告一個再定位段和一個可選的再定位型別。
指令格式:再定位段型 SEGMENT 段型別(再定位型別)
段型別用於指定所宣告的段將處的儲存器地址空間, 可用的段型別有CODE
/XDATA/DATA/IDATA 和BIT。
例如: FLAG SEGMENT BIT
PONITER SEGMENT IDATA
(二)保留和初始化儲存器空間
此指令用於在儲存器空間內保留和初始化字、位元組和位單元,保留空間始於當前地址的絕對段和當前偏移地址再定位段。
1. DS
以位元組為單位在內部和外部儲存器保留儲存器空間。
指令格式:[標號:] DS 數值表示式
DS 指令使當前資料段的地址計數器增加表示式結果之值,地址計數器與表示式結果之和不能超過當前地址空間。標號值將是保留區的第一個位元組地址。
例如:ORG 0200H
CUNTER DS 10 ;COUNTER 的地址是0200H。
2. DBIT
在內部資料區的BIT 段以位為單位保留儲存空間。
指令格式:[標號:] DBIT 數值表示式
其操作類似於DS。
3. DB
以給定表示式的值的位元組形式初始化程式碼空間。
指令格式:[標號:] DB 數值表示式
4. DW
以給定表示式的值的雙位元組形式初始化程式碼空間。
(三)控制連線指令
控制連線偽指令共3 條,用於表明當前模組中需要使用的外部函式名及可被其它模組呼叫的函式名,當該函式用於讓C 呼叫時,宣告時前要加下劃線“_”。
1. PUBLIC
宣告可被其它模組使用的公共函式名。
指令格式:PUBLIC 符號 [,符號,符號[,······]]
PUBLIC 後可跟多個函式名,用逗號格開。每個函式名都必須是在模組內定義過的。
例如:PUBLIC INTER,_OUTER
其中_OUTER 可供C 呼叫。
2. EXTRN
EXTRN 是與PUBLIC 配套使用的,要呼叫其它模組的函式,就必須先在模組前宣告。
指令格式:EXTRN 段型別(符號,符號······)
例如:EXTRN CODE (TONGXING,ZHUANHUAN)
呼叫外部TONGXING和ZHUANHUAN 程式。
3. NAME
用來給當前模組命名。
指令格式:NAME 模組名
例如:NAME TIMER
定義一個模組名為TIMER 的模組。
(四)段選擇指令
用來選擇當前段是絕對段還是再定位段,使用段選擇指令。
1. 絕對段選擇指令
絕對選擇指令有CSEG/DSEG/XSEG/ISEG 和BSEG,分別選擇絕對程式碼段、內部絕對資料段、外部絕對資料段、內部間接定址絕對資料段和絕對位定址資料段。
指令格式如下:
CSEG [AT 絕對地址表示式]
DSEG [AT 絕對地址表示式]
XSEG [AT 絕對地址表示式]
ISEG [AT 絕對地址表示式]
BSEG [AT 絕對地址表示式]
2. 再定位段選擇指令
再定位段選擇指令為RSEG,用於選擇一個已在前面定義過的再定義段作為當前段,
指令格式:RSEG 段名
段名必須是在前面宣告過的再定位段。
例如:
DATAS SEGMENT DATA :宣告一個再定位DATA 段
CODES SEGMENT CODE ;宣告一個再定位CODE 段
BSEG AT 60H
RSEG CODES ;選擇前面宣告的再定位CODE 段作為當前段。
(五)條件偽操作
條件偽操作格式:
IF 表示式
[ 程式塊1 ]
[ ELSE ]
[ 程式塊2 ]
ENDIF
當IF指令中的表示式為真時,被彙編的程式碼段是程式塊1;當IF指令中的表示式為假時,被彙編的程式碼段是程式塊2。 在一個條件結構中,僅有一個程式碼段被彙編,其它的則被忽略。
(六)宏處理操作
在源程式中,如果有一段程式需要多次使用,為使程式不重複書寫這段程式,可用宏定義把所需要重複出現的程式塊定義成宏指令,此後在宏指令出現的地方,宏彙編程式總是自動地把它們替換成相應的程式碼段。
(1) 宏指令格式
[ 宏指令名 ] MACRO [形式引數,。。。]
程式碼段
ENDM
在宏定義中,使用了“形式引數“,它們引用宏指令時被給出的一些名字或數值(實在引數)所替換。使用形式引數給宏指令帶來了很大的靈活性。
(2) 宏呼叫格式
[ 宏指令名 ] [實在引數,。。。]
注意: 1、當有兩個以上的實引數時,它們之間要用逗號,空格或列表符隔開。
2、實引數項將對應替換宏指令中形式引數。如果形式引數為標號時,則在宏呼叫中,實參也應為標號,且要求實參是唯一的。如果宏定義中有自己的標號,則在宏呼叫時,彙編程式自動地把標號變成唯一的標號。
(七)其他
(1) 替換名 ALTNAME
功能: 這一偽指令用來自定義名字,以替換源程式中原來的保留字,替換的保留字均可等效地用於子程式中。
格式: ALTNAME 保留字 自定義名
注意: 自定義名與保留字之間首字元必須相同。
(2)檔案的鏈結 INCLUDE
功能: 利用此偽指令可將一個原始檔插入到當前原始檔中一起彙編,最終成為一個完整的源程式。
格式: INCLUDE [ 驅動器名: ] [ 路徑名 ] 檔名
注意:1、檔名中若沒有副檔名,則系統預設是。ASM(該檔案必須是能開啟的)。
2、被插入的源程式中不能包含END偽指令,否則彙編會停止執行。被連結檔案的每一行,在程式清單中以“I“開頭。
3、連結偽指令可有8級巢狀, 若要求巢狀的多, 則要修改 DOS 中的CONFIG。SYS檔案的FILES引數。
MCS-51微控制器常用偽指令
一)符號定義偽指令
符號定義名 用 法 說 明
EQU 為常量,符號名等定義符號化常量名 符號名不能重名定義
= 為常量,符號名等定義符號化常量名 符號名不能重名定義
DATA 用來為一個位元組型別的符號定值 符號名不能重名定義
BYTE 用來為一個位元組型別的符號定值 符號名不能重名定義
WORD 用來為一個字型別的符號定值 符號名不能重名定義
BIT 用來定義一個字位型別 符號名不能重名定義
SET 用來定義整數型別的符號名 符號名可重名定義
1. EQU(=) 指令
EQU 指令用於將一個數值或暫存器名賦給一個指定符號名。
指令格式: 符號名 EQU(=) 表示式
符號名 EQU(=) 暫存器名
經過EQU 指令賦值的符號可在程式的其它地方使用,以代替其賦值。
例如:MAX EQU 2000
則在程式的其它地方出現MAX,就用2000 代替。
2. SET 指令
SET 指令類似於EQU 指令,不同的是SET 指令定義過的符號可重定義。
指令格式:符號名 SET 表示式
符號名 SET 暫存器名
例如:MAX SET 2000
MAX SET 3000
3. BIT 指令
BIT 指令用於將一個位地址賦給指定的符號名。
指令格式:符號名 BIT 位地址
經BIT 指令定義過的位符號名不能更改。
例如:X_ON BIT 60H ;定義一個絕對位地址
X_OFF BIT 24h.2 ;定義一個絕對位地址
4. DATA(BYTE) 指令
DATA 指令用於將一個內部RAM 的地址賦給指定的符號名
指令格式:符號名 DATA 表示式
數值表示式的值應在0~255 之間,表示式必須是一個簡單再定位表示式。
例如:REGBUF DATA(BYTE) 40H
PORT0 DATA(BYTE) 80H
DATA與BYTE的區別: DATA與BYTE是相類似的偽指令。 當程式執行到DATA偽指令定義的符號名時,該符號名將被顯示;而由BYTE定義的符號名不被顯示。
5. XDATA 指令
XDATA 指令用於將一個外部RAM 的地址賦給指定的符號名。
指令格式:符號名 XDATA 表示式
例如:RSEG XSEG1 ;選擇一個外部資料段
ORG 100H
MING DS 10 ;在標號MING 處保留10 個位元組
HOUR XDATA MING+5
MUNIT XDATA HOUR+5
6. IDATA 指令
IDATA 指令用於將一個間接定址的內部RAM 地址賦給指定的符號名。
指令格式:符號名 IDATA 表示式
例如:FULLER IDATA 60H
7. CODE 指令
用於將程式儲存器ROM 地址賦給指定的符號名。
指令格式:符號名 CODE 表示式
例如:RESET CODE 00H
8. SEGMENT 指令
SEGMENT 指令用來宣告一個再定位段和一個可選的再定位型別。
指令格式:再定位段型 SEGMENT 段型別(再定位型別)
段型別用於指定所宣告的段將處的儲存器地址空間, 可用的段型別有CODE
/XDATA/DATA/IDATA 和BIT。
例如: FLAG SEGMENT BIT
PONITER SEGMENT IDATA
(二)保留和初始化儲存器空間
此指令用於在儲存器空間內保留和初始化字、位元組和位單元,保留空間始於當前地址的絕對段和當前偏移地址再定位段。
1. DS
以位元組為單位在內部和外部儲存器保留儲存器空間。
指令格式:[標號:] DS 數值表示式
DS 指令使當前資料段的地址計數器增加表示式結果之值,地址計數器與表示式結果之和不能超過當前地址空間。標號值將是保留區的第一個位元組地址。
例如:ORG 0200H
CUNTER DS 10 ;COUNTER 的地址是0200H。
2. DBIT
在內部資料區的BIT 段以位為單位保留儲存空間。
指令格式:[標號:] DBIT 數值表示式
其操作類似於DS。
3. DB
以給定表示式的值的位元組形式初始化程式碼空間。
指令格式:[標號:] DB 數值表示式
其操作類似於DS。
4. DW
以給定表示式的值的雙位元組形式初始化程式碼空間。
指令格式:[標號:] DB 數值表示式
其操作類似於DS。
(三)控制連線指令
控制連線偽指令共3 條,用於表明當前模組中需要使用的外部函式名及可被其它模組呼叫的函式名,當該函式用於讓C 呼叫時,宣告時前要加下劃線“_”。
1. PUBLIC
宣告可被其它模組使用的公共函式名。
指令格式:PUBLIC 符號 [,符號,符號[,······]]
PUBLIC 後可跟多個函式名,用逗號格開。每個函式名都必須是在模組內定義過的。
例如:PUBLIC INTER,_OUTER
其中_OUTER 可供C 呼叫。
2. EXTRN
EXTRN 是與PUBLIC 配套使用的,要呼叫其它模組的函式,就必須先在模組前宣告。
指令格式:EXTRN 段型別(符號,符號······)
例如:EXTRN CODE (TONGXING,ZHUANHUAN)
呼叫外部TONGXING和ZHUANHUAN 程式。
3. NAME
用來給當前模組命名。
指令格式:NAME 模組名
例如:NAME TIMER
定義一個模組名為TIMER 的模組。
(四)段選擇指令
用來選擇當前段是絕對段還是再定位段,使用段選擇指令。
1. 絕對段選擇指令
絕對選擇指令有CSEG/DSEG/XSEG/ISEG 和BSEG,分別選擇絕對程式碼段、內部絕對資料段、外部絕對資料段、內部間接定址絕對資料段和絕對位定址資料段。
指令格式如下:
CSEG [AT 絕對地址表示式]
DSEG [AT 絕對地址表示式]
XSEG [AT 絕對地址表示式]
ISEG [AT 絕對地址表示式]
BSEG [AT 絕對地址表示式]
2. 再定位段選擇指令
再定位段選擇指令為RSEG,用於選擇一個已在前面定義過的再定義段作為當前段,
指令格式:RSEG 段名
段名必須是在前面宣告過的再定位段。
例如:
DATAS SEGMENT DATA :宣告一個再定位DATA 段
CODES SEGMENT CODE ;宣告一個再定位CODE 段
BSEG AT 60H
RSEG CODES ;選擇前面宣告的再定位CODE 段作為當前段。
(五)條件偽操作
條件偽操作格式:
IF 表示式
[ 程式塊1 ]
[ ELSE ]
[ 程式塊2 ]
ENDIF
當IF指令中的表示式為真時,被彙編的程式碼段是程式塊1;當IF指令中的表示式為假時,被彙編的程式碼段是程式塊2。 在一個條件結構中,僅有一個程式碼段被彙編,其它的則被忽略。
(六)宏處理操作
在源程式中,如果有一段程式需要多次使用,為使程式不重複書寫這段程式,可用宏定義把所需要重複出現的程式塊定義成宏指令,此後在宏指令出現的地方,宏彙編程式總是自動地把它們替換成相應的程式碼段。
(1) 宏指令格式
[ 宏指令名 ] MACRO [形式引數,。。。]
程式碼段
ENDM
在宏定義中,使用了“形式引數“,它們引用宏指令時被給出的一些名字或數值(實在引數)所替換。使用形式引數給宏指令帶來了很大的靈活性。
(2) 宏呼叫格式
[ 宏指令名 ] [實在引數,。。。]
注意: 1、當有兩個以上的實引數時,它們之間要用逗號,空格或列表符隔開。
2、實引數項將對應替換宏指令中形式引數。如果形式引數為標號時,則在宏呼叫中,實參也應為標號,且要求實參是唯一的。如果宏定義中有自己的標號,則在宏呼叫時,彙編程式自動地把標號變成唯一的標號。
(七)其他
(1) 替換名 ALTNAME
功能: 這一偽指令用來自定義名字,以替換源程式中原來的保留字,替換的保留字均可等效地用於子程式中。
格式: ALTNAME 保留字 自定義名
注意: 自定義名與保留字之間首字元必須相同。
(2)檔案的鏈結 INCLUDE
功能: 利用此偽指令可將一個原始檔插入到當前原始檔中一起彙編,最終成為一個完整的源程式。
格式: INCLUDE [ 驅動器名: ] [ 路徑名 ] 檔名
注意:1、檔名中若沒有副檔名,則系統預設是。ASM(該檔案必須是能開啟的)。
2、被插入的源程式中不能包含END偽指令,否則彙編會停止執行。被連結檔案的每一行,在程式清單中以“I“開頭。
3、連結偽指令可有8級巢狀, 若要求巢狀的多, 則要修改 DOS 中的CONFIG。SYS檔案的FILES引數。