基於X內容對兩個BCD數進行運算的8085程式
現在讓我們來看一個Intel 8085微處理器的程式。在這個程式中,我們將看到如何根據選擇對BCD數進行不同的運算。
問題陳述:
編寫8085組合語言程式,根據選擇對兩個8位BCD數執行一些運算。
討論:
在這個程式中,我們選擇一個選項。選項值儲存在記憶體位置8000H(命名為X)。BCD數儲存在位置8001H和8002H。我們將結果儲存在位置8050H和8051H。
如果選擇是00H,則執行加法;對於01H,執行減法;對於02H,執行乘法運算。
輸入:
第一個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 00 |
| 8001 | 97 |
| 8002 | 88 |
| . . . | . . . |
第二個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 01 |
| 8001 | 97 |
| 8002 | 88 |
| . . . | . . . |
第三個輸入
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8000 | 02 |
| 8001 | 05 |
| 8002 | 04 |
| . . . | . . . |
流程圖:


程式:
| 地址 | 十六進位制程式碼 | 標籤 | 指令助記符 | 註釋 |
|---|---|---|---|---|
| F000 | 21, 00, 80 | LXI H,8000H | 指向獲取選擇的地址 | |
| F003 | 7E | MOV A,M | 將選擇載入到A暫存器 | |
| F004 | FE, 00 | CPI 00H | 比較是否為加法 | |
| F006 | CA,14, F0 | JZ ADD | 跳轉到加法運算 | |
| F009 | FE, 01 | CPI 01H | 比較是否為減法 | |
| F00B | CA,27, F0 | JZ SUB | 跳轉到減法運算 | |
| F00E | FE, 02 | CPI 02H | 比較是否為乘法 | |
| F010 | CA, 3F, F0 | JZ MUL | 跳轉到乘法運算 | |
| F013 | 76 | HLT | 終止程式 | |
| F014 | 23 | ADD | INX H | 指向第一個運算元 |
| F015 | 7E | MOV A,M | 將運算元載入到A暫存器 | |
| F016 | 23 | INX H | 指向下一個運算元 | |
| F017 | 86 | ADD M | 將M與A相加 | |
| F018 | 27 | DAA | 十進位制調整 | |
| F019 | 6F | MOV L,A | 將A暫存器儲存到L暫存器 | |
| F01A | D2, 22, F0 | JNC SKP1 | 如果CY=0,跳轉到SKP1 | |
| F01D | 26, 01 | MVI H,01H | 將01H載入到H暫存器 | |
| F01F | C3, 62, F0 | JMP STORE | 儲存結果 | |
| F022 | 26, 00 | SKP1 | MVI H,00H | 清除HL暫存器 |
| F024 | C3, 62, F0 | JMP STORE | 將HL暫存器作為結果儲存 | |
| F027 | 23 | SUB | INX H | 指向第一個運算元 |
| F028 | 46 | MOV B,M | 將運算元載入到B暫存器 | |
| F029 | 3E, 99 | MVI A,99H | 將99H載入到A暫存器 | |
| F02B | 23 | INX H | 指向下一個運算元 | |
| F02C | 96 | SUB M | 從A暫存器減去M | |
| F02D | C6, 01 | ADI 01H | 加上01H得到十的補碼 | |
| F02F | 80 | ADD B | 將B與A相加 | |
| F030 | 27 | DAA | 十進位制調整 | |
| F031 | 6F | MOV L,A | 將A暫存器儲存到L暫存器 | |
| F032 | DA, 3A, F0 | JC SKP2 | 如果CY=1,跳轉到SKP2 | |
| F035 | 26, FF | MVI H,FFH | 將FFH載入到H暫存器 | |
| F037 | C3, 62, F0 | JMP STORE | 儲存結果 | |
| F03A | 26, 00 | SKP2 | MVI H,00H | 清除HL暫存器 |
| F03C | C3, 62, F0 | JMP STORE | 將HL暫存器作為結果儲存 | |
| F03F | 23 | MUL | INX H | 指向第一個運算元 |
| F040 | 46 | MOV B,M | 將運算元載入到B暫存器 | |
| F041 | 23 | INX H | 指向下一個運算元 | |
| F042 | 4E | MOV C,M | 載入第二個運算元 | |
| F043 | 26, 00 | MVI H,00H | 清除H暫存器 | |
| F045 | AF | XRA A | 清除A暫存器 | |
| F046 | B9 | CMP C | 將C與A比較 | |
| F047 | CA, 5E, F0 | JZ DONE | 如果Z=1,跳轉到DONE | |
| F04A | 80 | LOOP | ADD B | 將B與A相加 |
| F04B | 27 | DAA | 十進位制調整 | |
| F04C | 57 | MOV D,A | 將A暫存器移動到D暫存器 | |
| F04D | D2, 55, F0 | JNC NINC | 如果CY=0,則不增加H | |
| F050 | 7C | MOV A,H | 將H暫存器載入到A暫存器 | |
| F051 | C6, 01 | ADI 01H | 增加A暫存器 | |
| F053 | 27 | DAA | 十進位制調整 | |
| F054 | 67 | MOV H,A | 將資料返回H暫存器 | |
| F055 | 79 | NINC | MOV A,C | 將C暫存器載入到A暫存器 |
| F056 | C6, 99 | ADI 99H | 將A與99H相加 | |
| F058 | 27 | DAA | 十進位制調整 | |
| F059 | 4F | MOV C,A | 將A暫存器再次載入到C暫存器 | |
| F05A | 7A | MOV A,D | 將D暫存器的資料返回A暫存器 | |
| F05B | C2, 4A, F0 | JNZ LOOP | 如果Z=0,跳轉到LOOP | |
| F05E | 6F | DONE | MOV L,A | 將A暫存器的資料存入L暫存器 |
| F05F | C3, 62, F0 | JMP STORE | 將HL暫存器作為結果儲存 | |
| F062 | 22, 50, 80 | STORE | SHLD 8050H | 從HL暫存器儲存結果 |
| F065 | 76 | HLT | 終止程式 |
輸出:
第一個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 85 |
| 8051 | 01 |
| . . . | . . . |
第二個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 09 |
| 8051 | 00 |
| . . . | . . . |
第三個輸出
| 地址 | 資料 |
|---|---|
| . . . | . . . |
| 8050 | 20 |
| 8051 | 00 |
| . . . | . . . |
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP