使用子程式的8085程式,用於累加十個壓縮BCD數。


我們將在此瞭解如何使用8085累加十個壓縮BCD數。

問題陳述

一組十個壓縮BCD數儲存在從8040H到8049H開始的記憶體位置。

  1. 編寫一個帶有子程式的程式來以BCD形式累加這些數字。如果產生進位,則將其儲存到暫存器B中,並將其調整為BCD。最終的和將小於9999BCD。將和儲存在8060H和8061H位置。

  2. 編寫第二個子程式來解壓儲存在暫存器A和B中的BCD和,並將它們儲存在從8062H開始的OutputBuffer記憶體中。最高有效位(BCD4)應儲存在8065H,最低有效位(BCD1)應儲存在8062H。

討論

數字從8040開始。由於B將儲存進位,因此我們必須先清除B。在第一階段,我們必須從記憶體中獲取數字,然後將它們作為BCD數字相加,並相應地儲存它們。在下一階段,將完成解壓任務。在該部分中,我們獲取16位BCD數,然後將其分解為4位數字。然後將它們儲存到指定位置。

輸入

地址
資料


8040
12
8041
23
8042
42
8043
55
8044
10
8045
99
8046
35
8047
45
8048
76
8049
81


 

流程圖

 

 

程式

地址
十六進位制程式碼
標籤
助記符
註釋
8000
21, 40, 80
 
LXI H 8040H
用IN-BUFFER的第一個位置初始化指標
8003
0E, 0A
 
MVI C 0AH

用要累加的資料個數初始化計數器
8005
AF
 
XRA A
清除累加器和暫存器B的內容
8006
47
 
MOV B, A

 
8007
CD, 23, 80
NEXTBCD
CALL
BCDADD
累加BCD數的子程式
800A 
23
 
INX H

轉到下一個位置
800B 
0D
 
DCR C
遞減計數器,直到達到0
800C 
C2, 07, 80
 
JNZ
NEXTBCD

 
800F 
32, 60, 80
 
STA 8060 H
儲存A中可用的結果位元組
8012
57
 
MOV D, A

臨時D = A
8013
78
 
MOV A, B
將B放入A
8014
32, 61, 80
 
STA 8061 H

將其儲存到OUT-BUFFER中
8017
7A
 
MOV A, D
恢復A
8018
21, 62, 80
 
LXI H 8062H

用OUT-BUFFER的最後一個位置初始化指標
801B 
CD, 2E, 80
 
CALL
UNPAK
從壓縮BCD數中分離兩個半位元組的子程式
801E 
78
 
MOV A, B

將B複製到A
801F 
CD, 2E, 80
 
CALL UNPAK
從壓縮BCD數中分離兩個半位元組的子程式
8022
76
 
HLT

終止程式
8023
86
BCDADD
ADD M
將HL暫存器對指定的記憶體位置的內容與A相加
8024
27
 
DAA

十進位制調整累加器
8025
D0
 
RNC
如果沒有產生進位,則返回到呼叫程式
8026
57
 
MOV D, A

將A複製到D
8027
78
 
MOV A, B
如果產生進位,則調整暫存器B的內容
8028
C6. 01
 
ADI 01H

 
802A 
27
 
DAA
 
802B 
47
 
MOV B, A

 
802C 
7A
 
MOV A, D
將D複製到A
802D 
C9
 
RET

返回到呼叫程式
802E 
57
UNPAK
MOV D, A
將A複製到D
802F 
E6, 0F
 
ANI 0FH

遮蔽掉最高有效四位
8031
77
 
MOV M, A
將A寫入記憶體
8032
23
 
INX H

轉到下一個位置
8033
7A
 
MOV A, D
將D複製到A
8034
E6, F0
 
ANI F0H

遮蔽掉最低有效四位
8036
0F
 
RRC
旋轉累加器4次以獲得第一個BCD數字
8037
0F
 
RRC

 
8038
0F
 
RRC
 
8039
0F
 
RRC

 
803A 
77
 
MOV M, A
將A寫入記憶體
803B 
23
 
INX H

轉到下一個位置
803C 
C9
 
RET
返回到呼叫程式

 

輸出

地址
資料


8060
78
8061
04
8062
08
8063
07
8064
04
8065
00


 

 

 

更新於:2019年7月30日

瀏覽量1K+

啟動您的職業生涯

透過完成課程獲得認證

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