導航:首頁 > 操作系統 > 單片機指令表

單片機指令表

發布時間:2022-04-07 10:35:21

㈠ 51單片機指令集

51匯編語言指令集
符號定義表

符號 含義
Rn R0~R7寄存器n=0~7
Direct 直接地址,內部數據區的地址RAM(00H~7FH)
SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0
@Ri 間接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)
#data 8位常數
#data16 16位常數
Addr16 16位的目標地址
Addr11 11位的目標地址
Rel 相關地址
bit 內部數據RAM(20H~2FH),特殊功能寄存器的直接地址的位

指令介紹

指令 位元組 周期 動作說明
算數運算指令
1.ADD A,Rn 1 1 將累加器與寄存器的內容相加,結果存回累加器
2.ADD A,direct 2 1 將累加器與直接地址的內容相加,結果存回累加器
3.ADD A,@Ri 1 1 將累加器與間接地址的內容相加,結果存回累加器
4.ADD A,#data 2 1 將累加器與常數相加,結果存回累加器
5.ADDC A,Rn 1 1 將累加器與寄存器的內容及進位C相加,結果存回累加器
6.ADDC A,direct 2 1 將累加器與直接地址的內容及進位C相加,結果存回累加器
7.ADDC A,@Ri 1 1 將累加器與間接地址的內容及進位C相加,結果存回累加器
8.ADDC A,#data 2 1 將累加器與常數及進位C相加,結果存回累加器
9.SUBB A,Rn 1 1 將累加器的值減去寄存器的值減借位C,結果存回累加器
10.SUBB A,direct 2 1 將累加器的值減直接地址的值減借位C,結果存回累加器
11.SUBB A,@Ri 1 1 將累加器的值減間接地址的值減借位C,結果存回累加器
12.SUBB A,#data 2 1 將累加器的值減常數值減借位C,結果存回累加器
13.INC A 1 1 將累加器的值加1
14.INC Rn 1 1 將寄存器的值加l
15.INC direct 2 1 將直接地址的內容加1
16.INC @Ri 1 1 將間接地址的內容加1
17.INC DPTR 1 1 數據指針寄存器值加1
說明:將16位的DPTR加1,當DPTR的低位元組(DPL)從FFH溢出至00H時,會使高位元組(DPH)加1,不影響任何標志位
18.DEC A 1 1 將累加器的值減1
19.DEC Rn 1 1 將寄存器的值減1
20.DEC direct 2 1 將直接地址的內容減1
21.DEC @Ri 1 1 將間接地址的內容減1
22.MUL AB 1 4 將累加器的值與B寄存器的值相乘,乘積的低位位元組存回累加器,高位位元組存回B寄存器
說明:將累加器A和寄存器B內的無符號整數相乘,產生16位的積,低位位元組存入A,高位位元組存入B寄存器。如果積大於FFH,則溢出標志位(OV)被設定為1,而進位標志位為0
23.DIV AB 1 4 將累加器的值除以B寄存器的值,結果的商存回累加器,余數存回B寄存器
說明:無符號的除法運算,將累加器A除以B寄存器的值,商存入A,余數存入B。執行本指令後,進位位(C)及溢出位(OV)被清除為0
24.DA A 1 1 將累加器A作十進制調整,
若(A) 3-0>9或(AC)=1,則(A) 3-0←(A)3-0+6
若(A) 7-4>9或 (C)=1,則(A) 7-4←(A)7-4+6
邏輯運算指令
25.ANL A,Rn 1 1 將累加器的值與寄存器的值做AND的邏輯判斷,結果存回累加器
26.ANL A,direct 2 1 將累加器的值與直接地址的內容做AND的邏輯判斷,結果存回累加器
27.ANL A,@Ri 1 1 將累加器的值與間接地址的內容做AND的邏輯判斷,結果存回累加器
28.ANL A,#data 2 1 將累加器的值與常數做AND的邏輯判斷,結果存回累加器
29.ANL direct,A 2 1 將直接地址的內容與累加器的值做AND的邏輯判斷,結果存回該直接地址
30.ANL direct,#data 3 2 將直接地址的內容與常數值做AND的邏輯判斷,結果存回該直接地址
31.ORL A,Rn 1 1 將累加器的值與寄存器的值做OR的邏輯判斷,結果存回累加器
32.ORL A,direct 2 1 將累加器的值與直接地址的內容做OR的邏輯判斷,結果存回累加器
33.ORL A,@Ri 1 1 將累加器的值與間接地址的內容做OR的邏輯判斷,結果存回累加器
34.ORL A,#data 2 1 將累加器的值與常數做OR的邏輯判斷,結果存回累加器
35.ORL direct,A 2 1 將直接地址的內容與累加器的值做OR的邏輯判斷,結果存回該直接地址
36.ORL direct,#data 3 2 將直接地址的內容與常數值做OR的邏輯判斷,結果存回該直接地址
37.XRL A,Rn 1 1 將累加器的值與寄存器的值做XOR的邏輯判斷,結果存回累加器
38.XRL A,direct 2 1 將累加器的值與直接地址的內容做XOR的邏輯判斷,結果存回累加器
39.XRL A,@Ri 1 1 將累加器的值與間接地扯的內容做XOR的邏輯判斷,結果存回累加器
40.XRL A,#data 2 1 將累加器的值與常數作XOR的邏輯判斷,結果存回累加器
41.XRL direct,A 2 1 將直接地址的內容與累加器的值做XOR的邏輯判斷,結果存回該直接地址
42.XRL direct,#data 3 2 將直接地址的內容與常數的值做XOR的邏輯判斷,結果存回該直接地址
43.CLR A 1 1 清除累加器的值為0
44.CPL A 1 1 將累加器的值反相
45.RL A 1 1 將累加器的值左移一位
46.RLC A 1 1 將累加器含進位C左移一位
47.RR A 1 1 將累加器的值右移一位
48.RRC A 1 1 將累加器含進位C右移一位
49.SWAP A 1 1 將累加器的高4位與低4位的內容交換。(A)3-0←(A)7-4
數據轉移指令
50.MOV A,Rn 1 1 將寄存器的內容載入累加器
51.MOV A,direct 2 1 將直接地址的內容載入累加器
52.MOV A,@Ri 1 1 將間接地址的內容載入累加器
53.MOV A,#data 2 1 將常數載入累加器
54.MOV Rn,A 1 1 將累加器的內容載入寄存器
55.MOV Rn,direct 2 2 將直接地址的內容載入寄存器
56.MOV Rn,gdata 2 1 將常數載入寄存器
57.MOV direct,A 2 1 將累加器的內容存入直接地址
58.MOV direct,Rn 2 2 將寄存器的內容存入直接地址
59.MOV direct1, direct2 3 2 將直接地址2的內容存入直接地址1
60.MOV direct,@Ri 2 2 將間接地址的內容存入直接地址
61.MOV direct,#data 3 2 將常數存入直接地址
62.MOV @Ri,A 1 1 將累加器的內容存入某間接地址
63.MOV @Ri,direct 2 2 將直接地址的內容存入某間接地址
64.MOV @Ri,#data 2 1 將常數存入某間接地址
65.MOV DPTR,#data16 3 2 將16位的常數存入數據指針寄存器
66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))
累加器的值再加數據指針寄存器的值為其所指定地址,將該地址的內容讀入累加器
67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序計數器的值作為其所指定地址,將該地址的內容讀入累加器
68.MOVX A,@Ri 1 2 將間接地址所指定外部存儲器的內容讀入累加器(8位地址)
69.MOVX A,@DPTR 1 2 將數據指針所指定外部存儲器的內容讀入累加器(16位地址)
70.MOVX @Ri,A 1 2 將累加器的內容寫入間接地址所指定的外部存儲器(8位地址)
71.MOVX @DPTR,A 1 2 將累加器的內容寫入數據指針所指定的外部存儲器(16位地址)
72.PUSH direct 2 2 將直接地址的內容壓入堆棧區
73.POP direct 2 2 從堆棧彈出該直接地址的內容
74.XCH A,Rn 1 1 將累加器的內容與寄存器的內容互換
75.XCH A,direct 2 1 將累加器的值與直接地址的內容互換
76.XCH A,@Ri 1 1 將累加器的值與間接地址的內容互換
77.XCHD A,@Ri 1 1 將累加器的低4位與間接地址的低4位互換
布爾代數運算
78.CLR C 1 1 清除進位C為0
79.CLR bit 2 1 清除直接地址的某位為0
80.SETB C 1 1 設定進位C為1
81.SETB bit 2 1 設定直接地址的某位為1
82.CPL C 1 1 將進位C的值反相
83.CPL bit 2 1 將直接地址的某位值反相
84.ANL C,bit 2 2 將進位C與直接地址的某位做AND的邏輯判斷,結果存回進位C
85.ANL C,/bit 2 2 將進位C與直接地址的某位的反相值做AND的邏輯判斷,結果存回進位C
86.ORL C,bit 2 2 將進位C與直接地址的某位做OR的邏輯判斷,結果存回進位C
87.ORL C,/bit 2 2 將進位C與直接地址的某位的反相值做OR的邏輯判斷,結果存回進位C
88.MOV C,bit 2 1 將直接地址的某位值存入進位C
89.MOV bit,C 2 2 將進位C的值存入直接地址的某位
90.JC rel 2 2 若進位C=1則跳至rel的相關地址
91.JNC rel 2 2 若進位C=0則跳至rel的相關地址
92.JB bit,rel 3 2 若直接地址的某位為1,則跳至rel的相關地址
93.JNB bit,rel 3 2 若直接地址的某位為0,則跳至rel的相關地址
94.JBC bit,rel 3 2 若直接地址的某位為1,則跳至rel的相關地址,並將該位值清除為0
程序跳躍
95.ACALL addr11 2 2 調用2K程序存儲器范圍內的子程序
96.LCALL addr16 3 2 調用64K程序存儲器范圍內的子程序
97.RET 1 2 從子程序返回
98.RETI 1 2 從中斷子程序返回
99.AJMP addr11 2 2 絕對跳躍(2K內)
100.LJMP addr16 3 2 長跳躍(64K內)
101.SJMP rel 2 2 短跳躍(2K內)-128~+127位元組
102.JMP @A+DPTR 1 2 跳至累加器的內容加數據指針所指的相關地址
103.JZ rel 2 2 累加器的內容為0,則跳至rel所指相關地址
104.JNZ rel 2 2 累加器的內容不為0,則跳至rel所指相關地址
105.CJNE A,direct,rel 3 2 將累加器的內容與直接地址的內容比較,不相等則跳至rel所指的相關地址
106.CJNE A,#data,rel 3 2 將累加器的內容與常數比較,若不相等則跳至rel所指的相關地址
107.CJNE @Rn,#data,rel 3 2 將寄存器的內容與常數比較,若不相等則跳至rel所指的相關地址
108.CJNE @Ri,#data,rel 3 2 將間接地址的內容與常數比較,若不相等則跳至rel所指的相關地址
109.DJNZ Rn,rel 2 2 將寄存器的內容減1,不等於0則跳至rel所指的相關地址
110.DJNZ direct,rel 3 2 將直接地址的內容減1,不等於0則跳至rel所指的相關地址
111.NOP 1 1 無動作

㈡ 單片機的基本指令有哪些

不知道你是問的哪種單片機下面給你的是MCS-51的,希望對你有幫助,如有,麻煩採納,謝謝 數據傳送指令共有29條,數據傳送指令一般的操作是把源操作數傳送到目的操作數,指令執行完成後,源操作數不變,目的操作數等於源操作數。如果要求在進行數據傳送時,目的操作數不丟失,則不能用直接傳送指令,而採用交換型的數據傳送指令,數據傳送指令不影響標志C,AC和OV,但可能會對奇偶標志P有影響。

[1]. 以累加器A為目的操作數類指令(4條)
這4條指令的作用是把源操作數指向的內容送到累加器A。有直接、立即數、寄存器和寄存器間接定址方式:

MOV A,data ;(data)→(A) 直接單元地址中的內容送到累加器A
MOV A,#data ;#data→(A) 立即數送到累加器A中
MOV A,Rn ;(Rn)→(A) Rn中的內容送到累加器A中
MOV A,@Ri ;((Ri))→(A) Ri內容指向的地址單元中的內容送到累加器A

[2]. 以寄存器Rn為目的操作數的指令(3條)
這3條指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。有直接、立即和寄存器定址方式:

MOV Rn,data ;(data)→(Rn) 直接定址單元中的內容送到寄存器Rn中
MOV Rn,#data ;#data→(Rn) 立即數直接送到寄存器Rn中
MOV Rn,A ;(A)→(Rn) 累加器A中的內容送到寄存器Rn中

[3]. 以直接地址為目的操作數的指令(5條)
這組指令的功能是把源操作數指定的內容送到由直接地址data所選定的片內RAM中。有直接、立即、寄存器和寄存器間接4種定址方式:

MOV data,data ;(data)→(data) 直接地址單元中的內容送到直接地址單元
MOV data,#data ;#data→(data) 立即數送到直接地址單元
MOV data,A ;(A)→(data) 累加器A中的內容送到直接地址單元
MOV data,Rn ;(Rn)→(data) 寄存器Rn中的內容送到直接地址單元
MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的內容指定的地址單元中數據送到直接地址單元

[4]. 以間接地址為目的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。有直接、立即和寄存器3種定址方式:

MOV @Ri,data ;(data)→((Ri)) 直接地址單元中的內容送到以Ri中的內容為地址的RAM單元
MOV @Ri,#data ;#data→((Ri)) 立即數送到以Ri中的內容為地址的RAM單元
MOV @Ri,A ;(A)→((Ri)) 累加器A中的內容送到以Ri中的內容為地址的RAM單元

[5]. 查表指令(2條)
這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送,使用變址定址方式:

MOVC A,@A+DPTR ;((A))+(DPTR)→(A) 表格地址單元中的內容送到累加器A中
MOVC A,@A+PC ;((PC))+1→(A),((A))+(PC)→(A) 表格地址單元中的內容送到累加器A中

[6]. 累加器A與片外數據存儲器RAM傳送指令(4條)
這4條指令的作用是累加器A與片外RAM間的數據傳送。使用寄存器定址方式:

MOVX @DPTR,A ;(A)→((DPTR)) 累加器中的內容送到數據指針指向片外RAM地址中
MOVX A, @DPTR ;((DPTR))→(A) 數據指針指向片外RAM地址中的內容送到累加器A中
MOVX A, @Ri ;((Ri))→(A) 寄存器Ri指向片外RAM地址中的內容送到累加器A中
MOVX @Ri,A ;(A)→((Ri)) 累加器中的內容送到寄存器Ri指向片外RAM地址中

[7]. 堆棧操作類指令(2條)
這4類指令的作用是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。這類指令只有兩條,下述的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機開機復位後,(SP)默認為07H,但一般都需要重新賦值,設置新的SP首址。入棧的第一個數據必須存放於SP+1所指存儲單元,故實際的堆棧底為SP+1所指的存儲單元。

PUSH data ;(SP)+1→(SP),(data)→(SP) 堆棧指針首先加1,直接定址單元中的數據送到堆棧指針SP所指的單元中
POP data ;(SP)→(data)(SP)-1→(SP), 堆棧指針SP所指的單元數據送到直接定址單元中,堆棧指針SP再進行減1操作

[8]. 交換指令(5條)
這5條指令的功能是把累加器A中的內容與源操作數所指的數據相互交換。

XCH A,Rn ;(A)←→(Rn)累加器與工作寄存器Rn中的內容互換
XCH A,@Ri ;(A)←→((Ri))累加器與工作寄存器Ri所指的存儲單元中的內容互換
XCH A,data ;(A)←→(data)累加器與直接地址單元中的內容互換
XCHD A,@Ri ;(A 3-0 )←→((Ri) 3-0 )累加器與工作寄存器Ri所指的存儲單元中的內容低半位元組互換
SWAP A ;(A 3-0 )←→(A 7-4 )累加器中的內容高低半位元組互換

[9]. 16位數據傳送指令(1條)
這條指令的功能是把16位常數送入數據指針寄存器。

MOV DPTR,#data16 ;#dataH→(DPH),#dataL→(DPL)16位常數的高8位送到DPH,低8位送到DPL

MCS-51算術運算指令

算術運算指令共有24條,算術運算主要是執行加、減、乘、除法四則運算。另外MCS-51指令系統中有相當一部分是進行加、減1操作,BCD碼的運算和調整,我們都歸類為運算指令。雖然MCS-51單片機的算術邏輯單元ALU僅能對8位無符號整數進行運算,但利用進位標志C,則可進行多位元組無符號整數的運算。同時利用溢出標志,還可以對帶符號數進行補碼運算。需要指出的是,除加、減1指令外,這類指令大多數都會對PSW(程序狀態字)有影響。這在使用中應特別注意。

[1]. 加法指令(4條)
這4條指令的作用是把立即數,直接地址、工作寄存器及間接地址內容與累加器A的內容相加,運算結果存在A中。

ADD A,#data ;(A)+#data→(A) 累加器A中的內容與立即數#data相加,結果存在A中
ADD A,data ;(A)+(data)→(A) 累加器A中的內容與直接地址單元中的內容相加,結果存在A中
ADD A,Rn ;(A)+(Rn)→(A) 累加器A中的內容與工作寄存器Rn中的內容相加,結果存在A中
ADD A,@Ri ;(A)+((Ri))→(A) 累加器A中的內容與工作寄存器Ri所指向地址單元中的內容相加,結果存在A中

[2]. 帶進位加法指令(4條)
這4條指令除與[1]功能相同外,在進行加法運算時還需考慮進位問題。

ADDC A,data ;(A)+(data)+(C)→(A) 累加器A中的內容與直接地址單元的內容連同進位位相加,結果存在A中
ADDC A,#data ;(A)+#data +(C)→(A) 累加器A中的內容與立即數連同進位位相加,結果存在A中
ADDC A,Rn ;(A)+Rn+(C)→(A) 累加器A中的內容與工作寄存器Rn中的內容、連同進位位相加,結果存在A中
ADDC A,@Ri ;(A)+((Ri))+(C)→(A) 累加器A中的內容與工作寄存器Ri指向地址單元中的內容、連同進位位相加,結果存在A中

[3]. 帶借位減法指令(4條)
這組指令包含立即數、直接地址、間接地址及工作寄存器與累加器A連同借位位C內容相減,結果送回累加器A中。
這里我們對借位位C的狀態作出說明,在進行減法運算中,CY=1表示有借位,CY=0則無借位。OV=1聲明帶符號數相減時,從一個正數減去一個負數結果為負數,或者從一個負數中減去一個正數結果為正數的錯誤情況。在進行減法運算前,如果不知道借位標志位C的狀態,則應先對CY進行清零操作。

SUBB A,data ;(A)-(data) - (C)→(A) 累加器A中的內容與直接地址單元中的內容、連同借位位相減,結果存在A中
SUBB A,#data ;(A)-#data -(C)→(A) 累加器A中的內容與立即數、連同借位位相減,結果存在A中
SUBB A,Rn ;(A)-(Rn) -(C)→(A) 累加器A中的內容與工作寄存器中的內容、連同借位位相減,結果存在A中
SUBB A,@Ri ;(A)-((Ri)) -(C)→(A) 累加器A中的內容與工作寄存器Ri指向的地址單元中的內容、連同借位位相減,結果存在A中

[4]. 乘法指令(1條)
這個指令的作用是把累加器A和寄存器B中的8位無符號數相乘,所得到的是16位乘積,這個結果低8位存在累加器A,而高8位存在寄存器B中。如果OV=1,說明乘積大於FFH,否則OV=0,但進位標志位CY總是等於0。

MUL AB ;(A)×(B)→(A)和(B) 累加器A中的內容與寄存器B中的內容相乘,結果存在A、B中

[5]. 除法指令(1條)
這個指令的作用是把累加器A的8位無符號整數除以寄存器B中的8位無符號整數,所得到的商存在累加器A,而余數存在寄存器B中。除法運算總是使OV和進位標志位CY等於0。如果OV=1,表明寄存器B中的內容為00H,那麼執行結果為不確定值,表示除法有溢出。

DIV AB ;(A)÷(B)→(A)和(B) 累加器A中的內容除以寄存器B中的內容,所得到的商存在累加器A,而余數存在寄存器B中。

[6]. 加1指令(5條)
這5條指令的的功能均為原寄存器的內容加1,結果送回原寄存器。上述提到,加1指令不會對任何標志有影響,如果原寄存器的內容為FFH,執行加1後,結果就會是00H。這組指令共有直接、寄存器、寄存器減間址等定址方式:

INC A ;(A)+1→(A) 累加器A中的內容加1,結果存在A中
INC data ;(data)+1→(data) 直接地址單元中的內容加1,結果送回原地址單元中
INC @Ri ;((Ri))+1→((Ri)) 寄存器的內容指向的地址單元中的內容加1,結果送回原地址單元中
INC Rn ;(Rn)+1→(Rn)寄存器Rn的內容加1,結果送回原地址單元中
INC DPTR ;(DPTR)+1→(DPTR)數據指針的內容加1,結果送回數據指針中

在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內容,然後在CPU進行加1操作,再輸出到I/O上,這就是「讀—修改—寫」操作。

[7]. 減1指令(4條)
這組指令的作用是把所指的寄存器內容減1,結果送回原寄存器,若原寄存器的內容為00H,減1後即為FFH,運算結果不影響任何標志位,這組指令共有直接、寄存器、寄存器間址等定址方式,當直接地址是I/O口鎖存器時,「讀—修改—寫」操作與加1指令類似。

DEC A ;(A)-1→(A)累加器A中的內容減1,結果送回累加器A中
DEC data ;(data)-1→(data)直接地址單元中的內容減1,結果送回直接地址單元中
DEC @Ri ;((Ri))-1→((Ri))寄存器Ri指向的地址單元中的內容減1,結果送回原地址單元中

DEC Rn ;(Rn)-1→(Rn)寄存器Rn中的內容減1,結果送回寄存器Rn中

[8]. 十進制調整指令(1條)
在進行BCD碼運算時,這條指令總是跟在ADD或ADDC指令之後,其功能是將執行加法運算後存於累加器A中的結果進行調整和修正。

DA A

MCS-51邏輯運算及移位指令

邏輯運算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等定址方式。這類指令一般不影響程序狀態字(PSW)標志。

[1]. 循環移位指令(4條)
這4條指令的作用是將累加器中的內容循環左或右移一位,後兩條指令是連同進位位CY一起移位。

RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位

[2]. 累加器半位元組交換指令(1條)
這條指令是將累加器中的內容高低半位元組互換,這在上一節中內容已有介紹。

SWAP A ; 累加器中的內容高低半位元組互換

[3]. 求反指令(1條)
這條指令將累加器中的內容按位取反。

CPL A ; 累加器中的內容按位取反

[4]. 清零指令(1條)
這條指令將累加器中的內容清0。

CLR A ; 0→(A),累加器中的內容清0

[5]. 邏輯與操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯與操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。

ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。

[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。

ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。

[7]. 邏輯異或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯異或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。

XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。
XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中。

MCS-51控制轉移指令

控制轉移指令用於控製程序的流向,所控制的范圍即為程序存儲器區間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB位元組進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執行一般都不會對標志位有影響。

[1]. 無條件轉移指令(4條)
這組指令執行完後,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。

LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)

AJMP addr11 ;(PC)+2→(PC),addr11→(PC 10-0 )程序計數器賦予新值(11位地址),(PC 15-11 )不改變

SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值

JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值

[2]. 條件轉移指令(8條)
程序可利用這組豐富的指令根據當前的條件進行判斷,看是否滿足某種特定的條件,從而控製程序的轉向。

JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行

JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行

CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行

CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行

CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行

CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行

DJNZ Rn, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)工作寄存器Rn減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行

DJNZ data, rel ; (Rn)-1→(Rn),(Rn)≠0,(PC)+ 2 + rel→(PC)直接地址單元中的內容減1不等於0,則轉移到偏移量所指向的地址,否則程序往下執行

[3]. 子程序調用指令(1條)
子程序是為了便於程序編寫,減少那些需反復執行的程序佔用多餘的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復執行的一些程序,我們在編程時一般都把它們編寫成子程序,當需要用它們時,就用一個調用命令使程序按調用的地址去執行,這就需要子程序的調用指令和返回指令。

LCALL addr16 ; 長調用指令,可在64kB空間調用子程序。此時(PC)+ 3→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr16→(PC),即分別從堆棧中彈出調用子程序時壓入的返回地址

ACALL addr11 ; 絕對調用指令,可在2kB空間調用子程序,此時(PC)+ 2→(PC),(SP)+ 1→(SP),(PC 7-0 )→(SP),(SP)+ 1→(SP),(PC 15-8 )→(SP),addr11→(PC 10-0 )

RET ; 子程序返回指令。此時(SP)→(PC 15-8 ),(SP)- 1→(SP),(SP)→(PC 7-0 ),(SP)- 1→(SP)

RETI ; 中斷返回指令,除具有RET功能外,還具有恢復中斷邏輯的功能,需注意的是,RETI指令不能用RET代替

[4]. 空操作指令(1條)
這條指令將累加器中的內容清0。

NOP ; 這條指令除了使PC加1,消耗一個機器周期外,沒有執行任何操作。可用於短時間的延時

MCS-51布爾變數操作指令

布爾處理功能是MCS-51系列單片機的一個重要特徵,這是出於實際應用需要而設置的。布爾變數也即開關變數,它是以位(bit)為單位進行操作的。

在物理結構上,MCS-51單片機有一個布爾處理機,它以進位標志做為累加位,以內部RAM可定址的128個為存儲位。

既然有布爾處理機功能,所以也就有相應的布爾操作指令集,下面我們分別談論。

[1]. 位傳送指令(2條)
位傳送指令就是可定址位與累加位CY之間的傳送,指令有兩條。

MOV C,bit ;bit→CY,某位數據送CY

MOV bit,C ;CY→bit,CY數據送某位

[2]. 位置位復位指令(4條)
這些指令對CY及可定址位進行置位或復位操作,共有四條指令。

CLR C ; 0→CY,清CY

CLR bit ; 0→bit,清某一位

SETB C ; 1→CY,置位CY

SETB bit ; 1→bit,置位某一位

[3]. 位運算指令(6條)
位運算都是邏輯運算,有與、或、非三種指令,共六條。

ANL C,bit ;(CY)∧(bit)→CY

ANL C,/bit ;(CY)∧( )→CY

ORL C,bit ;(CY)∨(bit)→CY

ORL C,/bit ;(CY)∧( )→CY

CPL C ;( )→CY

CPL bit ;( )→bir

[4]. 位控制轉移指令(5)
位控制轉移指令是以位的狀態作為實現程序轉移的判斷條件,介紹如下:

JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。

JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。

JB bit, rel ; 位狀態為1轉移。

JNB bit, rel ; 位狀態為0轉移。

JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。

後三條指令都是三位元組指令,如果條件滿足,(PC)+3+rel→PC,否則程序往下執行,(PC)+3→PC

㈢ 單片機查表指令MOVC A @A+DPTR

51單片機的指令系統中,是沒有MOVC
A,@R0+DPTR的,查表指令只有兩條:
1、MOVC
A,@A+DPTR
2、MOVC
A,@A+PC

㈣ STC單片機指令表

上邊這幾條指令好像STC單片機里邊都沒有,你到宏晶官方網站上去下載隨便一個單片機的數據手冊,里邊就包含了所有的匯編指令了。

㈤ 51單片機的所有指令

單片機指令功能一覽表
助記符 代碼 說明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data 立即數送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接位元組送寄存器
MOV Rn,#data 78~7F data 立即數送寄存器
MOV dircet,A F5 dircet A送直接位元組
MOV dircet,Rn 88~8F dircet 寄存器送直接位元組
MOV dircet1,dircet2 85 dircet1 dircet2 直接位元組送直接位元組
MOV dircet,@Ro 86~87 間接RAM送直接位元組
MOV dircet,#data 75 dircet data 立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,#data 76~77 data 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程序存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程序存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH dircet C0 dircet 直接位元組進棧,SP加1
POP dircet D0 dircet 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和寄存器
XCH A,dircet C5 dircet 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4

算術操作 (A的二個半位元組交換)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data 立即數加到A
ADD A,Rn 38~3F 寄存器和進位位加到A
ADD A,dircet 35dircet 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
ADD A,Rn 98~9F A減去寄存器和進位位
ADD A,dircet 95 dircet A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去寄存器和進位位
SUBB A,dircet 95 dircet A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 寄存器減1
DEC dircet 15 dircet 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整

邏輯操作
ANL A,Rn 58~5F 寄存器「與」到A
ANL A,dircet 55 dircet 直接位元組「與」到A
ANL A,@Ri 56~57 間接RAm「與」到A
ANL A,#data 54 data 立即數「與」到A
ANL dircet A 52 dircet A「與」到直接位元組
ANL dircet,#data 53 dircet data 立即數「與」到直接位元組
ORL A,Rn 48~4F 寄存器「或」到A
ORL A,dircet 45 dircet 直接位元組「或」到A
ORL A,@Ri 46~47 間接RAM「或」到A
ORL A,#data 44 data 立即數「或」到A
ORL dircet,A 42 dircet A「或」到直接位元組
ORL dircet,#data 43 dircet data 立即數「或」到直接位元組
XRL A,Rn 68~6F 寄存器「異或」到A
XRL A,dircet 65 dircet 直接位元組「異或」到A
XRL A,@Ri 66~67 間接RAM「異或」到A
XRL A,#data 64 data 立即數「異或」到A
XRL dircet A 62 dircet A「異或」到直接位元組
XRL dircet,#data 63 dircet data 立即數「異或」到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移

控製程序轉移
ACALL addr 11 *1 addr(a7~a0) 絕對子程序調用
LCALL addr 16 12 addr(15~8) 長子程序調用
addr(7~0)
RET 22 子程序調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,dircet,rel B5 dircet rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel 立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel 立即數與寄存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel 立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 寄存器減1,不為零則轉移
DJNZ dircet,rel B5 dircet rel 直接位元組減1,不為零則轉移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80

布爾變數操作
CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數「與」到進位
ANL C,/bit B0 直接位的反「與」到進位
ORL C,bit 72 bit 直接位「或」到進位
ORL C,/bit A0 bit 直接位的反「或」到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位

[1]. 循環移位指令(4條)
RL A ;累加器A中的內容左移一位
RR A ;累加器A中的內容右移一位
RLC A ;累加器A中的內容連同進位位CY左移一位
RRC A ;累加器A中的內容連同進位位CY右移一位

[2]. 累加器半位元組交換指令(1條)
SWAP A ; 累加器中的內容高低半位元組互換

[3]. 求反指令(1條)
CPL A ; 累加器中的內容按位取反

[4]. 清零指令(1條)
CLR A ; 0→(A),累加器中的內容清0

[5]. 邏輯與操作指令(6條)
ANL A,data ;累加器A中的內容和直接地址單元中的內容執行與邏輯操作。結果存在寄存器A中。
ANL data,#data ;直接地址單元中的內容和立即數執行與邏輯操作。結果存在直接地址單元中。
ANL A,#data ;累加器A的內容和立即數執行與邏輯操作。結果存在累加器A中。
ANL A,Rn ;累加器A的內容和寄存器Rn中的內容執行與邏輯操作。結果存在累加器A中。
ANL data,A ;直接地址單元中的內容和累加器A的內容執行與邏輯操作。結果存在直接地址單元中。
ANL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行與邏輯操作。結果存在累加器A中。

[6]. 邏輯或操作指令(6條)
這組指令的作用是將兩個單元中的內容執行邏輯或操作。如果直接地址是I/O地址,則為「讀—修改—寫」操作。

ORL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯或操作。結果存在寄存器A中。
ORL data,#data ;直接地址單元中的內容和立即數執行邏輯或操作。結果存在直接地址單元中。
ORL A,#data ;累加器A的內容和立即數執行邏輯或操作。結果存在累加器A中。
ORL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯或操作。結果存在累加器A中。
ORL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯或操作。結果存在直接地址單元中。
ORL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯或操作。結果存在累加器A中。

[7]. 邏輯異或操作指令(6條)
XRL A,data ;累加器A中的內容和直接地址單元中的內容執行邏輯異或操作。結果存在寄存器A中。
XRL data,#data ;直接地址單元中的內容和立即數執行邏輯異或操作。結果存在直接地址單元中。
XRL A,#data ;累加器A的內容和立即數執行邏輯異或操作。結果存在累加器A中。
XRL A,Rn ;累加器A的內容和寄存器Rn中的內容執行邏輯異或操作。結果存在累加器A中。

XRL data,A ;直接地址單元中的內容和累加器A的內容執行邏輯異或操作。結果存在直接地址單元中。
XRL A,@Ri ;累加器A的內容和工作寄存器Ri指向的地址單元中的內容執行邏輯異或操作。結果存在累加器A中

控制轉移類指令分析

[1]. 無條件轉移指令(4條)
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序計數器賦予新值(11位地址),(PC15-11)不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值

[2]. 條件轉移指令(8條)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的內容為0,則轉移到偏移量所指向的地址,否則程序往下執行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的內容不為0,則轉移到偏移量所指向的地址,否則程序往下執行

CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的內容不等於直接地址單元的內容,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址單元中的內容不等於立即數,則轉移到偏移量所指向的地址,否則程序往下執行

布爾變數操作指令分析

[1]. 位傳送指令(2條)
MOV C,bit ;bit→CY,某位數據送CY
MOV bit,C ;CY→bit,CY數據送某位

[2]. 位置位復位指令(4條)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位

[3]. 位運算指令(6條)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir

[4]. 位控制轉移指令(5)
JC rel ; (CY)=1轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JNC rel ; (CY)=0轉移,(PC)+2+rel→PC,否則程序往下執行,(PC)+2→PC。
JB bit, rel ; 位狀態為1轉移。
JNB bit, rel ; 位狀態為0轉移。
JBC bit, rel ; 位狀態為1轉移,並使該位清「0」。

㈥ 單片機查表指令movc什麼意思

MOVC指令意思是表示程序存儲器里的內容和別的存儲單元進行傳送的,主要是用在累加器A和程序存儲器的數據傳送。

單片機的操作語言使用的是匯編語言,是一種用於電子計算機、微處理器、微控制器或其它可編程器件的低級語言。

包括通用數據傳送指令MOV、條件傳送指令CMOVcc、堆棧操作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交換指令XCHG/XLAT/BSWAP、地址或段描述符選擇子傳送指令LEA/LDS/LES/LFS/LGS/LSS等。


(6)單片機指令表擴展閱讀

測試指令BT、位測試並置位指令BTS、位測試並復位指令BTR、位測試並取反指令BTC、位向前掃描指令BSF、位向後掃描指令BSR等。

加法指令ADD/ADC、減法指令SUB/SBB、加一指令INC、減一指令DEC、比較操作指令CMP、乘法指令MUL/IMUL、除法指令DIV/IDIV、符號擴展指令CBW/CWDE/CDQE、十進制調整指令DAA/DAS/AAA/AAS、邏輯運算指令NOT/AND/OR/XOR/TEST等。

無條件轉移指令JMP、條件轉移指令Jcc/JCXZ、循環指令LOOP/LOOPE/LOOPNE、過程調用指令CALL、子過程返回指令RET、中斷指令INTn、INT3、INTO、IRET等。


㈦ 單片機所有指令的英文全稱

MCS-51使用匯編語言指
令,它共有44個操作碼助記符,33種功能,
其操作數有#data、direct、Rn、@Ri等。這里先介紹指令助記符及其相關符號的記憶方
法。
一、助記符號的記憶方法
1�表格列舉法
把44個指令助記符按功能分為五類,每類列表記憶。此處從略,請讀者自己總結。
2�英文還原法
單片機的操作碼助記符是該指令功能的英文縮寫,將縮寫還原成英語原文,再對照漢
語有助於理解其助記符含義,從而加強記憶。例如:
增量 INC-Incremect 減量 DNC-Decrement
短轉移 SJMP-Short jump 長轉移 LJMP-Long jump
比較轉移 CJNE-Compare jump not equality
絕對轉移 AJMP-Absolute jump 空操作 NOP-No operation
交換 XCH-Exchange 加法 ADD-Addition
乘法 MUL-Multiplication 除法 DIV-Division
左環移 RL-Rotate left 進位左環移 RLC-Rotate
left carry
右環移 RR-Rotate right 進位右環移RRC-Rotate
right carry
3�功能模塊記憶法
單片機的44個指令助記符,按所屬指令功能可分為五大類,每類又可以按功能相似原
則為2~3組。這樣,化整為零,各個擊破,實現快速記憶。
1)數據傳送組。 2)加減運算組
MOV 內部數據傳送 ADD 加法
MOVC 程序存儲器傳送 ADDC 帶進位加法
MOVX 外部數據傳送 SUBB 帶進位減法
3)邏輯運算組。 4)子程序調用組。
ANL 邏輯與 LCALL 長調用
ORL 邏輯或 ALALL 絕對調用
XRL 邏輯異或 RET 子程序返回
二、指令的記憶方法
1�指令操作數的有關符號
MCS-51的定址方式共有六種:立即數定址、直接定址、寄存器定址、寄存器間址、變
址定址、相對定址。我們必須掌握其表示的方法。
1)立即數與直接地址。ata表示八位立即數,#data16表示是十六位立即數,data或
direct表示直接地址。
2)Rn(n=0-7)、A、B、CY、DPTR寄存器定址變數。
3)@R0、@R1、@DPTR、SP表示寄存器間址變數。
4)DPTR+A、PC+A表示變址定址的變數。
5)PC+rel(相對量)表示相對定址變數。
記住指令的助記符,掌握不同定址方式的指令操作數的表示方法,為我們記憶匯編指
令打下了基礎。MCS-51指令雖多,但按功能可分為五類,
其中數據傳送類28條,算術運算類24條,邏輯操作類25條,控制轉移類17條,布爾位操作
類17條。在每類指令里,根據其功能,抓住其源、
目的操作數的不同組合,再輔之以下方法,是完全能記住的。
我們約定,可能的目的操作數按(#data/direct/A/Rn/@Ri)順序表示。
對於MOV指令,其目的操作數按A、Rn、direct、@Ri的順序書寫,則可以記住MOV的15
條指令。例如以累加器A為目的操作數,可寫出如下4條指令。
MOV A,#data/direct/A/Rn/@Ri
以此類推,寫出其它指令。
MOV Rn,#data/direct/A
MOV direct,#data/direct/A/Rn/@Ri
MOV @Ri,#data/direct/A
2�指令圖示記憶法
圖示記憶法是把操作功能相同或相似、但其操作數不同的指令,用圖形和箭頭將目
的、源操作數的關系表示出來的一種記憶方法。
例如:由助記符MOV、MOVX、MOVC組成的送數組指令,可以用圖1、2幫助記憶。
由助記符CJNE形成的四條指令,也可以用圖示法表示,如圖3。
CJNE A,#data,rel CJNE A,direct,rel
CJNE @Rn,#data,rel CJNE @Ri,#data,rel
另外,對於由(ANL、ORL、ARL)形成的18條邏輯操作指令,有關A的四條環移指令,
也可以用圖示法表示,請讀者自行畫出記憶。
3�相似功能歸類法
在MCS-51指令中,我們發現部分指令其操作碼不同,但功能相似,而操作數則完全一
樣。相似功能歸類法就是把具有這樣特點的指令放在一起記憶,
只要記住其中的一條,其餘的也就記住了。如加、減法的十二條指令,與、或、非的十八
條指令,現列舉如下。
ADD/ADDC/SUBB A,#data/direct/Rn/@Ri
ANL/ORL/XRL A,#data/direct/Rn/@Ri
ANL/ORL/XRL direct,#data/a
上述每一排指令,功能相似,其操作數都相同。其它的如加1(INC)、減1(DEC)指令也
可照此辦理。
4�口訣記憶法
對於有些指令,我們可以把相關的功能用精練的語言編成一句話來記憶。如PUSH
direct和POP direct這兩條指令。
初學者常常分不清堆棧SP的變化情況,為此編成這樣一句話:(SP的內容)加1(direct的內
容)再入棧,(SP的內容)彈出(到direct單元)SP才減1。
又如乘法指令中積的存放,除法指令中被除數和除數以及商的存放,都可以編成口訣記憶
如下。
MUL AB 高位積(存於)B,低位積(存於)A。
DIV AB A除以B,商(存於)A余(下)B。
上面介紹了幾種快速記憶單片機指令的方法,希望能起到拋磚引玉的作用,相信讀者
在學習單片機的過程中能找到適合自己的方法來記憶。
但是,有了好的方法還不夠,還需要實踐,即多讀書上的例題和別人編寫的程序,自己再
結合實際編寫一些程序。只有這樣,
才能更好更快地掌握單片機指令系統。

㈧ 單片機指令

單片機指令功能一覽表
助記符 代碼 說明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接位元組送A
MOV A,@Ri ER~E7 間接RAM送A
MOV A,#data 74 data 立即數送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接位元組送寄存器
MOV Rn,#data 78~7F data 立即數送寄存器
MOV dircet,A F5 dircet A送直接位元組
MOV dircet,Rn 88~8F dircet 寄存器送直接位元組
MOV dircet1,dircet2 85 dircet1 dircet2 直接位元組送直接位元組
MOV dircet,@Ro 86~87 間接RAM送直接位元組
MOV dircet,#data 75 dircet data 立即數送直接位元組
MOV @Ri,A F6~F7 A送間接RAM
MOV @Ri,#data 76~77 data 直接位元組送間接RAM
MOV @Ri,#data 76~77 data 立即數送間接RAM
MOV DPTR,#data16 90 data 15~8 16位常數送數據指針
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))定址的程序存貯
器位元組選A
MOVC A,@A+PC 83 由((A)+(PC));定址的程序存貯器位元組送A
MOVX A,@Ri E2~E3 送外部數據(8位地址)送A
MOVX A,@DPTR E0 送外部數據(16位地址)送A
MOVX @Ri,A F2~F3 A送外部數據(8位地址)
MOVX @DPTR,A F0 A送外部數據(16位地址)
PUSH dircet C0 dircet 直接位元組進棧,SP加1
POP dircet D0 dircet 直接位元組退棧,SP減1
XCH A,Rn C8~CF 交換A和寄存器
XCH A,dircet C5 dircet 交換A和直接位元組
XCH A,@Ri C6~C7 交換A和間接RAM
XCH A,@Ri D6~D7 交換A和間接RAM的低位
SWAP A C4

算術操作 (A的二個半位元組交換)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接位元組加到A
ADD A,@Ri 26~27 間接RAM加到A
ADD A,#data 24data 立即數加到A
ADD A,Rn 38~3F 寄存器和進位位加到A
ADD A,dircet 35dircet 直接位元組和進位位加到A
ADD A,@Ri 36~37 間接位元組和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
ADD A,Rn 98~9F A減去寄存器和進位位
ADD A,dircet 95 dircet A減去直接位元組和進位位
ADD A,@Ri 36~37 間接RAM和進位位加到A
ADD A,data 34 data 立即數和進位位加到A
SUBB A,Rn 98~9F A減去寄存器和進位位
SUBB A,dircet 95 dircet A減去直接位元組和進位位
SUBB A,@Ri 96~97 A減去間接RAM和進位位
SUBB A,#data 94 data A減去立即數和進位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接位元組加1
INC @Ri 06~07 間接RAM加1
DEC A 14 A減1
DEC Rn 18~1F 寄存器減1
DEC dircet 15 dircet 直接位元組減1
DEC @Ri 16~17 間接RAM減1
INC DPTR A3 數據指針加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十進制加法調整

邏輯操作
ANL A,Rn 58~5F 寄存器「與」到A
ANL A,dircet 55 dircet 直接位元組「與」到A
ANL A,@Ri 56~57 間接RAm「與」到A
ANL A,#data 54 data 立即數「與」到A
ANL dircet A 52 dircet A「與」到直接位元組
ANL dircet,#data 53 dircet data 立即數「與」到直接位元組
ORL A,Rn 48~4F 寄存器「或」到A
ORL A,dircet 45 dircet 直接位元組「或」到A
ORL A,@Ri 46~47 間接RAM「或」到A
ORL A,#data 44 data 立即數「或」到A
ORL dircet,A 42 dircet A「或」到直接位元組
ORL dircet,#data 43 dircet data 立即數「或」到直接位元組
XRL A,Rn 68~6F 寄存器「異或」到A
XRL A,dircet 65 dircet 直接位元組「異或」到A
XRL A,@Ri 66~67 間接RAM「異或」到A
XRL A,#data 64 data 立即數「異或」到A
XRL dircet A 62 dircet A「異或」到直接位元組
XRL dircet,#data 63 dircet data 立即數「異或」到直接位元組
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左環移
RLC A 33 A通過進位左環移
RR A 03 A右環移
RRC A 13 A通過進位右環移

控製程序轉移
ACALL addr 11 *1 addr(a7~a0) 絕對子程序調用
LCALL addr 16 12 addr(15~8) 長子程序調用
addr(7~0)
RET 22 子程序調用返回
RETI addr 11 32 中斷調用返回
AJMP addr 11 △1 addr(a7~a6) 絕對轉移
LJMP addr 16 02addr(15~8) 長轉移
addr(7~0)
SJMP rel 80 rel 短轉移,相對轉移
JMP @A+DPTR 73 相對於DPTR間接轉移
JZ rel 60 rel A為零轉移
JNZ rel 70 rel A為零轉移
CJNE A,dircet,rel B5 dircet rel 直接位元組與A比較,不等則轉移
CJNE A,#data,rel B4 data rel 立即數與A比較,不等則轉移
CJNE A,Rn,#data,rel B8~BF data rel 立即數與寄存器比較,不等則轉移
CJNE @Ri,#data,rel B6~B7 data rel 立即數與間接RAM比較,不等則轉移
DJNZ Rn,rel D8~DF rel 寄存器減1,不為零則轉移
DJNZ dircet,rel B5 dircet rel 直接位元組減1,不為零則轉移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80

布爾變數操作
CLR C C3 清零進位
CLR bit C2 清零直接位
SETB C D3 置位進位
SETB bit D2 置位直接位
CPL C B3 進位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接數「與」到進位
ANL C,/bit B0 直接位的反「與」到進位
ORL C,bit 72 bit 直接位「或」到進位
ORL C,/bit A0 bit 直接位的反「或」到進位
MOV C,bit A2 bit 直接位送進位
MOV bit,C 92 bit 進位送直接位
JC rel 40 rel 進位位為1轉移
JNC rel 50 rel 進位位為0轉移
JB bit,rel 20 bit rel 直接位為1相對轉移
JNB bit,rel 30 bit rel 直接位為0相對轉移
JBC bit,rel 10 bit rel 直接位為1相對轉移,然後清零該位

㈨ 求單片機總匯編語言指令表、____

編號 指令名稱 指令助記符 指令說明
數據傳送類指令
1 一般傳送 MOV A, #data 將立即數#data送累加器A
2 MOV direct, #data 將立即數#data送片內RAM direct地址單元內
3 Mov Rn, #data 將立即數#data送寄存器Rn
4 Mov @Ri, #data 寄存器Ri內為RAM地址,將立即數#data送該地址單元內
5 Mov direct2, direct1 將direct1地址單元的數據送 direct2地址單元內
6 Mov direct, rn 將Rn的數據送 direct地址單元內
7 Mov Rn, direct 將direct地址單元內的數據送Rn寄存器
8 Mov direct, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據送direct地址單元內
9 Mov @Ri, direct 寄存器Ri內為RAM地址,將direct地址單元內的數據送該地址單元內
10 Mov A, Rn 將寄存器Rn內的數據送累加器A
11 Mov Rn, A 將累加器A內的數據送寄存器Rn
12 Mov A, direct 將direct地址單元內的數據送累加器A
13 Mov direct, A 將累加器A內的數據送direct地址單元內
14 Mov A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據送累加器A
15 Mov @Ri , A 寄存器Ri內為RAM地址,將累加器A的數據送該地址單元內
16 目的地址傳送 Mov DPTR, #data16 將16位立即數送數據指針DPTR寄存器
17 位元組交換 SWAP A 累加器A高低4位數據交換
18 XCH A, Rn 將累加器A數據和寄存器Rn內的數據交換
19 XCH A, direct 將累加器A數據和direct地址單元內的數據交換
20 XCH A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據與累加器A的數據交換
21 XCHD A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據低4位與的低4位交換
22 與外部RAM傳送 MOVX @DPTR, A 將累加器A的數據送數據指針DPTR寄存器所指外部RAM地址單元內
23 MOVX A , @DPTR 將DPTR寄存器所指外部RAM地址單元內的數據送累加器A
24 MOVX A, @Ri 寄存器Ri內為片外RAM地址,將該地址單元內的數據送累加器A
25 MOVX @Ri, A 寄存器Ri內為片外RAM地址,將該地址單元內的數據送累加器A
26 與ROM傳送 MOVC A, @A+DPTR A+DPTR構成ROM地址,將該地址內的數據送累加器A內
27 MOVC A, @A+PC A+PC構成ROM地址,將該地址內的數據送累加器A內
28 棧操作 PUSH direct 堆棧指針SP自加1後,將direct地址單元的數據壓進堆棧,
29 POP direct 堆棧的數據送direct地址單元中,後堆棧指針減1,
算術運算指令
30 加法指令 ADD A, Rn 將寄存器Rn與累加器A的數據相加後,結果保存到累加器A
31 ADD A, direct 將direct地址單元內的數據與累加器A的數據相加後結果保存到累加器A
32 ADD A, @Ri 寄存器Ri內位地址,將該地址單元內的數據與累加器A的數據相加後結果保存到累加器A
33 ADD A, #data 將立即數與累加器A的數據相加後結果保存到累加器A
34 帶進位加法 ADDC A, Rn 將寄存器Rn與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
35 ADDC A, direct 將direct地址單元內的數據與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
36 ADDC A, @Ri 寄存器Ri內為RAM地址,將該地址單元內的數據與累加器A的數據相加,再加上進位標志內的值後,結果保存到累加器A
37 ADDC A, #data 將立即數與累加器A的數據相加,再加上進位標志內的值後結果保存到累加器A
38 帶借位減法 SUBB A, Rn 將與累加器A的數據減去寄存器Rn的數據,再減去進位標志內的值,結果保存到累加器A
39 SUBB A, direct 將與累加器A的數據減去direct地址單元內的數據,再減去進位標志內的值,結果保存到累加器A
40 SUBB A, @Ri 寄存器Ri內為RAM地址,將累加器A的數據減去該地址單元內的數據,再減去進位標志內的值後,結果保存到累加器A
41 SUBB A, #data 將累加器A的數據減去立即數,再減去進位標志內的值後,結果保存到累加器A
42 加1指令 INC A 累加器A的值自加1
43 INC Rn 寄存器Rn的值自加1
44 INC direct direct地址單元內值自加1
45 INC @Ri 寄存器Ri內為RAM地址,該地址單元內的值自加1
46 INC DPTR 數據指針寄存器DPTR內的值自加1
47 減1指令 DEC A 累加器A的值自減1
48 DEC Rn 寄存器Rn的值自減1
49 DEC direct direct地址單元內的值自減1
50 DEC @Ri 寄存器Ri內為RAM地址,該地址單元內的值自減1
51 乘法 MUL AB 累加器A與寄存器B內的值相乘,乘積的高8位保存在B寄存器,低8位保存在累加器A中
52 除法 DIV AB 累加器A的值除以寄存器B的值,商保存在累加器A中,余數保存在B寄存器
53 二-十進制調整 DA A 對累加器A的結果進行十進制調整
邏輯運算指令
54 邏輯與 ANL A, Rn 將累加器A的值和寄存器Rn的值進行與操作,結果保存到累加器A中
55 ANL A, direct 將累加器A的值和direct地址單元內的值進行與操作,結果保存到累加器A中
56 ANL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行與操作,結果保存到累加器A中
57 ANL A, #data 將累加器A的值和立即數進行與操作,結果保存到累加器A中
58 ANL direct, A 將累加器A的值和direct地址單元內的值進行與操作,結果保存到direct地址單元內
59 ANL direct, #data 將立即數和direct地址單元內的值進行與操作,結果保存到direct地址單元內
60 邏輯或 ORL A, Rn 將累加器A的值和寄存器Rn的值進行或操作,結果保存到累加器A中
61 ORL A, direct 將累加器A的值和direct地址單元內的值進行或操作,結果保存到累加器A中
62 ORL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行或操作,結果保存到累加器A中
63 ORL A, #data 將累加器A的值和立即數進行或操作,結果保存到累加器A中
64 ORL direct, A 將累加器A的值和direct地址單元內的值進行或操作,結果保存到direct地址單元內
65 ORL direct, #data 將立即數和direct地址單元內的值進行或操作,結果保存到direct地址單元內
66 邏輯異或 XRL A, Rn 將累加器A的值和寄存器Rn的值進行異或操作,結果保存到累加器A中
67 XRL A, direct 將累加器A的值和direct地址單元內的值進行異或操作,結果保存到累加器A中
68 XRL A, @Ri 寄存器Ri內為RAM地址,將累加器A的值和該地址單元內的值進行異或操作,結果保存到累加器A中
69 XRL A, #data 將累加器A的值和立即數進行異或操作,結果保存到累加器A中
70 XRL direct, A 將累加器A的值和direct地址單元內的值進行異或操作,結果保存到direct地址單元內
71 XRL direct, #data 將立即數和direct地址單元內的值進行異或操作,結果保存到direct地址單元內
72 按位取反 CPL A 累加器A的值按位取反
73 累加器清零 CLR A 累加器A清0
74 邏輯右移 RR A 累加器A的值循環右移1位
75 邏輯左移 RL A 累加器A的值循環左移1位
76 帶進位右移 RRC A 累加器A的值帶進位循環右移1位
77 帶進位左移 RLC A 累加器A的值帶進位循環左移1位
控制轉移指令
78 無條件轉移 SJMP rel rel為地址偏移量,PC加2後的地址加上rel作為目標地址,程序跳到目標地址繼續運行
79 AJMP addr11(a10- a0) addr11為11位地址,PC加2後的地址高5位與指令中的低11位地址構成目標地址,程序跳到目標地址繼續運行
80 LJMP addr16 將addr16的16位地址送程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序
81 JMP @A+DPTR 目標地址的基地址放在DPTR中,目標地址對基地址的偏移量放在累加器A中,它們相加構成目標地址
82 條件轉移 JZ rel If(累加器A=0)則PC加2再加上rel作為目標地址
83 JNZ rel If(累加器A!=0)則PC加2再加上rel作為目標地址
84 CJNE A, direct, rel If(累加器A!= direct地址單元的值)則PC加2再加上rel作為目標地址
85 CJNE A, #data, rel If(累加器A!= 立即數)則PC加2再加上rel作為目標地址
86 CJNE Rn, #data, rel If(寄存器Rn的值!= 立即數)則PC加2再加上rel作為目標地址
87 CJNE @Ri, #data, rel 寄存器Ri內為RAM地址,If(該地址單元的值!= 立即數)則PC加2再加上rel作為目標地址
88 循環轉移 DJNZ Rn, rel 寄存器Rn的值減1後,If(寄存器Rn的值!=0)則PC加2再加上rel作為目標地址
89 DJNZ direct, rel Direct地址單元的值減1後,If(該值!=0)則PC加3再加上rel作為目標地址
90 布爾條件轉移 JC rel If(CY=1)則PC加2再加上rel作為目標地址
91 JNC rel If(CY=0)則PC加2再加上rel作為目標地址
92 JB bit, rel If(bit位=1)則PC加3再加上rel作為目標地址
93 JNB bit, rel If(bit位=0)則PC加3再加上rel作為目標地址
94 JBC bit, rel If(bit位=1)則PC加3再加上rel作為目標地址,且bit位清0
95 調用指令 ACALL addr11 addr11為11位地址,PC加2後的地址PUSH進堆棧,再將PC的地址高5位與指令中的低11位地址構成目標地址,程序跳到目標地址繼續運行
96 LCALL addr16 PC加3後的地址PUSH進堆棧,再將16位地址送PC作為目標地址,程序跳到目標地址繼續運行
97 返回指令 RET 子程序返回指令,把堆棧中的地址恢復到PC中使程序回到調用處
98 RETI 中斷程序返回指令,把堆棧中的地址恢復到PC中使程序回到調用處
99 空操作 NOP 空操作
位操作指令
100 布爾傳送 MOV C, bit 將bit位地址中的值送PSW中的進位標志位CY
101 MOV bit, C 將PSW中的進位標志位CY的值送bit位地址中
102 位清0 CLR C 將進位標志位CY清0
103 位清0 CLR bit 將bit位地址內清0
104 位置1 SETB C 將進位標志位CY置1
105 SETB bit 將bit位地址內置1
106 位與 ANL C, bit 將Cy和bit位地址中的值進行與操作後,結果送Cy
107 ANL C, /bit bit位地址中的值取反後再與Cy進行與操作,結構送Cy
108 位或 ORL C, bit 將Cy和bit位地址中的值進行或操作後,結果送Cy
109 ORL C, /bit bit位地址中的值取反後再與Cy進行或操作,結構送Cy
110 位取反 CPL C 將Cy取反
111 CPL bit 將bit位地址的值取反

說明:
1)Ri, Rn指當前工作寄存器,i,n = 0 – 7,當前工作寄存器由程序狀態字寄存器PSW的2個位RS1, RS0決定

㈩ 求一MCS-51系列單片機指令表

傳送指令是指令系統中最基本,使用最多的一類指令,主要用於數據的傳送、保存以及交換等場合。

1.以累加器A為目的操作數的指令(4條)

這組指令的功能是把源操作數指定的內容送入累加器A中。

有寄存器、直接、寄存器間接和立即4種定址方式。

MOV A, Rn MOV A, data
MOV A,@Rn MOV A,#data

2.以寄存器Rn為目的的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到所選定的工作寄存器Rn中。

有寄存器、直接和立即3種定址方式。

MOV Rn, A MOV Rn,data
MOV Rn,#data

3.以直接地址為目的操作數的指令(5條)
這組指令的功能是把源操作數指定的內容送到由直接地址data所指定的片內RAM中。

有寄存器、直接、寄存器間接和立即4種定址方式。

MOV data,A MOV data,Rn
MOV data1,data2 MOV data,@Ri
MOV data,#data

4.以間接地址為目的操作數的指令(3條)
這組指令的功能是把源操作數指定的內容送到以Ri中的內容為地址的片內RAM中。

有寄存器、直接和立即3種定址方式。

MOV @Ri,A MOV @Ri,data
MOV @Ri,#data

5.查表指令(2條)
這組指令的功能是對存放於程序存儲器中的數據表格進行查找傳送。使用變址定址方式。

MOVC A,@A+DPTR MOVC A, @A+PC

6.累加器A與片外AM傳送指令(4條)
這組指令的功能為累加器A與片RAM間的相互傳送。由於MCS-51指令系統中沒有專門的輸入/輸出指令,且片外擴展的I/O口與片外RAM是統一編址的,故以下4條指令也可作為輸入/輸出指令。使用寄存器間接定址方式。

MOVX A,@DPAR MOVX @DPTR,A
MOVX A,@Ri MOVX @Ri,A

7.堆棧操作類指令(2條)
該類指令的功能是把直接定址單元的內容傳送到堆棧指針SP所指的單元中,以及把SP所指單元的內容送到直接定址單元中。

PUSH data POP data

前一條指令稱為入棧操作指令,後一條指令稱為出棧指令。由於開機復位後,(SP)=07H,故一般需重新設置SP的初值。由於壓入堆棧的第一個數必須存放在SP+1所指存儲單元,故實際的棧底為SP+1所指存儲單元。

8.交換指令(4條)
該類指令的功能是把累加器A中的內容與源操作數所指出的數據相互交換。

有寄存器、直接和寄存器間接3種定址方式。

XCH A,Rn XCH A,data
XCH A,@Ri XCHD A,@Ri

9.16位數據傳送類指令(1條)
MOV DPTR,#data

該指令的功能是把16位常數送入數據指針寄存器,使用立即定址方式。譯成機器碼時,是高位位元組在前,低位位元組在後。
MCS-51具有強大的加、減、乘、除四則算術運算指令。

1.程序狀態字PSW

MCS-51有一個程序狀態字寄存器PSW,用來保存指令執行結果的標志,供程序查訊和判別。PSW是特殊功能寄存器中的一個,其格式如下:
PSW7--既是布爾處理機的累加器C,又是進位標志CY,如果操作結果在最高位有進位輸出(加法時)或借位輸入(減法時),置位CY,否則清「0」CY。
AC--輔助進位(半進位)標志。如果操作結果的低4位有進位(加法時)或向高4位借位時(減法),置AC,否則清「0」AC,AC主要用於二-十進制數加法調整。
OV--溢出標志。如果操作結果有進位進入最高位,但最高位沒有產生進位,或者最高位產生進位而低位沒有向最高位進位,這時置位溢出標志位,否則OV清「0」。溢出標志位用於補碼運算,當有符號的數運算結果不能用8位二進制數表示時,OV將置位。
P--累加器A的奇偶標志位,如果累加器A的8位的模2和為1(奇),則P=1;否則P=0。由於P總是表示A的奇偶性,隨著A的內容變化的,所以一個值寫入PSW的P位的值不變。
RS1、RS0--指示當前使用的工作寄存器區。
F0--用戶標志位。可作為軟體標志,它的作用和內部RAM位定址區的各位相似。
PSW1--保留位,對它的操作無效。

2.加法指令

1、不帶進位加法指令
ADD A,#data ADD A,data
ADD A,@Ri ADD A,Rn

工作寄存器、內部RAM單元內容或立即數的8位無符號二進制數和累加器A中數相加,所得和存放於累加器A中,當和的第3、7位有進位時,分別將AC,CY標志位置1;否則為0。
上述指令的執行將影響標志位AC、CY、OV、P。

對於無符號數,進位標志位CY=1,表示溢出;CY=0表示無溢出。帶符號數運算的溢出取決於第6、7位中有一位產生進位,而另一位不產生進位,溢出標志位OV置「1」否則被清「0」。OV=1表示兩個正數相加,和變為負數,或兩個負數相加,和變為正數的錯誤結果。
源操作數有四種定址方式:寄存器、直接、間接和立即數。

2、帶進位加法指令:
ADDC A,#data ADDC A,data
ADDC A,@Ri ADDC A,Rn

這是四條帶進位的加法指令。將累加器A內容加當前CY標志位內容,再加無符號單位元組的數,和存於累加器A中。當運算結果第3、7位產生進位溢出時,則分別置位AC、CY和OV標志位。本指令執行將影響標志位AC、CY、OV、P。
本指令常用於多位元組加法。

3、加1指令:
INC A INC data
INC @Ri INC Rn
INC DPTR

INC指令將指定的內容加1,結果仍存放於原A或原單元中。如原值為0FFH,加1運算後將變成00H,運算結果不影響標志位。
本指令可對累加器A、工作寄存器RN、RI間址和直接定址的單元內容進行加1運算。可見MCS-51加1指令是較豐富的。
注意:當用本指令使輸出並行I/O內容加1時,用作輸出口原始值,將從輸出口的數據鎖存器中讀入,而不是從輸出口的引腳上讀入。

4、二-十進制調正指令:
DA A

若[(A0-3)>9]或[(AC)=1),則(A0-3)(A0-3)+06H

本指令是對A的BCD碼加法結果進行調正。兩個壓縮型BCD碼按二進制數相加之後,必須經本指令調正,才能得到壓縮型BCD碼的和數。

本指令的操作為:若累加器A的低4位數值大於9或者第3位向第4位產生進位,即AC輔助進位位為1,則需將A的低4位內容加6調正,以產生低4位正確的BCD碼值。如果加0調正後,低4位產生進位,且高4位均為1時,則內部加法將置位CY,反之,它並不清「0」CY標志位。
若累加器A的高4位值大於9或最高進位位CY=1,則高位4位需加6調正,以產生高4位的正確BCD碼值。同樣,在加6調正後產生最高進位,則置位CY,反之,不清「0」CY這時CY的置位,表示和數BCD碼值大於等於100。這對多位元組十進制加法有用。不影響OV標志。
由此可見,本指令是根據累加器A的原始數值和PSW的狀態,對累加器A進行加O6H、60H或66H的操作。
必須注意:本指令不能簡單地把累加器A中的16進制數交換成BCD碼,也不能用於十進制減法的調正。

3.減法指令

MCS-51在MCS-48的基礎上增加了帶借位減法指令,加強了計算機的運算功能。
1、帶借位減法指令:

SUBB A,#data SUBB A,data
SUBB A,@Ri SUBB A,Rn

帶借位減法指令SUBB,從累加器A中減去進位標志位CY和指定的變數,結果在累加器A中,若第七位有借位,則置位位CY,否則CY清0。若第3位有錯位,則置位輔助進位標志AC,否則清0 AC。若第7和第6位中有一位需借位,而另一位不借位,則置位溢出標志OV。溢出位OV用於帶符號的整數減法,它表示(OV=1)一個正數減負數結果為負數;或一個負數減正數結果為正數的錯誤結果。
源操作數允許有四種定址方式:寄存器RN,直接地址direct,間址Ri或立即數。
當在進行單位元組或多位元組減法前,不知道進位標志位CY的值,則應在減法指令前先將CY清「0」。

4.乘法指令

MUL AB

乘法指令是MCS-51新增加的,運算速度只需4個機器周期。它大大增加了MCS-51單片機的運算功能,克服了MCS-48系列單片機的不足。
本指令將累加器A和寄存器B中二個8位無符號整數進行相乘,16位乘積的低8位存於A中,高8位存於B中,如果乘積大於255(0FFH),即B的內容不為0時,則置位溢出標志位OV,否則清「0」OV。進位標志位CY總是清「0」。

5.除法指令

DIV AB

MCS-51系列單片機增加的除法指令,運算時間亦只需4個機器周期,同樣也增強了MCS-51的運算功能,使它能適用於復雜的且要求運算功能較強的控制系統。除法指令格式:
本指令將累加器A中8位無符號整數除以B寄存器中8位無符號整數,所得結果商的整數部分存於A中,整數作數部分存於寄存器B中。清「0」CY和OV標志位。當除數(B中內容)為00H時,則執行結果將為不定值,即執行結果送往A和B中的為不定值,且置位溢出標志位OV。在任何情況下,均清「0」CY。

6.減一指令

DEC A DEC data
DEC @Ri DEC Rn

DEC指令把所指的寄存器內容減1,結果仍送回原寄存器,若原來寄存器的內容為00H,則減1後將為FFH,運算結果不影響任何標志位,該組指令使用了直接、寄存器和寄存器間定址。同加1指令一樣,在第二條指令中,若直接地址是I/O口,則進行「讀-改-寫」操作。

邏輯操作類指令共有效25條,有與、或、異或、求反、左右移位、清0等邏輯操作,對應的定址方式有直接、寄存器和間接定址,該類指令的執行一般不影響PSW。

1.循環移位指令(4條)

RL A; RR A;
RLC A; RRC A;

前兩條指令的功能分別是將累加器A的內容循環左移一位,後兩條指令的功能分別是將累加器A的內容連同進位位CY一起循環左移或右移一位。

2.累加器半位元組交換指令(1條)

SWAP A;

這條指令的功能是將累加器A的高低兩半位元組交換。如(A)=56H,執行指令SWAP A 後,結果(A)=65H。

3.求反指令(1條)

CPL A;

4.清0指令(1條)

CLR A;

5.邏輯與指令(6條)

ANL A,#data; ANL data,#data
ANL A,Rn ANL A,data
ANL data,A ANL A,@Ri

這組指令的第二條和第五條指令中,若直接地址正好是I/O口,則也是「讀-改-寫」操作。

6.邏輯或指令(6條)

ORL A,#data ORL data,#data
ORL A,Rn ORL A,data
ORL data,A ORL A,@Ri

這組指令的第二條和第五條也具有「讀-改-寫」功能。

7.邏輯異或指令(6條)

XRL A,#data XRL data,#data
XRL A,Rn XRL A,data
XRL data,A XRL A,@Ri

同樣,這組指令的第二條和第五條也具有「讀-寫-改」功能。

控制轉移類指令用於控製程序的走向,故其作用區間是程序存儲器空間。利用具有16位地址的長調用、長轉移指令可對64K程序存儲器的任一地址單元進行訪問,也可用具有11位地址的絕對調用和絕對轉移指令,訪問2K位元組的空間。另外,還有在一頁范圍的短相對轉移以及許多條件轉移指令,這類指令一般不影響標志位,不面分別給予介紹。

1.無條件轉移語句(4條)

LJMP addr16 AJMP addr11 SJMP rel JMP @(A)+DPTR

上述指令的功能是當程序執行完該指令時,程序就無條件地轉移到指令所提供的地址上去。

第一條指令稱為長轉移指令,指令提供16位目標地址,將指令中第二位元組和第三位元組地址碼分別裝入PC的高8位中,所以無條件轉移的目標地址范圍是64K位元組空間。

第二條指令稱為絕對轉移指令,指令提供11位目標地址,所以,無條件轉移的目標地址范圍是從下條指令開始的2K位元組空間。

第三條指令稱為相對短轉移指令,指令控製程序無條件的轉向指定地址。該指令的rel是一個帶符號的相對偏移量,范圍為-128~+127。負數表示向後轉移,正數表示向前轉移。這條指令的優點是指令給出的是相對轉移地址,不具體指出地址值,這樣當程序地址發生變化時,只要相對地址不發生變化,該指令就不需作任何改動。在用匯編語言寫程序時,rel是一個標號,由匯編程序在匯編過程中自動計算偏移地址。在手工匯編時,可用下式計算偏移地址:

向後轉移時:rel=FEH-(源、目的地址的絕對值)

向前轉移時:rel=(源、目的地址差的絕對值)-2

第四條指令稱為散轉指令(又稱為間接轉移指令),該指令把累加器A中的8位無符號數與作為基址寄存器DPTR中的16位數據相加,所得的值送入PC作為轉移的目的地址。該指令執行後不影響累加器A和數據指針DPTR中的原內容,也不影響任何標志位。這條指令的特點是其轉移地址不是編程時確定的,而是在程序運行時動態決定的。因此,可以在DPTR中裝入多條轉移程序的首地址,而由累加器A中的內容來動態選擇該時刻應轉向那一條分支程序。

2.條件轉移指令(8條)

1.JZ rel 2.JNZ rel
3.CJNEA,data,rel 4.CJNE A,#data,rel
5. CJNE Rn,#data,rel
6.CJNE @Ri,data,rel
7.DJNZ Rn,rel
8.DJNZ data,rel

上述指令執行滿足某種特定條件的轉移,其目標在以下一條指令的起始地址為中心的256個位元組范圍內(-128~+127)。

第一條和第二條指令是判別累加器A中的內容是否為0來確定是順序執行還是轉移。

第三條至第六條是比較轉移指令,該指令通過比較前面兩個操作數的大小,如果它們的值不相等則轉移,相等則繼續執行。指令執行後要影響進位位CY,若操作數1小於操作數2,則CY=1;若操作數1大於操作數2,則CY=0。

3.調用指程序及返回指令(4條)

1.LCALL addr16 2.ACALL addr11 3.RET 4.RETI

在程序設計中,經常需要對某段程序反復執行,為了減少程序的編寫以及浪費不必要的地址空間,於是引入了主程序和子程序的概念,通常把某一段需要反復調用的程序稱為子程序,子程序的最後一條指令為返回主程序指令(RET),而對具有調用子程序功能的指令稱為調用指令。

第一條指令稱為長調用指令,其與LJMP一樣提供16位地址,可調用64K位元組范圍內的子程序。由於其為三位元組指令,所以執行時首先(PC)+3,以獲得下一條指令地址,並把此時的PC內容壓入堆棧,作為返回地址,然後把地址addr16裝入PC,轉去執行子程序。

第二條指令稱為絕對調用指令,該指令提供11位目標地址,限制在2K位元組范圍內調用,由於是雙位元組指令,所以執行時(PC)+2以獲得下一條指令的地址,然後把該地址壓入堆棧作為返回地址。其操作碼的形成與AJMP指令相同。

第三條指令稱為子程序返回指令,表示子程序結束需返回主程序,所以執行該指令時,分別從堆棧中彈出調用子程序時壓入的返回地址。

第四條指令稱為中斷返回指令,該指令的執行過程類似指令RET,但其還能恢復中斷邏輯,RETI和RET決不能互換使用。

4.空操作指令(1條)

NOP;

空操作指令除了PC加1外,CPC不作任何操作,而轉向下一條指令去執行。這條指令常用於產生一個機器周期的延時。

位操作類指令共有17條,均以位為操作對象,分別完成位傳送、位狀態控制、位邏輯運算、位條件轉移等功能,在匯編語言中,位地址的表示方式有以下4種:

直接用位地址表示:如91H。
位元組地址位數方式:如P1.0(90H)。
位名稱方式:如RS0。
用戶使用偽指令事先定義過的符號地址。
1.位數據傳送指令(2條)

MOV C,bit MOV bit,C

上述指令把源操作數指定的變數傳送到目的操作數指定的單元中。第二條指令若是對I/O口的位進行操作,則也是「讀-改-寫」操作。

2.位狀態控制指令(6條)

CLR C CLR bit CPL C
CPL bit SETB C SETB bit

上述指令的功能是分別對進位標志和直接定址進行清0、求反以及直接位地址是I/O口的某一位時,也具有「讀-改-寫」功能。

3.位邏輯運算指令(4條)

ANL C,bit ANL C,/bit
ORL C,bit ORL C/bit

上述指令的功能是將位累加器C的內容與直接位地址的內容或直接位地址內容的反進行邏輯與、邏輯或,結果仍送回C中。

4.位條件轉移指令(5)

JC rel JNC rel
JB bit,rel JNB bit,rel
JBC bit,rel

上述指令的功能分別是判別進位位C和直接位地址的內容是「1」還是「0」,以此來決定程序的走向。最後一條指令的功能是:若直接位址的內容為「1」則轉移,並且同時將該位清0,否則順序執行。這條指令若是對I/O口某一位操作,也具有「讀-改-寫」功能。

閱讀全文

與單片機指令表相關的資料

熱點內容
安卓包如何成為文檔 瀏覽:944
繼承類如何實例化python 瀏覽:767
逆戰加密武器鑰匙 瀏覽:261
php取小數後兩位 瀏覽:354
單片機編程魔法師 瀏覽:834
帝豪gs怎麼下載影視app軟體 瀏覽:511
程序員去山中泡溫泉 瀏覽:38
安卓手機怎麼恢復出廠系統版本 瀏覽:361
高三倒計時緩解壓力 瀏覽:621
一捏就變形的解壓玩具怎麼折 瀏覽:198
易融貸app借錢怎麼 瀏覽:941
單片機側重點 瀏覽:869
江蘇惠普伺服器虛擬化設計雲主機 瀏覽:649
在歐拉app好貓充電樁怎麼申請 瀏覽:451
反編譯代碼教程 瀏覽:800
linuxio阻塞 瀏覽:973
8腳單片機pic 瀏覽:821
如何看彩色塗鴉遮住的字安卓 瀏覽:688
擺渡機器人編程 瀏覽:654
軟程序員著裝 瀏覽:139