8085程式用於乘以兩個兩位BCD數
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將找到兩個BCD數的乘積結果。
問題陳述
編寫8085組合語言程式以查詢兩個BCD數的乘積。這些數字儲存在8000H和8001H位置。
討論
在這個程式中,資料是從8000H和8001H獲取的。結果儲存在8050H和8051H位置。
眾所周知,8085沒有乘法指令,因此我們必須使用重複加法方法。在這個過程中,在每次加法之後,我們都會調整累加器值以獲得十進位制等價物。當存在進位時,我們會增加MS-Byte的值。 我們可以使用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對儲存在8050和8051位置 | |
| F027 | 76 | HLT | 終止程式 |
輸出
第一個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 40 |
| 8051 | 02 |
| . . . | . . . |
第二個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 81 |
| 8051 | 00 |
. . . | . . . |
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP