8051程式分支組
在 8051 微控制器中,邏輯組下有 17 條不同的指令。總共有 46 個操作碼。這些指令不影響標誌位,但 CJNE 影響 CY 標誌位。在這些指令中,使用了 11 位地址和 16 位地址。
在下表中,我們將看到助記符、長度、機器週期執行時間、操作碼數量等。
| 助記符 | 位元組數 | 執行時間 | 操作碼數量 |
|---|---|---|---|
| ACALL addr11 | 2 | 2 | 8 |
| LCALL addr16 | 3 | 2 | 1 |
| RET | 1 | 2 | 1 |
| RETI | 1 | 2 | 1 |
| AJMP addr11 | 2 | 2 | 8 |
| LJMP addr16 | 3 | 2 | 1 |
| SJMP rel | 2 | 2 | 1 |
| JMP @A+DPTR | 1 | 2 | 1 |
| JZ rel | 2 | 2 | 1 |
| JNZ rel | 2 | 2 | 1 |
| CJNE A, a8, rel | 3 | 2 | 1 |
| CJNE A, #d8, rel | 3 | 2 | 1 |
| CJNE Rn, #d8, rel | 3 | 2 | 8 |
| CJNE @Ri, #d8, rel | 3 | 2 | 2 |
| DJNE Rn, rel | 2 | 2 | 8 |
| DJNZ a8, rel | 3 | 2 | 1 |
| NOP | 1 | 1 | 1 |
示例
| 序號 | 指令和描述 |
|---|---|
| 1 | LJMP LABEL 這是一個 LJMP addr16 的示例。LJMP 代表長跳轉。它可以跳轉到符號位置標籤。地址由彙編器根據標籤的值生成。使用此指令,我們可以跳轉到程式中的任何位置。 |
| 2 | ACALL SUBR 這是 ACALLa ddr11 型別的指令。ACALL 是絕對呼叫。使用此指令,它從符號位置 SUBR 呼叫子程式。在呼叫之前,它將程式計數器的值儲存在堆疊頂部。 |
| 3 | SJMP LABEL 此指令類似於 SJMP rel。SJMP 表示短跳轉。這裡 LABEL 是由彙編器生成的 8 位地址。使用此指令,我們可以停止 8051 中的程式。 |
| 4 | JZ LABEL 此指令類似於 JZ rel 指令。當 A 暫存器的值為 00h 時,它才會跳轉到 LABEL,否則將被忽略。彙編器從指令生成 8 位有符號位移。 |
| 5 | RET 這是返回指令。當它執行時,程式計數器的下一個地址從堆疊頂部彈出,並且 SP 的值減少 2。 |
| 6 | RETI 這是中斷返回。它也類似於 RET 指令。但它也恢復中斷邏輯。因此,在恢復後,它可以在相同的優先順序級別接受其他中斷。 |
| 7 | DJNZ 80H, LABEL 這類似於 DJNZ a8, rel。它表示遞減並如果非零則跳轉。因此,埠 P0 的內容遞減 1。當遞減後值不為 00H 時,將發生分支指令。這裡 LABEL 是一個 8 位有符號數。 |
| 8 | CJNE R5, #90H, LABEL 這類似於指令 CJNE Rn, #d8, rel。CJNE 代表比較並如果非等則跳轉。因此,它是比較和跳轉的組合指令。這裡 R5 的內容與 90H 進行比較。當值不相同時,它會跳轉到標籤。LABEL 是 8 位有符號數。 |
在執行 ACALL 或 AJMP 期間,我們可以認為程式記憶體被劃分為 2K 位元組塊。從 16 位地址中,前五位是固定的。此外,可以將 2K 記憶體塊劃分為 256 位元組頁面。因此,我們需要 3 位來選擇頁面。
有三種無條件跳轉:SJMP、LJMP 和 AJMP,但有兩種無條件呼叫指令 ACALL、LCALL。沒有 SCALL。
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP