微機原理-04-指令系統

#指令系統

指令格式

指 令 通 常 由 指 令 操 作 碼 和 指 令 操 作 數 兩 部 分 組 成

指令描述符號

  • 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章