#指令系統
指令格式
指 令 通 常 由 指 令 操 作 碼 和 指 令 操 作 數 兩 部 分 組 成
指令描述符號
- A:表示累加器A,而ACC則表示累加器A的地址。
- Rn(n = 0~7):當前選中的工作寄存器組中寄存器R0~R7之一。
- Ri(i = 0, 1):當前選中的工作寄存器組中的寄存器R0或R1。
- @:間接尋址或變址尋址前綴。
- data:8位立即數。
- data16:16位立即數。
- direct:片內低128個RAM單元地址及SFR地址。
- addr11:11位目的地址。
- addr16:16位目的地址。
- rel:一個字節的補碼錶示的地址偏移量,範圍爲128~+127。
- bit:位尋址空間中可尋址位的地址。
- (X):表示X地址單元或寄存器中的內容。
- ((X)):以X單元或寄存器中的內容作爲地址所指定單元的內容。
- /:位操作數的取反操作前綴,表示對該數位取反,但不影響該數位的原值。
- →:數據傳送方向,表示箭尾一側的內容送入箭頭所指向的單元中去。
- :表示數據交換。
指令格式
-
單字節指令/:只有操作碼,無操作數,操作數隱含在操作碼中。
-
雙字節指令/:一個字節表示操作碼,另一個字節表示立即數或存放操作數的地址。
-
三字節指令/:第一個字節表示操作碼,後兩個字節表示操作數或操作數地址。
-
註釋:
- 單指令、一般格式爲
操作助記符 [操作數] [;註釋] - 雙指令、一般格式如下所示:
操作助記符 [目的操作數][,源操作數][;註釋]
- 單指令、一般格式爲
尋址方式
不同的計算機其尋址方式不盡相同,一般來說,尋址方式越多,計算機功能就越強,靈活性也越大。51系列單片機共有7種尋址方式
立即尋址
指令編碼中直接給出操作數的尋址方式稱爲立即尋址。
在這種尋址方式中,緊跟在操作碼後面的操作數稱爲立即數。
立即數可以是一個字節,也可以是兩個字節,立即數以前綴“#” 符號來標識。
MOV A,#03H
直接尋址
直接尋址是指操作數的地址直接在指令中給出的尋址方式。
該地址對應單元中的內容就是操作數,
直接的操作數單元地址用“direct”表示。
MOV A,3CH ;(3CH)→A
寄存器尋址
操作數存放在寄存器中的尋址方式稱爲寄存器尋址。
對於這種尋址方式,尋址的寄存器已隱含在指令的操作碼中,寄存器用符號Rn表示。
指令譯碼其實是譯碼的是操作碼
假設(R1) = 0FFH,
執行指令:MOV A,R1 ; (R1)→A
結果:(A) = 0FFH
寄存器間接尋址
寄存器間接尋址是指操作數存放在以寄存器內容爲地址的單元中。
寄存器中的內容不再是操作數,而是存放操作數的地址。
寄存器間接尋址用符號“@”表示。
(1)內部RAM低128單元,地址範圍00H~7FH,用Ri(i = 0,1)或SP作爲間址寄存器。
(2)與P2口鎖存器配合使用,用Ri指示低8位地址,可尋址片外數據存儲器或I/O的64KB區域。
(3)DPTR間接尋址寄存器,可尋址程序存儲器或片外數據存儲器(包括I/O口)各自的64KB區域。
設(R0) = 60H,
內部RAM (60H) = 50H,
執行指令MOV A,@R0 ;((R0))→A
執行結果(A) = 50H。
####變址尋址
本尋址方式以DPTR或PC作爲基址寄存器,以累加器A作爲變址寄存器,以兩者內容相加形成的16位地址作爲目的地址進行尋址。
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
前兩條指令稱爲查表指令,適用於讀程序存儲器中固定的數據。例如,將固定的、按一定順序排列的表格存放在程序存儲器中,在程序運行中由A的動態參量來確定讀取對應的表格參數。
第3條爲散轉指令,A中內容爲程序運行後的動態結果,可根據A中的不同內容,實現跳向不同程序入口的跳轉。
設(A) = 0A4H,(DPTR) = 1234H,
程序存儲區
(12D8H) = 3FH,
則執行指令MOVC A,@A+DPTR後,
(A) = 3FH。
相對尋址方式
相對尋址用於跳轉指令。本尋址方式是以該轉移指令的地址(PC值)加上它的字節數,再加上相對偏移量(rel),形成新的轉移目的地址,從而控制程序轉移到該目的地址。
-
目的地址 = 轉移指令所在的地址 + 轉移指令字節數 + rel
其中,偏移量rel是一個字節的補碼錶示的帶符號數, 其範圍是-128~+127。 -
因此,程序轉移範圍是以轉移指令的下條指令首地址爲基準地址,相對偏移在-128~+127單元之間。
假設指令SJMP 20H 存入2100H單元,
其機器碼爲80H 20H,
執行該指令後,程序將跳轉到2122H單元取指令並執行
####位尋址方式
位尋址方式是指令中給出的操作數爲位尋址區的位地址bit,
bit包括內部RAM的20H~2FH共16個單元的128位,以及某些 可以位尋址的特殊功能寄存器(單元地址能被8整除)的各位。
分析指令MOV C,24H.0的執行結果。
該指令的機器碼爲A2H 20H,相當於MOV C,20H,指令執行完成後Cy標誌位爲1
尋 址 方 式 就 是 CPU 在 指 令 中 尋 找 ( 確 定 ) 操 作 數 位 置 ( 地 址 ) 的 方 式 ( 或 尋 找 ( 確 定 )
轉 移 的 目 標 地 址 的 方 式 ) 。
根 據 操 作 數 的 性 質 , 尋 址 方 式 分 爲 數 據 尋 址 方 式 和 地 址 尋 址 方 式 。
根 據 操 作 數 的 位 置 , 尋 址 方 式 分 爲 立 即 數 尋 址 方 式 、 寄 存 器 尋 址 方 式 、 存 儲 器 尋 址 方 式 和 I/ O尋 址 方 式 。
算術運算類指令
加法指令
(1)不帶進位加法指令ADD(4條)
ADD A,Rn ;(A)+(Rn)→A,n = 0~7
ADD A,direct ;(A)+ (direct)→A
ADD A,@Ri ;(A)+((Ri))→A,i = 0,1
ADD A,#data ;(A)+#data→A
(2)帶進位加法指令
ADDC A,Rn ;(A)+(Rn)+Cy→A,n = 0~7
ADDC A,direct ;(A)+(direct)+Cy→A
ADDC A,@Ri ;(A)+((Ri))+Cy→A,i = 0,1
ADDC A,#data ;(A)+#data+Cy→A
(3)加1指令(5條)
INC A
INC Rn ;n = 0~7
INC direct
INC @Ri ;i = 0,1
INC DPTR
(4)十進制調整指令(1條)
```
DA A ;調整A的內容爲正確的BCD碼
```
減法指令
減法指令包括帶借位減法指令和減1指令兩類
(1)帶借位減法指令(4條)
SUBB A,Rn ; (A) - (Rn) - Cy→A,n = 0~7
SUBB A,direct ; (A) - (direct) - Cy→A
SUBB A,@Ri ; (A) - ((Ri)) - Cy→A,i = 0,1
SUBB A,#data ; (A) - #data - Cy→A
(2)減1指令(4條)
DEC A ;(A) - 1→A
DEC Rn ;(Rn) - 1→Rn,n = 0~7
DEC direct ;(direct) - 1→direct
DEC @Ri ;((Ri)) - 1→(Ri),i = 0,1
####乘除運算指令
(1)乘法指令(1條)
MUL AB ;A×B→BA
(2)除法指令(1條)
DIV AB ;A÷B,商→A,餘數→B
邏輯運算與移位指令
邏輯與指令
ANL A,Rn ;(A)∧(Rn)→A,n = 0~7
ANL A,direct ;(A)∧(direct)→A
ANL A,#data ;(A)∧#data→A
ANL A,@Ri ;(A)∧((Ri))→A,i = 0~1
ANL direct,A ;(direct)∧(A)→direct
ANL direct,#data ;(direct)∧#data→direct
邏輯或指令
ORL A,Rn ;(A)∨(Rn)→A,n = 0~7
ORL A,direct ;(A)∨(direct)→A
ORL A,#data ;(A)∨ #data→A
ORL A,@Ri ;(A)∨((Ri))→A,i = 0,1
ORL direct,A ;(direct)∨(A)→direct
ORL direct,#data ;(direct)∨#data→dire
邏輯異或指令
XRL A,Rn ;(A) (Rn)→A,n = 0~7
XRL A,direct ;(A) (direct)→A
XRL A,@Ri ;(A) ((Ri))→A,i = 0,1
XRL A,#data ;(A) #data→A
XRL direct,A ;(direct) (A)→direct
XRL direct,#data ;(direct) #data →direct
累加器“清零”及“取反”指令
(1)CLR A
這條指令的功能是:將累加器A清“0”,不影響Cy、Ac和OV等標誌。
(2)CPL A
這條指令的功能是:將累加器A按位取反,不影響Cy、Ac和OV等標誌。
####移位指令
- 左環移指令
RL A
- 帶進位左環移指令
RLC A
- 右環移指令
RR A
- 帶進位右環移指令
RRC A
- 累加器半字節交換指令
SWAP A
###控制轉移類指令
無條件轉移指令
長轉移指令 LJMP addr16 ;addr16 → PC
短轉移指令 AJMP addr11 ;(PC)+ 2→PC,addr11→PC10~0, PC15~11不變
相對轉移指令 SJMP rel ;(PC)+2→PC,(PC)+ rel→PC
間接跳轉指令(散轉移指令)JMP @A+DPTR ;(PC)+1→PC,(A)+(DPTR)→PC
條件轉移指令
(1)累加器A判零條件轉移指令
JZ rel ;若(A) = 0,則PC+2+rel→PC
;否則,PC+2→PC
JNZ rel ;若(A) ≠ 0,則PC+2+rel→PC
;否則,PC+2→PC
(2)比較條件轉移指令
CJNE A,direct,rel ;若(A) ≠ (direct),則PC+3+rel→PC
;否則,PC+3→PC
CJNE A,#data,rel ;若(A) ≠ data,則PC+3+rel→PC
;否則,PC+3→PC
CJNE Rn,#data,rel ;若(Rn) ≠ data,則PC+3+rel→ PC
;否則,PC+3→PC
CJNE @Ri,#data,rel ;若((Ri)) ≠ data,則PC+3+rel→PC
;否則,PC+3→PC
(3)減1條件轉移指令
DJNZ Rn,rel ;(Rn)-1→Rn
;若(Rn) ≠ 0,則PC+2+rel→PC
;否則,PC+2→PC
DJNZ direct,rel ;(direct)-1→direct
;若(direct) ≠ 0,則PC+3+rel→PC
;否則,PC+3→PC
子程序調用及返回指令
① 長調用指令
LCALL addr16 ;(PC)+3→PC
;(SP)+1→SP,PC7~0→(SP)
;(SP)+1→SP,PC15~8→(SP)
;addrl6→PC
② 絕對調用指令
ACALL addr11 ;(PC)+2→PC
;(SP)+1→SP,PC7~0→(SP)
;(SP)+1→SP,PC15~8→(SP)
;addr11→PC10~0,PC15~11不變
RET ;((SP))→PC15~8,(SP)-1→SP
;((SP))→PC7~0,(SP)-1→SP
中斷返回指令
RETI ;((SP))→PC15~8,(SP)-1→SP
;((SP))→PC7~0,(SP)-1→SP
###空操作指令
NOP ;(PC)+1→PC
位操作類指令
-
位傳送指令(2條)
MOV C,bit ;(bit)→Cy
MOV bit,C ;Cy→(bit) -
位置位/復位指令(4條)
CLR C ;0→Cy
CLR bit ;0→bit
SETB C ;1→Cy
SETB bit ;1→bit -
位運算指令
ANL C,bit ;(Cy) ∧ (bit) → Cy
ANL C,/bit ;(Cy) ∧
ORL C,bit ;(Cy) ∨ (bit) → Cy
ORL C,/bit ;(Cy) ∨
-
位條件轉移指令
JC rel ;若Cy = 1,則(PC)+2+re→PC
;否則,(PC)+2→PC
JNC rel ;若Cy = 0,則(PC)+2+re→PC
;否則,(PC)+2→PC
JB bit,rel ;若(bit) = l,則(PC)+3+re→PC
;否則,(PC)+3→PC
JNB bit,rel ;若(bit) = 0,則(PC)+3+re→PC
;否則,(PC)+3→PC
JBC bit,rel ;若(bit) = 1,則(PC)+3+re→PC,0→bit
;否則,(PC)+3→PC