8085微處理器中兩個16位二進位制數相乘的程式
在這裡,我們將看到一個英特爾8085微處理器的程式。此程式將計算兩個16位數字的乘積。
問題陳述 -
編寫一個8085組合語言程式,將儲存在8000H - 8001H和8002H - 8003H中的兩個16位數字相乘。
討論 -
此程式從記憶體位置8000H – 8001H和8002H – 8003H獲取16位資料。32位結果儲存在位置8050H – 8053H。
這裡我們測試了兩個16位數字。結果如下。
1111H × 1111H = 01234321H
1C24H × 0752H = 00CDFF88H
輸入
第一個輸入
地址 | 資料 |
---|---|
… | … |
8000 | 11 |
8001 | 11 |
8002 | 11 |
8003 | 11 |
… | … |
第二個輸入
地址 | 資料 |
---|---|
… | … |
8000 | 24 |
8001 | 1C |
8002 | 52 |
8003 | 07 |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 31, 00, 20 | LXI SP,2000H | 初始化堆疊指標 | |
F003 | 2A, 00, 80 | LHLD 8000H | 從8000H - 8001H載入16位資料 | |
F006 | EB | XCHG | 交換HL和DE中的資料 | |
F007 | 2A, 02, 80 | LHLD 8002H | 載入第二個16位數字 | |
F00A | E5 | PUSH H | 將HL對壓入堆疊 | |
F00B | C1 | POP B | 從堆疊載入BC,使用HL對內容 | |
F00C | 21, 00, 00 | LXI H,0000H | 清空HL對 | |
F00F | 22, 52, 80 | SHLD 8052H | 將0000H儲存為結果的低2位元組 | |
F012 | 19 | LOOP | DAD D | 將第一個數字新增到HL對 |
F013 | D2, 1F, F0 | JNC NINC | 如果CY = 0,跳轉到NINC | |
F016 | E5 | PUSH H | 將HL壓入堆疊 | |
F017 | 2A, 52, 80 | LHLD 8052 | 從結果的低2位元組載入HL對 | |
F01A | 23 | INX H | 增加HL對 | |
F01B | 22, 52, 80 | SHLD 8052H | 將HL對儲存為結果的低2位元組 | |
F01E | E1 | POP H | 將堆疊內容彈出到HL對 | |
F01F | 0B | NINC | DCX B | 減少BC暫存器對 |
F020 | 78 | MOV A,B | 將B載入到A | |
F021 | B1 | ORA C | 將C與A進行或運算 | |
F022 | C2, 12, F0 | JNZ LOOP | 當Z = 0時,跳轉到LOOP | |
F025 | 22, 50, 80 | SHLD 8050H | 將HL對儲存到8050H | |
F028 | 76 | HLT | 終止程式 |
輸出
第一個輸出
地址 | 資料 |
---|---|
… | … |
8050 | 21 |
8051 | 43 |
8052 | 23 |
8053 | 01 |
… | … |
第二個輸出
地址 | 資料 |
---|---|
… | … |
8050 | 88 |
8051 | FF |
8052 | CD |
8053 | 00 |
… | … |
廣告