8085微處理器程式執行及結果檢查
我們將學習如何使用8085在8085套件中編寫程式。我們還將學習如何除錯程式並在成功執行後檢查結果。
讓我們看看8085套件的典型鍵盤結構。(不同製造商的不同套件,其鍵盤樣式可能會有所不同)

下表將顯示不同控制鍵的功能。有16個字母數字鍵(0-9,A-F)提供資料和地址:
| 按鍵 | 功能 |
|---|---|
| RESET | 重置系統 |
| VCT INT | 向量中斷。它透過鍵盤產生硬體中斷RST 7.5 |
| SHIFT | 為所有按鍵提供二級命令 |
| GO | 執行程式 |
| SI | 單步執行模式 |
| EXREG | 檢查暫存器。它允許檢視不同暫存器的值。 |
| PRE | 指向之前的記憶體地址 |
| DEL | 刪除程式的一部分 |
| INS | 插入程式的一部分 |
| B.M | 塊移動。這有助於將記憶體塊移動到任何RAM區域 |
| FILL | 用常數值填充某個RAM區域 |
| REL | 重新分配為某個記憶體區域編寫的程式。 |
| INS DATA | 將一個或多個數據插入記憶體 |
| STRING | 查詢位於特定地址/地址的資料字串 |
| MEMC | 比較兩個記憶體塊是否相等 |
現在我們將看到一個示例程式,其中十六個位元組的資料儲存在8050H到805FH的記憶體位置中。將整個資料塊傳輸到從8070H開始的新記憶體位置。
程式
| T狀態 | 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|---|
| 10 | 8000 | 21, 50, 80 | START | LXI H, 8050H | 將HL設定為源記憶體指標 |
| 10 | 8003 | 11, 70, 80 | LXI D, 8070H | 為目標地址設定DE | |
| 7 | 8006 | 06, 10 | MVI B,10H | 將B設定為計數16個位元組 | |
| 4 | 8008 | 7E | NEXT | MOV A,M | 從源記憶體獲取資料位元組 |
| 7 | 8009 | 12 | STAX D | 將資料位元組儲存到目標位置 | |
| 6 | 800A | 23 | INX H | 將HL指向下一個源位置 | |
| 6 | 800B | 13 | INX D | 將DE指向下一個目標位置 | |
| 4 | 800C | 05 | DCR B | 遞減計數器 | |
| 10 | 800D | C2, 08, 80 | JNZ NEXT | 如果計數器不為0,則轉到傳輸下一個位元組 | |
| 5 | 8010 | 76 | HLT | 停止 | |
| | 總共17個位元組 |
總T狀態 = 外迴圈T狀態 + 內迴圈T狀態
= (10+10+7+5) + ((4+7+6+6+4+10) x 16 - 3)
= 32 + (37 x 16 – 3)
= 32 + 589
= 621
8085套件的除錯選項。
| 命令 | 功能/格式 |
|---|---|
| 檢查/修改記憶體 | 顯示/修改記憶體位置的內容 EXAM MEM <address> NEXT [[<data>] NEXT/PREV] EXEC |
| 檢查/修改暫存器 | 顯示/修改8085暫存器內容。 EXAM REG <reg key> [[<data>] NEXT]* EXEC |
| 單步執行 | 執行單個使用者程式指令 SINGLE STEP <start address> NEXT [[<start address>] NEXT]* EXEC |
| Go | 將控制權從監視器轉移到使用者程式 GO <address> EXEC |
| 塊移動/塊複製 | 將資料塊從一部分移動/複製到另一部分 BLK MOVE <start address> NEXT <end address> NEXT <destination address> EXEC |
| 插入 | 在使用者程式中插入一個或多個指令 INSERT [<low limit>] NEXT [<high limit>] NEXT <low insert address> NEXT <number of bytes> NEXT [[<data>] NEXT]* EXEC |
| 刪除 | 刪除使用者程式中的一個或多個指令 DELETE [<low limit>] NEXT [<high limit>] NEXT <low delete address> NEXT <high delete address> EXEC |
塊移動操作演示
記憶體地址的初始狀態
| 源地址 | 值 | 目標地址 | 值 |
|---|---|---|---|
| 8000 | 00H | 8100 | XXH |
| 8001 | 11H | 8101 | XXH |
| 8002 | 22H | 8102 | XXH |
| 8003 | 33H | 8103 | XXH |
| 8004 | 44H | 8104 | XXH |
| 8005 | 55H | 8105 | XXH |
| 8006 | 66H | 8106 | XXH |
| 8007 | 77H | 8107 | XXH |
| 8008 | 88H | 8108 | XXH |
| 8009 | 99H | 8109 | XXH |
按鍵:
<塊移動>,8000H <下一步>,8009H <下一步>,8100H <執行>
記憶體地址的最終狀態
| 源地址 | 值 | 目標地址 | 值 |
|---|---|---|---|
| 8000 | 00H | 8100 | 00H |
| 8001 | 11H | 8101 | 11H |
| 8002 | 22H | 8102 | 22H |
| 8003 | 33H | 8103 | 33H |
| 8004 | 44H | 8104 | 44H |
| 8005 | 55H | 8105 | 55H |
| 8006 | 66H | 8106 | 66H |
| 8007 | 77H | 8107 | 77H |
| 8008 | 88H | 8108 | 88H |
| 8009 | 99H | 8109 | 99H |
塊插入和塊刪除操作演示
記憶體地址的初始狀態
| 源地址 | 值 |
|---|---|
| 8000 | 00H |
| 8001 | 11H |
| 8002 | 22H |
| 8003 | 33H |
| 8004 | 44H |
| 8005 | 55H |
| 8006 | 66H |
| 8007 | 77H |
| 8008 | 88H |
| 8009 | 99H |
按鍵:
<插入> 8000H <下一步>,8009H <下一步>,8005H <下一步>,5 <下一步>,AAH <插入>,BBH <下一步>,CCH <下一步>,DDH <下一步>,EEH <下一步>
<刪除>,8000H <下一步>,800EH <下一步>,8005H <下一步>,8009H <執行>
記憶體地址的最終狀態
| 源地址 | 值 |
|---|---|
| 8000 | 00H |
| 8001 | 11H |
| 8002 | 22H |
| 8003 | 33H |
| 8004 | 44H |
| 8005 | AAH |
| 8006 | BBH |
| 8007 | CCH |
| 8008 | DDH |
| 8009 | EEH |
| 800A | 55H |
| 800B | 66H |
| 800C | 77H |
| 800D | 88H |
| 800E | 99H |
這裡我們使用的是帶有8000H到FFFFH地址對映的32K記憶體空間62256(U3)。為了結束程式,我們可以使用RST 5 (EFH)返回到監視器程式,而不是使用HLT (76H)指令。因為它可以幫助我們除錯程式是否導致停止和掛起。
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP