8085程式計算最小公倍數
現在讓我們來看一個Intel 8085微處理器的程式。這個程式將找到兩個8位數的最小公倍數。
問題陳述
編寫8085組合語言程式,找出儲存在8000H和8001H位置的兩個8位數的最小公倍數。
討論
在這個程式中,我們從8000H和8001H讀取資料。透過載入數字,我們將其儲存在C暫存器中,並清除B暫存器。第二個數字載入到累加器中。將DE設定為BC暫存器的二進位制補碼。此DE用於從HL對中減去BC。
方法是這樣的:假設數字是25和15。當我們將第一個數字除以第二個數字時,如果沒有餘數,則第一個數字是最小公倍數。但對於這種情況,存在餘數。然後我們將檢查25的下一個倍數以檢查可除性。當餘數變為0時,程式終止,結果被儲存。
輸入
第一個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 03 |
| 8001 | 07 |
| . . . | . . . |
第二個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 23 |
| 8001 | 07 |
| . . . | . . . |
流程圖

程式
| 地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
|---|---|---|---|---|
| F000 | 21, 00, 80 | LXI H, 8000H | 指向8000H以獲取第一個數字 | |
| F003 | 4E | MOV C, M | 將記憶體單元載入到C | |
| F004 | 06, 00 | MVI B, 00H | 清除B暫存器 | |
| F006 | 23 | INX H | 指向下一個位置 | |
| F007 | 7E | MOV A, M | 將第二個數字載入到累加器 | |
| F008 | 2F | CMA | 取反累加器 | |
| F009 | 5F | MOV E, A | 將A的反碼載入到E | |
| F00A | 16, FF | MVI D, FFH | 載入00H的反碼 | |
| F00C | 13 | INX D | 增加DE暫存器對 | |
| F00D | 21, 00, 00 | LXI H, 0000H | 將0000H載入到HL對 | |
| F010 | 09 | NEXT | DAD B | 將BC與HL相加 |
| F011 | 22, 50, 80 | SHLD 8050H | 將HL內容儲存到8050H | |
| F014 | 19 | LOOP | DAD D | 將DE與HL相加 |
| F015 | D2, 20, F0 | JNC SKIP | 當CY = 0時,跳轉到SKIP | |
| F018 | 7C | MOV A, H | 將H的內容獲取到A | |
| F019 | B5 | ORA L | 將L與A進行或運算 | |
| F01A | CA, 26, F0 | JZ EXIT | 當HL為0000時,跳轉到EXIT | |
| F01D | C3, 14, F0 | JMP LOOP | 跳轉到Loop | |
| F020 | 21, 50, 80 | SKIP | LHLD 8050H | 從8050H載入HL |
| F023 | C3, 10, F0 | JMP NEXT | 跳轉到NEXT | |
| F026 | 2A, 50, 80 | EXIT | LHLD 8050H | 將HL對儲存為最小公倍數 |
| F029 | 76 | HLT | 終止程式 |
輸出
第一個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 15 |
| 8051 | 00 |
| . . . | . . . |
第二個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 3B |
| 8051 | 01 |
| . . . | . . . |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP