Jste zde

Počítání rozdílu v BCD aritmetice

Obecný algoritmus a podprogram pro x51 počítající rozdíl dvou BCD čísel z intervalu

0÷999.

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

 


 ;NIČÍ:  A, R1,R2,R3,R4,R6,R7, příznaky
 *Doba:  22 strojových cyklů

BCDROZD: 

 MOV  A,#99H  ; Vytvoření dvojkového dekadického doplňku 
 SUBB  A,R3   ; čísla B ,  =9999-B+1
 MOV  R3,A
 MOV  A,#99H
 SUBB  A,R4
 ADD  A,#1      ; nebo INC A
 DA  A          ; A-dvojkový dekadický doplněk
 MOV  R4,A
 CLR  A         ; neovlivňuje CY
 ADDC  A,R3 
 DA  A
 MOV  R3,A    ; R3,R4 dvojkový dekadický doplněk čísla B
 MOV  A,R2    ; A + 
 ADD  A,R4
 DA  A
 MOV  R7,A
 MOV  A,R3
 ADD  A,R1
 DA  A
 MOV  R6,A   ; R6,R7 = A-B v BCD formátu. Je-li výsledek  RET 
             ; záporný, pak je v dekadickém doplňku
             ; a bity (7÷4) registru R6 obsahují hodnotu 9.

;Stazeno z www.HW.cz 
        ;    Autorem tohoto SW je Petr Skalicky - SKALICKY@feld.cvut.cz



DOWNLOAD rutiny s  komentářem
Hodnocení článku: