51單片機所有偽指令?
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參數。