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 <地址> NEXT [[<資料>] NEXT/PREV] EXEC |
| 檢查/修改暫存器 | 顯示/修改8085暫存器內容。EXAM REG <暫存器鍵> [[<資料>] NEXT]* EXEC |
| 單步執行 | 執行單個使用者程式指令 SINGLE STEP <起始地址> NEXT [[<起始地址>]NEXT]* EXEC |
| GO | 將控制權從監視器轉移到使用者程式 GO <地址> EXEC |
| 塊移動/塊複製 | 將資料塊從一個部分移動/複製到另一個部分 BLK MOVE <起始地址> NEXT <結束地址> NEXT <目標地址> EXEC |
| 插入 | 在使用者程式中插入一個或多個指令 INSERT [<下限>] NEXT [<上限>] NEXT <插入起始地址> NEXT <位元組數> NEXT [[<資料>] NEXT]* EXEC |
| 刪除 | 刪除使用者程式中的一個或多個指令 DELETE [<下限>] NEXT [<上限>] NEXT <刪除起始地址> NEXT <刪除結束地址> 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 at U3。為了結束程式,我們可以使用RST 5(EFH)返回到監視器程式,而不是使用HLT (76H)指令。因為它可以幫助我們除錯程式是否導致停止和掛起。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP