8085微處理器中兩個兩位BCD數的乘法程式
在這裡,我們將看到一個8085微處理器程式,該程式將找到兩個BCD數的乘法結果。
問題陳述−
編寫一個8085組合語言程式來查詢兩個BCD數的乘積。這些數字儲存在8000H和8001H位置。
討論−
在這個程式中,資料從8000H和8001H獲取。結果儲存在8050H和8051H位置。
眾所周知,8085沒有乘法指令,因此我們必須使用重複加法的方法。在這個過程中,在每次加法之後,我們都會調整累加器的值以獲得十進位制等效值。當有進位時,我們就會增加MSB(最高有效位)的值。我們可以使用INR指令來遞增,但這裡使用ADI 01H。INR指令不會影響CY標誌,因此我們需要ADI指令。
輸入
第一個輸入
| 地址 | 資料 |
|---|---|
| … | … |
| 8000 | 12 |
| 8001 | 20 |
| … | … |
第二個輸入
| 地址 | 資料 |
|---|---|
| … | … |
| 8000 | 27 |
| 8001 | 03 |
| … | … |
流程圖

程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| F000 | 21, 00, 80 | LXI H,8000H | 載入第一個運算元地址 | |
| F003 | 46 | MOV B,M | 將第一個運算元儲存到B暫存器 | |
| F004 | 23 | INX H | 增加HL暫存器對 | |
| F005 | 4E | MOV C,M | 將第二個運算元儲存到C暫存器 | |
| F006 | 1E, 00 | MVI E, 00H | 清除E暫存器 | |
| F008 | 63 | MOV H,E | 清除H暫存器 | |
| F009 | 7B | MOV A,E | 清除A暫存器 | |
| F00A | B9 | CMP C | 比較C和A | |
| F00B | CA, 23, F0 | JZ DONE | 當Z=0時,跳轉到DONE | |
| F00E | 80 | LOOP: | ADD B | 將B加到A |
| F00F | 27 | DAA | 十進位制調整 | |
| F010 | 57 | MOV D,A | 將A儲存到D | |
| F011 | D2, 19, F0 | JNC NINC | 跳轉到NINC | |
| F014 | 7C | MOV A,H | 將H儲存到A | |
| F015 | C6, 01 | ADI 01H | 將A增加1 | |
| F017 | 27 | DAA | 十進位制調整 | |
| F018 | 67 | MOV H,A | 將A恢復到H | |
| F019 | 7B | NINC: | MOV A,E | 將E載入到A |
| F01A | C6, 01 | ADI 01H | 將A增加1 | |
| F01C | 27 | DAA | 十進位制調整 | |
| F01D | 5F | MOV E,A | 將A恢復到E | |
| F01E | B9 | CMP C | 比較C和A | |
| F01F | 7A | MOV A,D | 將D載入到A | |
| F020 | C2, 0E, F0 | JNZ LOOP | 跳轉到LOOP | |
| F023 | 6F | DONE: | MOV L,A | 將A載入到L |
| F024 | 22, 50, 80 | SHLD 8050H | 將HL暫存器對儲存到8050H和8051H位置 | |
| F027 | 76 | HLT | 終止程式 |
輸出
第一個輸出
| 地址 | 資料 |
|---|---|
| … | … |
| 8050 | 40 |
| 8051 | 02 |
| … | … |
第二個輸出
| 地址 | 資料 |
|---|---|
| … | … |
| 8050 | 81 |
| 8051 | 00 |
| … | … |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP