8085程式實現以下函式:(a*b) + (c*d)


在這裡,我們將瞭解如何使用8085實現數學函式。

問題陳述

編寫一個程式來實現以下函式 (a*b) + (c*d),並將結果儲存在記憶體位置8204和8205中。使用子程式執行乘法運算。這裡a、b、c和d數字分別儲存在記憶體位置8200H、8201H、8202H和8203H中。

討論

8085中沒有乘法指令。因此,我們必須使用子程式來執行乘法。在這個子程式中,它從HL對指向的記憶體中獲取數字,並將結果返回到DE暫存器對。在將兩個部分相乘後,儲存中間結果,然後將它們相加以獲得最終結果。

輸入

地址
資料


8200
02
8201
03
8202
04
8203
05


 

地址
資料


8200
CA
8201
C6
8202
C8
8203
64


 

流程圖

 

程式

地址
十六進位制程式碼
標籤
助記符
註釋
8000
31, 00, 83
START
LXI SP, 8300 H
初始化堆疊指標SP = 8300 H
8003
21, 00, 82
 
LXI H, 8200 H
初始化記憶體指標HL = 8200 H,它是起始資料塊地址
8006
CD, 19, 80
 
CALL MULTI
呼叫子程式Multi..它將HL作為源資料塊指標,並將結果返回到DE暫存器對
8009
D5
 
PUSH D
儲存結果1,即a * b
800A 
23
 
INX H
指向下一對資料
800B 
CD, 19, 80
 
CALL MULTI
呼叫子程式Multi..它將HL作為源資料塊指標,並將結果返回到DE暫存器對
800E 
C1
 
POP B
獲取位於頂部的BC中的結果1
800F 
E5
 
PUSH H
儲存指標
8010
EB
 
XCHG
獲取HL中的結果2,即c * d
8011
9
 
DAD B
HL= HL+BC(結果1+結果2:乘積之和)。因此HL = a * b + c * d
8012
EB
 
XCHG
將結果儲存在DE中,HL將是目標指標
8013
E1
 
POP H
恢復記憶體指標
8014
23
 
INX H
指向目標地址
8015
73
 
MOV M, E
儲存在HL中,結果的LSB(HL)= E
8016
23
 
INX H
指向下一個位置
8017
72
 
MOV M, D
儲存在HL中,結果的MSB(HL)=D
8018
76
 
HLT
停止
8019
4E
MULTI
MOV C, M
C = no1
801A 
23
 
INX H
HL= HL+1;指向下一個數字
801B 
46
 
MOV B, M
B = no2
801C 
E5
 
PUSH H
儲存HL暫存器對
801D 
26, 00
 
MVI H, 00 H
H = 00;跟蹤進位(進位暫存器:將包含結果的MSB)
801F 
3E, 00
 
MVI A, 00 H
A = 00(和暫存器)
8021
80
UP
ADD B
A = A + B
8022
D2, 26, 80
 
JNC LOOP
進位= 1?如果不是,則轉到迴圈
8025
24
 
INR H
H = H + 1
8026
0D
LOOP
DCR C
C = C – 1
8027
C2, 21, 80
 
JNZ UP
Z = 0?如果不是,則轉到up
802A 
6F
 
MOV L, A
從A獲取L中的和(結果的LSB)
802B 
EB
 
XCHG
從HL獲取DE中的結果
802C 
E1
 
POP H
恢復HL暫存器對
802D 
C9
 
RET
返回主程式

 

輸出

地址
資料


8204
1A
8205
00


 

地址
資料


8204
5C
8205
EA


 

更新於: 2019年7月30日

3K+ 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.