8085程式:加兩個多位元組BCD數
現在讓我們來看一個Intel 8085微處理器的程式。這個程式主要用於新增多位BCD(二進位制編碼的十進位制)數。
問題陳述
編寫8085組合語言程式,以新增兩個多位元組BCD(二進位制編碼的十進位制)數。
討論
我們使用4位元組BCD數。這些數字儲存在記憶體位置8501H和8505H中。一個額外的資訊儲存在位置8500H。在這裡,我們儲存位元組計數。結果儲存在位置85F0H。
HL對儲存第一個運算元的位元組地址,DE儲存第二個運算元的位元組地址。C儲存位元組計數。我們使用堆疊來儲存結果的中間位元組。在加法運算完成後,我們從堆疊中彈出並存儲到目標位置。
輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8500 | 04 |
| 8501 | 19 |
| 8502 | 68 |
| 8503 | 12 |
| 8504 | 85 |
| 8505 | 88 |
| 8506 | 25 |
| 8507 | 17 |
| 8508 | 20 |
| . . . | . . . |
流程圖

程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 | |
|---|---|---|---|---|---|
| F000 | 31,00, 20 | LXI SP, 2000H | 初始化堆疊指標 | ||
| F003 | 21,00, 85 | LXI H,8500H | 載入記憶體地址以獲取位元組計數 | ||
| F006 | 4E | MOV C,M | 將記憶體內容載入到C暫存器 | ||
| F007 | 06,00 | MVI B,00H | 清除B暫存器 | ||
| F009 | 21,01, 85 | LXI H, 8501H | 載入第一個引數地址 | ||
| F00C | 11,05, 85 | LXI D, 8505H | 載入第二個引數地址 | ||
| F00F | 1A | LOOP | LDAX D | 將DE與第二個運算元地址載入 | |
| F010 | 8E | ADC M | 將記憶體內容和進位與累加器相加 | ||
| F011 | 27 | DAA | 對累加器內容進行十進位制調整 | ||
| F012 | F5 | PUSH PSW | 將累加器內容儲存到堆疊中 | ||
| F013 | 4 | INR B | 將B增加1後壓入堆疊 | ||
| F014 | 23 | INX H | 增加HL對以指向下一個地址 | ||
| F015 | 13 | INX D | 增加DE對以指向下一個地址 | ||
| F016 | 0D | DCR C | 減少C,直到所有位元組都未用盡 | ||
| F017 | C2,0F, F0 | JNZ LOOP | 當位元組未被考慮時,再次迴圈 | ||
| F01A | D2,21, F0 | JNC SKIP | 當進位=0時,跳轉到儲存 | ||
| F01D | 3E,01 | MVIA, 01H | 當進位=1時,將其壓入堆疊 | ||
| F01F | F5 | PUSH PSW | 將累加器內容儲存到堆疊中 | ||
| F020 | 04 | INR B | 將B增加1後壓入堆疊 | ||
| F021 | 21,F0, 85 | SKIP | LXIH, 85F0H | 載入目標指標 | |
| F024 | F1 | L1 | POP PSW | 彈出AF以從堆疊中取回位元組 | |
| F025 | 77 | MOV M, A | 將累加器資料儲存在HL指向的記憶體位置 | ||
| F026 | 23 | INX H | 增加HL對以指向下一個地址 | ||
| F027 | 05 | DCR B | 減少B | ||
| F028 | C2,24, F0 | JNZ L1 | 轉到L1以儲存堆疊內容 | ||
| F02B | 76 | HLT | 終止程式 | ||
輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 85F0 | 01 |
| 85F1 | 05 |
| 85F2 | 29 |
| 85F3 | 94 |
| 85F4 | 07 |
| . . . | . . . |
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP