Problémy s kódovaním AT8515 ... prosím pomôžte

S

scs83

Guest
Nazdar,

Mám určité problémy s niektorými kódovanie znova.Prosím, pomôžte mi.Todec suborutine je cenvert odpoveď na desatinné čísla, kým vstúpi podprogram je volán dvakrát, zakaždým, keď som vstúpil do prvej a druhej operandov.Výsledky, ktoré som chcela, nie je tak presné, že som myslel, že sa tieto dva podprogramy, že je ten problém.Dúfam, že je tu niekto, kto je ochotný prečítať kód pre mňa.Vďaka.Mimochodom tento projekt je kalkulačka projekt.

Kód:

;************************************************* ****; Podprogramu previesť odpovedať na desiatkovej;************************************************* ****
todec: LDI ZL, nízka (odpoveď), Z poukazuje na odpoveďLDI ZH, vysoká (odpovedať)
značka: cpi op2hi, 0x80, porovnanie op2hi na 0x80brlo load1, ak je nižšia, ako goto load1LDI temp, '-', inak je negatívny OP2st Z , temp, obchod '-' v odpovedi, a inc Zcom op2hi; negovat OP2com op2loLDI temp, 1pridať op2lo, tempLDI temp, 0adc op2hi, temp
load1: LDI temp, azeri, zaťaženie temp s ascii 0hunds: cpi op2hi, 100, 100 porovnať op2hibrlo load2, ak menej ako 100 goto load2inc temp, potom je väčší alebo rovný 100 vč tempsubi op2hi, 100, 100 odpočítať z op2hirjmp hunds; goto hundsload2: st Z , temp; zaťaženie stovky miest na odpoveď, vč ZLDI temp, azeri, obnovte temp s ascii 0desiatky: cpi op2hi, 10; porovnať op2hi 10brlo load3, ak menej ako 10 goto load3inc temp, ak väčší alebo sa rovná 10 temp prírastkusubi op2hi, 10, 10 odpočítať od op2hirjmp desiatky; goto desiatkyload3: st Z , temp; náklad desiatok miest na odpoveď, vč ZLDI temp, azeri, obnovte temp s ascii 0z nich: pridať temp, op2hi, teraz temp = temp op2hist Z , temp; zaťaženie tých miest na odpoveď, vč Z
cpi op2lo, 0x00, porovnať op2lo až 0breq fino, ak sa rovnaká, goto fino
LDI temp, '.'; inde, obchod '.'
v odpovedi, a inc Zst Z , tempLDI temp, azeri, obnovte temp s ascii 0desatiny: cpi op2lo, 0b00011001; op2lo porovnaní s, 1brlo load4, ak menej ako goto load4inc temp, ak je väčší alebo rovný vč tempsubi op2lo, 0b00011001;, 1 odpočítať od op2lorjmp desatiny; goto desatín
load4: st Z , temp; obchod desiatkach miest v odpovedi, a inc ZLDI temp, azeri, obnovte temp s ascii 0hundths: cpi op2lo, 0b00000011; op2lo porovnaní s, 01brlo pfino, ak menej ako goto pfinoinc temp; vč tempsubi op2lo, 0b00000011;, 01 odpočítať od op2lorjmp hundths; goto hundths
pfino: st Z , temp; obchod hundreths číslice v odpovedi a vč Zfino: clr temp; jasné tempst Z , temp; ukladanie temp v odpovedi, a inc Zret; návrat
;************************************************* ****; Podprogramov pre prácu kláves Enter;************************************************* ****
, Tabuľky môžete určiť silu 10 vynásobiť prúd číslice od
EXP10: cpi temp, 2, 2 je teplota?brne e1, ak nie goto e1LDI temp, 100; temp = 100ret; návrate1: cpi temp, 1; je temp 1?e2 brne, ak nie goto e2LDI temp, 10; temp = 10ret; návrate2: cpi temp, 0; je teplota 0?e3 brne, ak nie goto e3LDI temp, 1; temp = 1ret; návratE3: cpi temp, 0xff, 0xff, je teplota (-1)e4 brne, ak nie goto e4LDI temp, 0b00011001; temp =, 1ret; návrate4: cpi temp, 0xFE, je teplota 0xFE (-2)e5 brne, ak nie goto e5LDI temp, 0b00000011; temp =, 01e5: ret; návrat
ENTER: clr negflag; jasné negflagLDI temp, 1; Charina nastaviť na 1mov Charina, tempLDI ZH, vysoká (buffer); buffer adresy Z-ptrLDI ZL, nízka (buffer)nájsť: ld butnum, Z ; záťažových bodov hodnotu až do Z butnum a vč Zcpi butnum, '.'; je butnum za desatinnou čiarkou?breq podobe, v takom prípade goto formulárinc Charina else inc Charinacp nchar, Charina, porovnať Charina počet znakovbrsh nájsť, ak nchar je rovnaká alebo vyššia ako Charina goto nájsťforma: LDI ZH, vysoká (buffer); buffer adresy Z-ptrLDI ZL, nízka (buffer)mov ptind, Charina, prejsť na Charina ptindclr numblo; jasné numbCLR numbhiLDI temp, 1; reset Charina na 1mov Charina, temp
ld butnum, Z; záťažových bodov hodnotu až do Z butnumcpi butnum, '-'; je butnum záporné znamienko?brne f2, ak nie, goto f2LDI temp, 0xff, inak nastaviť negflagmov negflag, tempadiw ZL, 1; inc Zinc Charina; vč Charinaf2: cp Charina, ptind, porovnanie Charina na ptindbreq F11, ak sa rovnaká goto f11mov temp, ptind, temp = (ptind - Charina - 1)sub temp, Charinasubi temp, 1rcall exp10; volania exp10ld op1hi, Z ; záťažových bodov hodnotu až do Z op1hiclr op1lo; jasné op1lomov op2hi, temp, temp presunúť do op2hiclr op2lo; jasné op2lorcall fix_mult; volania fix_multpridať numbhi, op2hi, pridať op2hi do numbhiinc Charina; vč Charinarjmp f2; goto f2
F11: adiw Zl, 1; inc Zf1: inc Charina; vč Charinacp nchar, Charina, porovnanie nchar na Charinabrsh FNO, ak nchar je rovnaká alebo vyššia ako Charina goto FNOmov temp, negflag, negflag presunúť do tempcpi temp, 0xff, 0xff, v porovnaní sbrne f3, ak nie rovnaké goto f3com numbhi; negovat numbcom numbloLDI temp, 1pridať numblo, tempLDI temp, 0adc numbhi, tempf3: ret; návrat
FNO: mov temp, ptind, ptind presunúť do tempsub temp, Charina, temp = (ptind-charind)rcall exp10; volania exp10mov op2lo, temp, temp presunúť do op2loclr op2hi; jasné op2hild op1hi, Z ; záťažových bodov hodnotu až do Z op1hiclr op1lo; jasné op1lorcall fix_mult; volania fix_multpridať numblo, op2lo, pridať op2lo do numblorjmp f1; goto f1
 
nazdar,
v prvom rade dont Pamätám si všetky tieto, ale chcete.
tak ako tak, je to jasne vidieť, že aj ur kódKód:

rjmp hunds
 

Welcome to EDABoard.com

Sponsor

Back
Top