51匯編語言指令集
2 符號定義表
符號 |
含義 |
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),特殊功能寄存器的直接地址的位 |
2 指令介紹
指令 |
字節 |
周期 |
動作說明 |
算數運算指令 | |||
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,0data |
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 |
無動作 |
謝謝!
好
恩,的確,很有用,非常感謝
恩,的確,很有用,非常感謝
我這有你給個地址給我我發給你!
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |