8085程式:兩個8位數的乘法
在這個程式中,我們將學習如何使用8085微處理器將兩個8位數相乘。
問題陳述
編寫8085組合語言程式,將儲存在記憶體位置中的兩個8位數相乘,並將16位結果儲存到記憶體中。
討論
8085沒有乘法運算。為了得到乘法的結果,我們應該使用重複加法的方法。
兩個8位數相乘後,可能會生成1位元組或2位元組的數字,因此我們使用兩個暫存器來儲存結果。
我們將資料儲存在8000H和8001H位置。結果儲存在8050H和8051H位置。
輸入
地址 | 資料 |
---|---|
. . . | . . . |
8000 | DC |
8001 | AC |
. . . | . . . |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 21,00, 80 | LXIH,8000H | 載入第一個運算元地址 | |
F003 | 46 | MOVB, M | 將第一個運算元儲存到B暫存器 | |
F004 | 23 | INX H | 增加HL暫存器對 | |
F005 | AF | XRA A | 清零累加器 | |
F006 | 4F | MOVC, A | 將00H儲存到C暫存器 | |
F007 | 86 | LOOP: | ADD M | 將記憶體單元與累加器相加 |
F008 | D2,0C, F0 | JNC SKIP | 當進位標誌為0時,跳過下一任務 | |
F00B | 0C | INR C | 當進位為1時,增加C暫存器 | |
F00C | 05 | SKIP: | DCR B | 減少B暫存器 |
F00D | C2,07, F0 | JNZ LOOP | 當零標誌不為1時,跳轉到迴圈 | |
F010 | 21,50, 80 | LXIH,8050H | 載入目標地址 | |
F013 | 71 | MOVM, C | 將C暫存器的內容儲存到記憶體 | |
F014 | 23 | INX H | 增加HL暫存器對 | |
F015 | 77 | MOVM, A | 將累加器的內容儲存到記憶體 | |
F016 | 76 | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
. . . | . . . |
8050 | 93 |
8051 | D0 |
. . . | . . . |
廣告