S
scs83
Guest
Salut,
I sînt having anumite dificultăţi cu unele de codificare din nou.Te rog ajuta-ma.Suborutine todec este de a cenvert răspunsul la zecimală în timp ce intra in subrutina este numit de două ori, de fiecare dată după ce am intrat operanzi prima şi a doua.Rezultatele pe care am vrut nu este atât de exacte pe care mă gândesc că este aceste două subrutine, care este problema.Sper că nu există cineva care este dispus să citiţi, prin codul pentru mine.Mulţumesc.Prin modul în care acest proiect este un proiect calculator.
Cod:
;************************************************* ****; subrutina pentru a converti răspunsul la zecimal;************************************************* ****
todec: LDI ZL, joasă (răspuns); puncte Z pentru a răspunde laLDI ZH, mare (răspuns)
Înregistraţi-vă: CPI op2hi, 0x80; compara op2hi la 0x80brlo load1; dacă este mai mică decât Du-te la load1LDI temp, '-'; altceva OP2 este negativăZ st , temp; magazin "-" în răspunsul şi inc Zop2hi Com; neutraliza OP2op2lo comLDI Temp, 1Adauga op2lo, TempLDI Temp, 0ADC Temp op2hi,
load1: azero LDI Temp,; temperatură de sarcină cu ASCII 0hunds: CPI op2hi, 100; compara op2hi la 100 debrlo load2; în cazul în care mai puţin de 100 Du-te la load2temp inc; dacă este mai mare decât sau egală cu 100 inc Tempsubi op2hi, 100; scade 100 din op2hihunds rjmp; hunds Du-te laload2: Z st , temp; sute de sarcină cifre în răspuns, inc ZLDI azero Temp,; temp reîncărca cu ASCII 0zeci: CPI op2hi, 10; compara op2hi la 10brlo load3; în cazul în care mai putin de 10 Du-te la load3temp inc; dacă este mai mare decât sau egal cu 10 creştere Tempsubi op2hi, 10; scade 10 de la op2hizeci rjmp; zeci Du-te laload3: Z st , temp; zeci de sarcină cifre în răspuns, inc ZLDI azero Temp,; temp reîncărca cu ASCII 0cele: add Temp, op2hi; acum temp = temp op2hiZ st , temp; cele de sarcină cifre în răspuns, inc Z
IPC op2lo, 0x00; compara op2lo la 0breq fino; dacă egal, fino goto
LDI temp, '.'; altceva, magazin "."
în răspuns şi inc ZZ st , TempLDI azero Temp,; temp reîncărca cu ASCII 0zecimi: CPI op2lo, 0b00011001; comparati op2lo cu .1brlo load4; în cazul în care mai puţin de Du-te la load4temp inc; dacă este mai mare sau egal Temp incsubi op2lo, 0b00011001; scădea .1 de la op2lozecimi rjmp; zecimi Du-te
load4: Z st , temp; zecimi magazin cifre în răspunsul şi inc ZLDI azero Temp,; temp reîncărca cu ASCII 0hundths: CPI op2lo, 0b00000011; comparati op2lo cu .01brlo pfino; în cazul în care mai puţin de Du-te la pfinotemp inc; Temp incsubi op2lo, 0b00000011; scade .01 de la op2lohundths rjmp; hundths Du-te la
pfino: Z st , temp; hundreths magazin cifre în răspunsul şi inc ZFino: Temp CLR; Temp clarZ st , temp; temperatură se păstra în răspuns şi inc Zret; de returnare
;************************************************* ****; subrutina să se ocupe de a introduce-cheie;************************************************* ****
; de masă pentru a determina puterea de 10 cifre pentru a se multiplica curent de către
EXP10: CPI Temp, 2; este temp 2?Brně E1; în cazul în care nu mergeti la e1LDI Temp, 100; temp = 100ret; de returnareE1: Temp IPC, 1; este Temp 1?Brně E2; în cazul în care nu mergeti la e2LDI temp, 10; temp = 10ret; de returnareE2: Temp IPC, 0; este Temp 0?Brně e3; dacă nu mergeti la E3LDI Temp, 1; Temp = 1ret; de returnareE3: Temp IPC, 0xff; este 0xff temp (-1)Brně e4; dacă nu mergeti la E4LDI Temp, 0b00011001; temp = .1ret; de returnareE4: Temp IPC, 0xfe; este 0xfe Temp (-2)Brně E5; dacă nu mergeti la E5LDI Temp, 0b00000011; temp = .01E5: ret; de returnare
ENTER: negflag CLR; negflag clarLDI Temp, 1; charin setat la 1mov charin, TempLDI ZH, mare (tampon); tampon adresa de la A la Z-ptrLDI ZL, mică (tampon)gasi: butnum LD, Z ; de încărcare de puncte de caractere Z pentru a în butnum şi inc Zbutnum IPC, '.'; este butnum punctul zecimal?formularul de breq; formă în cazul Du-te lacharin inc; charin altceva incNCHAR CP, charin; charin pentru a compara numărul de caracterebrsh găsi; în cazul în care NCHAR este aceeaşi sau mai mare decât Du-te la charin găsiforma: LDI ZH, mare (tampon); tampon adresa de la A la Z-ptrLDI ZL, mică (tampon)mov ptind, charin; charin a trece la ptindnumblo CLR; clar amortitnumbhi CLRLDI Temp, 1; charin a nu putea suporta până la 1mov charin, Temp
butnum LD, Z; sarcina de caractere de la Z la puncte în butnumbutnum IPC, '-'; este butnum semn negativ?Brně F2; dacă nu, mergeti la f2LDI Temp, 0xFF; altceva stabilit negflagmov negflag, Tempadiw ZL, 1; Z inccharin inc; charin incF2: charin CP, ptind; compara charin la ptindbreq F11; în cazul în care Du-te la egal F11mov temp, ptind; temp = (ptind - charin - 1)Temp Sub, charinsubi Temp, 1rcall exp10; apel exp10op1hi LD, Z ; de încărcare de caractere de la Z la puncte în op1hiop1lo CLR; op1lo clarmov op2hi, temp; temp se mute în op2hiop2lo CLR; op2lo clarfix_mult rcall; fix_mult apelAdauga numbhi, op2hi; adăuga op2hi la numbhicharin inc; charin incrjmp F2; Du-te la F2
F11: adiw ZL, 1; Z incF1: charin inc; charin incNCHAR CP, charin; compara NCHAR la charinfno brsh; dacă NCHAR este aceeaşi sau mai mare decât charin Du-te la fnotemp mov, negflag; muta negflag la TempIPC Temp, 0xFF; compara cu 0xFFBrně F3; dacă nu egal Du-te la F3numbhi Com; neutraliza amortitnumblo comLDI Temp, 1Adauga numblo, TempLDI Temp, 0ADC Temp numbhi,F3: ret; de returnare
fno: Temp mov, ptind; muta ptind la temperaturăTemp Sub, charin; temp = (ptind-charind)rcall exp10; apel exp10mov op2lo, temp; temperatură a trece la op2loop2hi CLR; op2hi clarop1hi LD, Z ; de încărcare de caractere de la Z la puncte în op1hiop1lo CLR; op1lo clarfix_mult rcall; fix_mult apelAdauga numblo, op2lo; adăuga op2lo la numblorjmp F1; Du-te la F1
I sînt having anumite dificultăţi cu unele de codificare din nou.Te rog ajuta-ma.Suborutine todec este de a cenvert răspunsul la zecimală în timp ce intra in subrutina este numit de două ori, de fiecare dată după ce am intrat operanzi prima şi a doua.Rezultatele pe care am vrut nu este atât de exacte pe care mă gândesc că este aceste două subrutine, care este problema.Sper că nu există cineva care este dispus să citiţi, prin codul pentru mine.Mulţumesc.Prin modul în care acest proiect este un proiect calculator.
Cod:
;************************************************* ****; subrutina pentru a converti răspunsul la zecimal;************************************************* ****
todec: LDI ZL, joasă (răspuns); puncte Z pentru a răspunde laLDI ZH, mare (răspuns)
Înregistraţi-vă: CPI op2hi, 0x80; compara op2hi la 0x80brlo load1; dacă este mai mică decât Du-te la load1LDI temp, '-'; altceva OP2 este negativăZ st , temp; magazin "-" în răspunsul şi inc Zop2hi Com; neutraliza OP2op2lo comLDI Temp, 1Adauga op2lo, TempLDI Temp, 0ADC Temp op2hi,
load1: azero LDI Temp,; temperatură de sarcină cu ASCII 0hunds: CPI op2hi, 100; compara op2hi la 100 debrlo load2; în cazul în care mai puţin de 100 Du-te la load2temp inc; dacă este mai mare decât sau egală cu 100 inc Tempsubi op2hi, 100; scade 100 din op2hihunds rjmp; hunds Du-te laload2: Z st , temp; sute de sarcină cifre în răspuns, inc ZLDI azero Temp,; temp reîncărca cu ASCII 0zeci: CPI op2hi, 10; compara op2hi la 10brlo load3; în cazul în care mai putin de 10 Du-te la load3temp inc; dacă este mai mare decât sau egal cu 10 creştere Tempsubi op2hi, 10; scade 10 de la op2hizeci rjmp; zeci Du-te laload3: Z st , temp; zeci de sarcină cifre în răspuns, inc ZLDI azero Temp,; temp reîncărca cu ASCII 0cele: add Temp, op2hi; acum temp = temp op2hiZ st , temp; cele de sarcină cifre în răspuns, inc Z
IPC op2lo, 0x00; compara op2lo la 0breq fino; dacă egal, fino goto
LDI temp, '.'; altceva, magazin "."
în răspuns şi inc ZZ st , TempLDI azero Temp,; temp reîncărca cu ASCII 0zecimi: CPI op2lo, 0b00011001; comparati op2lo cu .1brlo load4; în cazul în care mai puţin de Du-te la load4temp inc; dacă este mai mare sau egal Temp incsubi op2lo, 0b00011001; scădea .1 de la op2lozecimi rjmp; zecimi Du-te
load4: Z st , temp; zecimi magazin cifre în răspunsul şi inc ZLDI azero Temp,; temp reîncărca cu ASCII 0hundths: CPI op2lo, 0b00000011; comparati op2lo cu .01brlo pfino; în cazul în care mai puţin de Du-te la pfinotemp inc; Temp incsubi op2lo, 0b00000011; scade .01 de la op2lohundths rjmp; hundths Du-te la
pfino: Z st , temp; hundreths magazin cifre în răspunsul şi inc ZFino: Temp CLR; Temp clarZ st , temp; temperatură se păstra în răspuns şi inc Zret; de returnare
;************************************************* ****; subrutina să se ocupe de a introduce-cheie;************************************************* ****
; de masă pentru a determina puterea de 10 cifre pentru a se multiplica curent de către
EXP10: CPI Temp, 2; este temp 2?Brně E1; în cazul în care nu mergeti la e1LDI Temp, 100; temp = 100ret; de returnareE1: Temp IPC, 1; este Temp 1?Brně E2; în cazul în care nu mergeti la e2LDI temp, 10; temp = 10ret; de returnareE2: Temp IPC, 0; este Temp 0?Brně e3; dacă nu mergeti la E3LDI Temp, 1; Temp = 1ret; de returnareE3: Temp IPC, 0xff; este 0xff temp (-1)Brně e4; dacă nu mergeti la E4LDI Temp, 0b00011001; temp = .1ret; de returnareE4: Temp IPC, 0xfe; este 0xfe Temp (-2)Brně E5; dacă nu mergeti la E5LDI Temp, 0b00000011; temp = .01E5: ret; de returnare
ENTER: negflag CLR; negflag clarLDI Temp, 1; charin setat la 1mov charin, TempLDI ZH, mare (tampon); tampon adresa de la A la Z-ptrLDI ZL, mică (tampon)gasi: butnum LD, Z ; de încărcare de puncte de caractere Z pentru a în butnum şi inc Zbutnum IPC, '.'; este butnum punctul zecimal?formularul de breq; formă în cazul Du-te lacharin inc; charin altceva incNCHAR CP, charin; charin pentru a compara numărul de caracterebrsh găsi; în cazul în care NCHAR este aceeaşi sau mai mare decât Du-te la charin găsiforma: LDI ZH, mare (tampon); tampon adresa de la A la Z-ptrLDI ZL, mică (tampon)mov ptind, charin; charin a trece la ptindnumblo CLR; clar amortitnumbhi CLRLDI Temp, 1; charin a nu putea suporta până la 1mov charin, Temp
butnum LD, Z; sarcina de caractere de la Z la puncte în butnumbutnum IPC, '-'; este butnum semn negativ?Brně F2; dacă nu, mergeti la f2LDI Temp, 0xFF; altceva stabilit negflagmov negflag, Tempadiw ZL, 1; Z inccharin inc; charin incF2: charin CP, ptind; compara charin la ptindbreq F11; în cazul în care Du-te la egal F11mov temp, ptind; temp = (ptind - charin - 1)Temp Sub, charinsubi Temp, 1rcall exp10; apel exp10op1hi LD, Z ; de încărcare de caractere de la Z la puncte în op1hiop1lo CLR; op1lo clarmov op2hi, temp; temp se mute în op2hiop2lo CLR; op2lo clarfix_mult rcall; fix_mult apelAdauga numbhi, op2hi; adăuga op2hi la numbhicharin inc; charin incrjmp F2; Du-te la F2
F11: adiw ZL, 1; Z incF1: charin inc; charin incNCHAR CP, charin; compara NCHAR la charinfno brsh; dacă NCHAR este aceeaşi sau mai mare decât charin Du-te la fnotemp mov, negflag; muta negflag la TempIPC Temp, 0xFF; compara cu 0xFFBrně F3; dacă nu egal Du-te la F3numbhi Com; neutraliza amortitnumblo comLDI Temp, 1Adauga numblo, TempLDI Temp, 0ADC Temp numbhi,F3: ret; de returnare
fno: Temp mov, ptind; muta ptind la temperaturăTemp Sub, charin; temp = (ptind-charind)rcall exp10; apel exp10mov op2lo, temp; temperatură a trece la op2loop2hi CLR; op2hi clarop1hi LD, Z ; de încărcare de caractere de la Z la puncte în op1hiop1lo CLR; op1lo clarfix_mult rcall; fix_mult apelAdauga numblo, op2lo; adăuga op2lo la numblorjmp F1; Du-te la F1