Podprogram počítající rozdíl dvou BCD čísel z intervalu
0÷999.
Protože většina mikroprocesorů neumožňuje aplikovat dekadickou korekci po rozdílu čísel, můžeme
k řešení problému použít tyto metody:
- a) konverze BCD->BIN->odečtení->konverze BIN->BCD - rozsáhlý program, jehož vykonávání trvá dlouho..
- b) využitím jednotkového nebo dvojkového dekadického doplňku viz. obrázek
Analogicky s definicí dvojkového doplňku můžeme definovat dvojkový dekadický
doplněk . Rozdíl čísel A-B pak můžeme realizovat jako součet čísel . V případě,
že A>B potom součet (). Pro
získání správné hodnoty rozdílu A-B potřebujeme odečíst
hodnotu . Protože se jedná o jedničku na bitu vlevo od nejvyššího bitu v
dalším zpracování ji neuvažujeme. Je-li , potom a pro
rozdíl můžeme psát .
Je-li rozdíl záporný, pak získáváme přímo jeho dekadický
doplněk. Jako příklad si ukážeme oba případy při rozdílu dvou BCD čísel A=45 a
B=16 viz. obrázek. Protože rozdíl BCD čísel je takto realizován jako součet
čísel, může být na něj uplatněna dekadická korekce.
Předpokládejme, že číslo A je uloženo v registrech R1(vyšší),
R2(nižší), číslo B je uloženo v registrech R3 a R4 a výsledek má být
uložen do registrů R6 (vyšší), R7 (nižší).
Pokud máte napsanou SW rutinu, která umí detekovat rychlost ze souvislého toku dat, pošlete nám ji.. -
;Program BCD odcitani
BCDROZD: MOV A,#99H ; Vytvoření
dvojkového dekadického doplňku ;Stazeno z www.HW.cz |