基於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
.
.
.
.
.
.


更新於:2019年7月30日

99 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.