單片機筆記(2)--指令系統(上)

目錄

 

一.單片機指令簡述

二.彙編指令

指令中的常用符號

三.尋址方式

尋址方式與相應的存儲器的空間、寄存器

1.寄存器尋址方式

2.寄存器間接尋址

3.立即尋址

4.直接尋址

5.基址寄存器+變址寄存器的間接尋址

 

6.相對尋址

7.位尋址

 

四.指令系統

1.數據傳送指令

1.1內部八位數據傳送指令

舉例分析:

舉例分析:

舉例分析:

舉例分析:

舉例分析:

舉例分析:

舉例分析:

數據傳送指令總表


一.單片機指令簡述

單片機的功能是從外部世界接收信息,並在 CPU 中進行加工,處理,然後再將結果送回外部世界。
要完成上述一系列操作,首先要提供一套具有單片機能夠識別特定功能的操作命令,這種操作命令就叫
做指令CPU 所能執行的各種指令的集合稱爲指令系統。不同的機種有不同的指令系統

 

單片機指令系統共有指令 111 條,分爲五大類:
 
數據傳送類指令(29 條)
算術運算類指令(24 條)
邏輯運算及移位類指令(24 位)
控制轉移類指令(17 條)
位操作類指令(17 條)
 
 

二.彙編指令

 

MCS-51 系列單片機的彙編指令由操作碼助記符字段和操作數助記符字段組成。指令格式如下:
第一部分爲操作碼助記符,表示要執行的操作指令,一般由二至五個英文字母組成,例如 JCMOV
ADDORLSETBACALL 等。
第二部分爲操作數,指明參與操作的數據。操作碼與操作數之間用一個或幾個空格隔開。根據指令
功能的不同,操作數可以有一個、兩個、三個或者沒有,操作數之間用逗號“,”分隔開。
 

指令中的常用符號

在描述指令系統時,經常使用各種縮寫符號,其含義如表 所示:
 
 
 

三.尋址方式

MCS-51 系列單片機共有 7 種尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址
尋址、相對尋址和位尋址。
尋址方式是指令中確定操作數的形式。單片機中,存放數據的存儲器空間有 4 種形式:
部數據 RAM、特殊功能寄存器 SFR、外部數據 RAM 和程序存儲器。其中,除內部數據 RAM SFR
一編址外,其它存儲器都是獨立編址的。爲了區別指令中操作數所處的地址空間,對於不同存儲器中的
數據操作,採用了不完全相同的尋址方式,這是51單片機在尋址方式上的一個顯著特點。
 
 

尋址方式與相應的存儲器的空間、寄存器

 

1.寄存器尋址方式

尋址空間:

R0R7由程序狀態字 PSW 的 RS1、RS0 兩位的值選定工作寄存器區
 
ABCYDPTR
寄存器尋址是指由指令選定寄存器中的內容作爲操作數的尋址方式,由指令的操作碼字節的最低 3
位所尋址的工作寄存器 R0~R7。對累加器 A、寄存器 B、數據指針 DPTR、位處理累加器 CY 等,也以
寄存器方式尋址
 
例如:MOV AR0
該指令的功能爲將工作寄存器 R0 的內容送入累加器 A 中,其中的操作數 A、R0 都是寄存器尋址。
其執行過程如圖所示:
 

2.寄存器間接尋址

尋址空間:

內部 RAM@R0@R1SP);
外部數據存儲器(@R0@R1DPTR)。
 
指令所選中的寄存器內容是實際操作數的地址(而不是操作數本身),這種尋址方式稱爲寄存器間接
尋址。當用 R0R1 寄存器間接尋址之前,需要有一個確定的寄存器間接尋址區,並且各個寄存器均是
有操作數地址的。
 
寄存器間接尋址是指將指令指定的寄存器內容作爲操作數所在的地址,對該地址單元中的內容進行
操作的尋址方式。51單片機規定,使用 R0 R1 作爲間接尋址寄存器,對於51系列單片機,
可尋址內部 RAM 中地址從 00H7FH 128 個字節單元內容。對於 8052 子系列單片機,則爲 256 個字
節單元的內容,而且高 128 個字節的 RAM,只能使用寄存器間接尋址方式訪問。另外,數據指針 DPTR
也可作爲間接尋址寄存器,尋址外部數據存儲器的 64KB 空間。
 
例如:MOV A@R1
 
該指令的功能是將當前工作區以 R1 中的內容作爲地址的存儲單元中的數據送到累加器 A 中,其源
操作數採用寄存器間接尋址方式,以 R1 作爲地址指針。假設 R1 中的內容爲 30H,則該指令是將地址爲
30H 存儲單元中的內容爲 45H,指令執行後累加器 A 中內容爲 45H。其執行過程如圖所示:
 
 

3.立即尋址

尋址空間:
程序存儲器。
 
立即尋址是指指令的操作數以指令字節的形式存放在程序存儲器中。即操作碼後緊跟着一個稱爲立
即數的操作數,這是在編程時由用戶給定存放在程序存儲器中的常數。
 
立即尋址的是指令中的操作數即爲立即數。其特徵爲數前加符號“#”。指令中的立即數有 8 位立即
數#data8 和 16 位立即數#data16。由於立即數是一個常數,不是物理空間,所以立即數只能作爲源操作
數,不能作爲目的操作數使用。
 
例如:MOV A,#67H
 
該指令是數據傳送指令,此指令功能爲將立即數 67H 送入累加器 A 中,67H 爲立即數。指令執行過
程如圖 所示:
 
 

4.直接尋址

尋址空間:

內部 RAM 的低 128 字節;
特殊功能寄存器 SFR(直接尋址是訪問 SFR 的唯一方式)。
 
直接尋址是指操作碼後面一個字節是實際操作數地址。
 
例如:MOV A,80H ;
 
該指令是數據傳送指令,80H 是內部 RAM 地址,功能是把 80H 單元的內容 12H 送入累加器 A 中。
指令執行過程如圖 所示。
 
 

5.基址寄存器+變址寄存器的間接尋址

尋址空間:

程序存儲器(@A+DPTRA+PC)。
基址寄存器+變址寄存器的間接尋址是 51系列單片機指令系統所特有的一種尋址方式,它以
DPTR 或 PC 作基址寄存器,A 作變址寄存器(存放 8 位無符號數),兩者相加形成 16 位程序存儲器地址
作操作數地址。這種尋址方式是單字節的,用於讀出程序存儲器中數據表格的常數。
 
例如:MOVC A@A+DPTR
 
該指令的功能是從程序存儲器某地址單元中取一個字節數據送入累加器 A 中。假設累加器 A 的內容
30HDPTR 的內容爲 2100H,執行該指令時,把程序存儲器中地址爲 2100H+30H=2130H 的單元中的
數據送入累加器 A 中。該指令的執行過程如圖 所示。

 

6.相對尋址

尋址空間:

程序存儲器。
 
相對尋址用於程序控制,利用指令修正 PC 指針的方式實現轉移。即以程序計數器 PC 的內容爲基
址,加上指令中給出的偏移量 rel,所得結果爲轉移目標地址。
 
其中,偏移量 rel 8 位符號補碼數,範圍爲-128+127。故可知,轉移範圍應當在前面 PC -128
+127 之間的某一程序存儲器地址中。相對尋址一般爲雙字節或三字節。
 
例如:JC 70H
 
若此指令所在地址爲 2000H CY=1由於指令本身佔用 2 個單元,所以,取出此指令後 PC 內容
2000H+2=2002H,程序將轉移到 2002H+70H=2072H 的單元去執行。該指令的執行過程如圖 所示:
 
 
 

7.位尋址

尋址空間:

片內 RAM 20H2FH
SFR 中有定義的能被 8 整除的字節地址。
 
位尋址是指以訪問位的方式對內部 RAM,特殊功能寄存器 SFR 中位地址空間進行訪問。
 
例如:MOV C06H
該指令的功能是將位地址爲 06H 的位單元的內容送入位累加器 C 中。
 
 
 

 

四.指令系統

 

1.數據傳送指令

數據傳送指令的助記符爲 MOV,其彙編語言指令格式爲:
 
MOV [目的操作數],[源操作數];
 
指令功能是將源操作數的內容傳送到目的操作數中,源操作數的內容不變。這類指令不影響標誌位。
 
 

1.1內部八位數據傳送指令

內部 8 位數據傳送指令共有 15 條,用於單片機內部的數據存儲器和寄存器之間的數據傳送。所採用
的尋址有立即尋址、直接尋址、寄存器尋址和寄存器間接尋址。
 
其數據傳輸的形式如圖:
 
 
 
(1)以累加器 A 爲目的指令
 
這組指令的功能:把源操作數的內容送入累加器 A 中。源操作數有寄存器尋址、直接尋址、寄存
器間接尋址和立即尋址等尋址方式。其中 rrr 爲寄存器編碼
 
(2)以 Rn 爲目的操作數的指令
 
這組指令的功能:把源操作數的內容送入當前工作寄存器區的 R0~R7 中的某一個寄存器源操作
數有寄存器尋址、直接尋址和立即尋址等。
 
(3)以直接地址爲目的操作數的操作指令
 
這組指令的功能:把源操作數的內容送入直接地址所指的存儲單元源操作數有寄存器尋址、直接
尋址、寄存器間接尋址和立即尋址方式。
 
(4)以寄存器間接尋址的單元爲目的的操作數指令
 
這組指令的功能:把源操作數的內容送入 R0 或 R1 所指的內部 RAM 存儲單元中源操作數有寄存
器尋址、直接尋址和立即尋址方式。
 
 

舉例分析:

1.設內部 RAM 30H 單元的內容 50H,試分析執行下面程序後各有關單元的內容。
 
MOV 60H,#30H 立即數 30H 送 60H 單元,即(60H)=30H
MOV R0,#60H ;   立即數 60H 送入 R0,即(R0)=60H
MOV A@R0 ;       間接尋址,將(R0)=60H 的單元內容送入 A,即(A)=30H
MOV R1A ;           將 A 中的內容送入 R1,即(R1)=30H
MOV 40H@R1 ;   間接尋址,將(R1)=30H 中的內容送入 40H 單元,即(40H)=50H
MOV 60H30H ;    30H 單元的內容送入 60H,即(60H)=50H
 
程序執行結果是(A=30H,(R0=60H,(R1=30H,(60H=50H,(40H=50H,(30H=50H
內容未變。
 
2.將累加器 A 中的內容送入外部數據存儲器的 60H 單元。
 
MOV R0,#60H 設置地址指針寄存器
MOVX @R0A (R0)←A,A 中內容送外部數據存儲器的 60H 單元
 
(5)16 位數據傳送指令
 
這條指令的功能:把 16 位常數送入 DPTR 中。16 位的數據指針 DPTR 由 DPH 和 DPL 組成,這條
指令的執行結果是把高位立即數送入 DPH,低位立即數送入 DPL 中 。
 
(6)棧操作指令
 
內部 RAM 中設有一個先進後出的堆棧,在特殊功能寄存器中有一個堆棧指針 SP,它
指出棧頂位置,在指令系統中有兩條用於數據傳送的棧操作指令:
進棧指令 PUSH 的功能:先將 SP 的指針加 1,然後把直接地址指出的內容傳送到棧指針 SP 尋址的
內部 RAM 單元中。
 
出棧指令 POP 的功能:將棧指針 SP 尋址的內部 RAM 單元的內容送入直接地址所指的字節單元中
去,同時棧指針減 1。
 
 

舉例分析:

進入中斷服務程序後,(SP=30H,(DPTR=5544H。下列指令
PUSH DPL ; 將 DPL 壓入堆棧,指令代碼 C082H
PUSH DPH ; 將 DPH 壓入堆棧,指令代碼 C083H
 
執行結果將把 44H 和 55H 兩個 8 位數據分別壓入片內 RAM 的 31H 和 32H 兩個地址單元,SP 的內
容兩次增 1 後將變成 32H,如圖:
 
特殊說明:
 
堆棧操作壓棧與出棧相反,壓棧時先進行指針操作,後進行數據操作,出棧時先進行數據操作,
後進行指針操作;
上電覆位後(SP)=07H,由於入棧操作是先指針上移,後壓入數據,所以堆棧空間並未佔用 0 區
的 R7 寄存器;
一般來說,如果應用系統要使用 1-3 寄存器區,在主程序開始執行初期,應將 SP 移至內部數據
存儲器的高端。
一般情況下,除上電初始化外,不易輕易修改 SP
 
(7)字節交換指令
 
 
這組指令的功能:將累加器 A 中的內容和源操作數的內容互相交換。源操作數有寄存器尋址、直接
尋址、寄存器間接尋址方式
 

舉例分析:

設(A=0ABH,(R1=12H,執行指令 XCH AR1則結果爲(A)=12H,(R1)=0ABH

(8)累加器 A 的半字節交換指令
 
 
這條指令:將累加器 A 的高 4 位和低 4 位互換,不影響標誌位。
 

舉例分析:

【例】設(A=0ABH執行指令 SWAP A 後,(A)=0BAH。
 
(9)半字節交換指令
這條指令的功能:將累加器 A 的低 4 位和 R0 或 R1 的低 4 位進行交換,各自的高 4 位不變

舉例分析:

設(A=12H,(R0=30H,(30H=45H執行指令 XCHD A@R0 後(A=35H,(30H
=42H
交換類指令的傳送形式如圖:
 
 
 
(10)累加器 A 與外部數據存儲器的傳送指令
 
這組指令:累加器 A 和外部擴展的 RAM I/O 口的數據傳送指令。由於外部 RAM 或 I/O 口是統一
編址的,共佔外部數據的 64KB 空間,所以指令本身看不出是對 RAM 還是對 I/O 口的操作,這是由硬件
的地址分配而定。

舉例分析:

將外部數據存儲器的 2000H 單元的內容傳送到內部 RAM 的 60H 單元。
 
MOV DPTR,#2000H 將外部數據指針 DPTR 指向 2000H
MOVX A@DPTR ;      從外部將數據送到 A
MOV 60HA ;               再將數據送到 60H
 
(11)查表指令
查表指令的源字節單元都採用變址尋址方式,第一條指令的基址寄存器爲 DPTR,因此其尋址範
圍爲整個程序存儲器的 64K 空間,表格可以放在程序存儲器的任何位置。第二條指令的基址寄存器爲 PC
該指令中訪問程序存儲器的地址(A+PC),其中(PC)爲程序計數器的當前內容,即查表指令的地
址加 1。因此,當基址寄存器爲 PC 時,查表範圍實際爲查表指令後 256 個字節的地址空間
 

舉例分析:

1232HMOV A,#30H
1234HMOVC A@A+PC
1235HMOV 60HA
1265H3FH
 
當執行查表指令時,PC 的當前值爲 1235H,所以,查表指令訪問的程序存儲器單元的地址爲:
(A)+(PC)=30H+1235H=1265H
執行查表指令後(A)= 3FH。
 
已知累加器 A 中有一個 09 範圍內的數,試用以上查表指令編出能查找出該數的平方值
的程序.
 
爲了進行查表,必須確定一張 09 的平方值表。若該平方表始址爲 1000H,則相應的平方值表
如表所示:
 
 
累加器 A 中的數恰好等該數平方值對錶始地址的偏移量。例如:5 的平方值爲 2525
地址爲 1005H,它對 1000H 的地址偏移量也爲 5。因此,查表時作爲基址寄存器用的 DPTR PC 的當
前值必須是 1000H 。採用 DPTR 作爲基址寄存器的查表程序比較簡單,也容易理解,只要預先使用一條
16 位數傳送指令,把表的始址 1000H 送入 DPTR,然後進行了查表就行了,相應程序爲:
 
MOV DPTR,#1000H 設置 DPTR 爲表始址
MOVC A@A+DPTR 將 A 的平方值查表後送 A
 

數據傳送指令總表

 
此表爲數據傳送指令總表,包含了指令的助記符、功能說明、字節數和振盪器週期數。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章