8085程式用於乘以兩個16位二進位制數
現在讓我們來看一個 Intel 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 |
| . . . | . . . |
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP