8085程式:查詢兩個二進位制模式之間的位差異。
我們將學習如何使用8085查詢兩個二進位制模式的位差異。
問題陳述
兩個二進位制模式儲存在8030H和8031H位置。將它們載入到暫存器A和B中。找出位不同的位置,並將這些位置編號從8050H開始儲存到記憶體中。(在A為0且B為1的位置,位不同)
討論
為了解決這個問題,我們將數字放入A和B中。然後用08H初始化C作為計數器,暫存器L將跟蹤A為1且B為0的位位置。透過旋轉數字並透過進位標誌,我們可以檢查這些條件。假設我們放入B5H(1011 0101)和E6H(1110 0110),那麼我們可以看到D1和D6位置不同。所以我們將1和6儲存到記憶體中。
輸入
| 地址 | 資料 |
|---|---|
| … | … |
| 8030 | B5 |
| 8031 | E6 |
| … | … |
流程圖

程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| 8000 | 21, 30, 80 | START | LXI H,8030H | 初始化指向輸入緩衝區的指標 |
| 8003 | 11, 50, 80 | | LXI D,8050H | 初始化指向輸出緩衝區的指標 |
| 8006 | 7E | | MOV A, M | 從輸入緩衝區讀取資料並存儲到暫存器A和B |
| 8007 | 23 | | INX H | |
| 8008 | 46 | | MOV B, M | |
| 8009 | 0E, 08 | | MVI C, 08H | 將計數器初始化為8 |
| 800B | 2E, 00 | | MVI L, 00H | 使用暫存器L跟蹤位位置 |
| 800D | 1F | LOOP | RAR | 將累加器右移到進位標誌 |
| 800E | DA, 1C, 80 | | JC CHECK | 檢查D7位是開還是關 |
| 8011 | 67 | | MOV H, A | 暫存器H臨時儲存暫存器A的內容 |
| 8012 | 78 | | MOV A, B | 暫存器B的D7位被放入進位標誌 |
| 8013 | 1F | | RAR | |
| 8014 | 47 | | MOV B, A | 將A複製到B |
| 8015 | 7C | DCRM | MOV A, H | 將H複製到A |
| 8016 | 2C | | INR L | 將位位置加1 |
| 8017 | 0D | | DCR C | 遞減計數器,直到達到0 |
| 8018 | C2, 0D, 80 | | JNZ LOOP | |
| 801B | 76 | | HLT | 終止程式 |
| 801C | 67 | CHECK | MOV H, A | 暫存器H臨時儲存暫存器A的內容 |
| 801D | 78 | | MOV A, B | 暫存器B的D7位被放入進位標誌 |
| 801E | 1F | | RAR | |
| 801F | D2, 26, 80 | | JNC WRITE | 檢查進位標誌是否設定 |
| 8022 | 47 | | MOV B, A | 將A複製到B |
| 8023 | C3, 15, 80 | | JMP DCRM | 無條件跳轉 |
| 8026 | 47 | WRITE | MOV B, A | 匹配的位模式位置被 寫入輸出緩衝區 |
| 8027 | 7D | | MOV A, L | |
| 8028 | 12 | | STAX D | |
| 8029 | 13 | | INX D | 轉到下一個位置 |
| 802A | C3, 15, 80 | | JMP DCRM | 無條件跳轉 |
輸出
| 地址 | 資料 |
|---|---|
| … | … |
| 8050 | 01 |
| 8051 | 06 |
| … | … |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP