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 |
. . . | . . . |
廣告