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