51 指令系统
?
目錄
?
內部 RAM 傳送指令
外部傳送指令
程序存儲器數據傳送指令
字節交換指令
算術運算指令-加法
算術運算指令-減法
算術運算指令-十進制調整指令
算術運算指令-乘除法指令
邏輯運算類指令
控制轉移類指令
布爾操作類指令
偽指令
?
?
內部 RAM 傳送指令
?
?
| 指令名稱 | 指令格式 | 功能 | 字節數 | 周期 |
| 以 A 為目的操作 數 | MOV A,RN | A <- RN | 1 | 1 |
| MOV A,direct | A <- (direct) | 2 | 1 | |
| MOV A,@Ri | A <- (Ri) | 1 | 1 | |
| MOV A,#data | A <- #data | 2 | 1 | |
| 以 RN 為止目的 操作數 | MOV RN,A | RN <- A | 1 | 1 |
| MOV RN,direct | RN <- (direct) | 2 | 2 | |
| MOV RN,#data | RN <- #data | 2 | 1 | |
| 以直接地址為目 的操作數 | MOV direct,A | (direct) ?<- A | 2 | 1 |
| MOV direct,RN | (direct) ?<- RN | 2 | 2 | |
| MOV direct, direct | (direct) ?<- (direct) | 2 | 2 | |
| MOV direct, @Ri | (direct) ?<- (Ri) | 3 | 2 | |
| MOV direct, #data | (direct) ?<- #data | 2 | 2 | |
| 以寄存儲間接地 址為目的操作數 | MOV @Ri, A | (Ri) ?<- A | 2 | 2 |
| MOV @Ri, direct | (Ri) ?<- (direct) | 2 | 2 | |
| MOV @Ri, #data | (Ri) ?<- #data | 1 | 1 | |
| 16 位數據傳輸 | MOV DPTR,#data16 | DPH <- #data(15-8) DPL <- #data(7-0) | 3 | 2 |
外部傳送指令
| 指令格式 | 功能 | 字節數 | 周期 |
| MOVX A,@RI | A <- (Ri) | 1 | 2 |
| MOVX A,@DPTR | A <- ( DPTR) | 2 | 2 |
| MOVX @RI,A | (Ri) <- ?A | 1 | 2 |
| MOVX @DPTR,A | ( DPTR) ?<- A | 2 | 2 |
程序存儲器數據傳送指令
| 指令格式 | 功能 | 字節數 | 周期 |
| MOVC A,@A+DPTR | A <- ( A+DPTR) | 1 | 2 |
| MOVC A,@A+PC | A <- ( A+PC) | 1 | 2 |
| 指令格式 | 功能 | 字節數 | 周期 |
| PUSH direct | SP <- SP+1,(SP) ?<- ?(direct) | 2 | 2 |
| POP direct | (direct) ?<- ?(SP), SP <- SP-1 | 2 | 2 |
字節交換指令
| 指令格式 | 功能 | 字節數 | 周期 |
| XCH A,RN | A <--> RN | 1 | 1 |
| XCH A, direct | A <--> ( direct) | 1 | 1 |
| XCH A,@RI | A <--> ( RI) | 1 | 1 |
| SWAP A | A(0-3) <--> A(4-7) | 1 | 1 |
| XCHD A,@RI | A(0-3) <--> (RI)(0-3) | 1 | 1 |
算術運算指令-加法
| 指令名稱 | 指令格式 | 功能 | 字節數 | 周期 |
| 不帶進位加法 | ADD A,RN | A <- A+RN | 1 | 1 |
| ADD A,@RI | A <- A+(RI) | 1 | 1 | |
| ADD A, direct | A <- A+( direct) | 2 | 1 | |
| ADD A, #data | A <- A+data | 2 | 1 | |
| 帶進位加法 | ADDC A, RN | A <- A+RN+CY | 1 | 1 |
| ADDC A, @RI | A <- A+(RI) +CY | 1 | 1 | |
| ADDC A, direct | A <- A+( direct) +CY | 2 | 1 | |
| ADDC A, #data | A <- A+data+CY | 2 | 1 |
算術運算指令-減法
| 指令格式 | 功能 | 字節數 | 周期 |
| SUBB A,RN | A <- A-RN-CY | 1 | 1 |
| SUBB A,@RI | A <- A-(RI) -CY | 2 | 1 |
| SUBB A, direct | A <- A-( direct) -CY | 1 | 1 |
| SUBB A, #data | A <- A-data-CY | 2 | 1 |
| 指令名稱 | 指令格式 | 功能 | 字節數 | 周期 |
| 加 1 ?指令 | INC A | A <- A+1 | 1 | 1 |
| INC RN | RN ?<- ?RN +1 | 1 | 1 | |
| INC @RI | (RI) <- (RI)+1 | 1 | 1 | |
| INC direct | (direct) <- ( direct)+1 | 2 | 1 | |
| INC DPTR | DPTR ?<- ?DPTR +1 | 1 | 2 | |
| 減 1 指令 | DEC A | A <- A-1 | 1 | 1 |
| DEC RN | RN ?<- ?RN -1 | 1 | 1 | |
| DEC @RI | (RI) <- (RI)-1 | 1 | 1 | |
| DEC direct | (direct) <- ( direct)-1 | 2 | ??1 |
算術運算指令-十進制調整指令
| 指令格式 | 功能 | 字節數 | 周期 |
| DA A | 將 A 中內容轉換為 BCD 碼 | 1 | 1 |
方法:將累加器 A 中的低半字節的值大于 9 或 AC=1 時低半字節加 6,當高半字節大于 9 或
C=1 時,高半字節加 6,
算術運算指令-乘除法指令
| 指令格式 | 功能 | 字節數 | 周期 |
| MUL AB | B A <- A*B | 1 | 4 |
| DIV AB | A <- A/B,(B 放余數) | 1 | 4 |
邏輯運算類指令
| 指令名稱 | 指令格式 | 功能 | 字節數 | 周期 |
| 邏輯與指令 | ANL A,RN | A <- A^RN | 1 | 1 |
| ANL A,@RI | A <- A^(RI) | 1 | 1 | |
| ANL A, direct | A <- A^( direct) | 2 | 1 | |
| ANL A,# data | A <- A^ data | 2 | 1 | |
| ANL direct, # data | ( direct) <- ?( direct)^RN | 2 | 1 |
| ? | ANL direct,A | ( direct) <- ?( direct)^A | 3 | 2 |
| 邏輯或指令 | ORL A,RN | A <- AVRN | 1 | 1 |
| ORL A,@RI | A <- AV(RI) | 1 | 1 | |
| ORL A, direct | A <- AV ( direct) | 2 | 1 | |
| ORL A,# data | A <- AV data | 2 | 1 | |
| ORL direct, # data | ( direct) <- ?( direct)VRN | 2 | 1 | |
| ORL direct,A | ( direct) <- ?( direct)VA | 3 | 2 | |
| 邏輯異或指令 | XOR A,RN | A <- A※RN | 1 | 1 |
| XOR A,@RI | A <- AV※(RI) | 1 | 1 | |
| XOR A, direct | A <- A※( direct) | 2 | 1 | |
| XOR A,# data | A <- A※ data | 2 | 1 | |
| XOR direct, # data | ( direct) <- ?( direct) ?※RN | 2 | 1 | |
| XOR direct,A | ( direct) <- ?( direct) ?※A | 3 | 2 | |
| 累加器 A 清 0 ?與 取反 | CPL A | A <- ~A | 1 | 1 |
| CLR A | A <- 0 | 1 | 1 | |
| 空操作 | NOP | 空操作 | 1 | 1 |
| 不帶進位循環移 位指令 | RL A | An+1?<- An(n=0--6),A0?<- A7 | 1 | 1 |
| RR A | An ?<- ?An+1 (n=0--6), A7?<- ?A0 | 1 | 1 | |
| 帶進位循環移位 指令 | RLC A | An+1?<- An(n=0--6), CY <- ?A7, A0?<- CY | 1 | 1 |
| RRC A | An ?<- ?An+1 (n=0--6), A7?<- ?CY, CY ?<- ?A0 | 1 | 1 |
控制轉移類指令
| 指令名稱 | 指令格式 | 功能 | 字節數 | 周期 |
| 無條件轉移類指 ?<- | LJMP addr16 | PC <- PC+3,PC <- ?addr16 | 3 | 2 |
| AJMP addr11 | PC <- PC+3,PC <- ?addr11 | 2 | 2 | |
| SJMP rel | PC <- PC+2+ rel | 2 | 2 | |
| JMP @A+DPTR | PC <- (A+DPTR) | 1 | 2 | |
| 累加器判 0 轉發 指令 | JZ rel | 若 A=0 則 PC <- PC+2+ rel 若 A≠0 則 PC <- PC+2 | 2 | 2 |
| JNZ rel | 若 A≠0 則 PC <- PC+2+ rel 若 A=0 則 PC <- PC+2 | 2 | 2 | |
| 比較轉移指令 | CJNE A,direct, rel | 若? A ?≠ (direct) 則 PC <- PC+3+ rel 若??? A=(direct)?? 則 PC <- PC+3 若? A ?≥ (direct), 則 CY <- 0 | 3 | 2 |
| CJNE A,#data, rel | 若 A≠data 則 PC <- PC+3+ rel | 3 | 2 |
| ? | ? | 若 A= data 則 PC <- PC+3 若 A≥data,則 CY <- 0 | ? | ? |
| CJNE RN,#data, rel | 若?? RN? ?≠ data 則 PC <- PC+3+ rel 若 RN = data 則 PC <- PC+3 若 RN≥data,則 CY <- 0 | 3 | 2 | |
| CJNE @Ri,#data, rel | 若 (Ri)?? ?≠ data??????????????????????????????????????????? 則 PC <- PC+3+ rel 若(Ri)= data 則 PC <- PC+3 若(Ri)≥data,則 CY <- 0 | 3 | 2 | |
| 減 1 不為 0 ?轉移 指令 | DJNZ RN,rel | 若? RN-1? ?≠ 0 , 則 PC <- PC+2+ rel 若 RN-1=0,則 PC <- PC+2 | 3 | 2 |
| DJNZ direct,rel | 若 (direct)-1 ≠ 0 ,則 PC <- PC+2+ rel 若 (direct)-1=0 , 則 PC <- PC+2 | 3 | 2 | |
| 子程序調用和返 回指令 | LCALL addr16 | PC <- PC+3,PC ?值大壓棧, PC <- ?addr16 | 3 | 2 |
| ACALL addr11 | PC <- PC+1,PC ?值大壓棧, PC10--0?<- ?addr11 | 2 | 2 | |
| RET | 程序返回 | 1 | 2 | |
| RETI | 中斷返回 | 1 | 2 |
布爾操作類指令
| 指令名稱 | 指令格式 | 功能 | 字節數 | 周期 |
| 位數據傳送指令 | MOV C,bit | CY <- ?bit | 2 | 1 |
| MOV bit,c | bit ?<- ?CY | 2 | 1 | |
| 位狀態控制指令 | CLR C | CY <- 0 | 1 | 1 |
| CLR bit | bit ?<- ?0 | 2 | 1 | |
| SETB C | CY <- 1 | 1 | 1 | |
| SETB bit | bit ?<- ?1 | 2 | 1 | |
| 位邏輯操作指令 | ANL C,bit | CY <- ?CY∧bit | 2 | 2 |
| ANL C,/bit | CY <- ?CY∧~bit | 2 | 2 | |
| ORL C,bit | CY <- ?CY∨bit | 2 | 2 | |
| ORL C,/bit | CY <- ?CY∨~bit | 2 | 2 | |
| CPL C | CY <- ?~CY | 1 | 2 | |
| CPL bit | bit ?<- ?~ bit | 2 | 2 | |
| 位條件轉移指令 | JC rel | 若 CY=0,則轉移 PC <- PC+2+ rel 否則 PC <- PC+2 | 2 | 2 |
| JNC rel | 若 CY≠0,則轉移 PC <- PC+2+ rel | 2 | 2 |
| ? | ? | 否則 PC <- PC+2 | ? | ? |
| JB bit, rel | 若 bit =1,則轉移 PC <- PC+2+ rel 否則 PC <- PC+2 | 3 | 2 | |
| JNB bit, rel | 若 bit≠1,則轉移 PC <- PC+2+ rel 否則 PC <- PC+2 | 3 | 2 | |
| JNC bit, rel | 若 bit =1,則轉移 PC <- PC+2+ rel, 且 bit <- 0, 否則 PC <- PC+2 | 3 | 2 |
偽指令
| 指令格式 | 功能 |
| ORG XXXXH | 指定本條指令下面的程序或表格數據的起始地址 |
| END | 指示源程序到此結束 |
| EQU | 把“項”賦給“字符名稱” |
| DATA | 數據地址賦值命 <- |
| DB XXH,XXH.. | 定義字節指令 |
| DW XXXXH,XXXXH,.. | 定義字指令 |
| DS | 預留存儲空間指令 |
| BIT | 位地址符指令 |
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: C#调用C/C++ DLL的相关说明
- 下一篇: Beyond Compare 3 许可证