S
scs83
Guest
Здрасти,
Аз съм като някои трудности с някои кодиране отново.Моля да ми помогне.В todec suborutine е да cenvert отговор на знак след десетичната запетая, а влиза подпрограмата се нарича два пъти, всеки път, след като влезе в първа и втора операнди.Резултатите, че искам, че не е точно така, аз мислех, че е тези две подпрограми, че е проблем.Надявам се, че има някой, който е готов да прочетете чрез кода за мен.Благодарности.По начина, по който този проект е калкулатор за проекта.
Код:
;************************************************* ****; подпрограма за преобразуване на отговор на знак след десетичната запетая;************************************************* ****
todec: ldi ZL, ниско (отговор); Z точки за отговорldi ZH, високо (отговор)
знак: CPI op2hi, 0x80; сравнение op2hi да 0x80brlo load1; ако е по-ниска от Гото load1ldi Temp, '-'; друго op2 е отрицателнаSt Z, температура; магазин "-" в отговор и Inc ZCOM op2hi; отричат op2COM op2loldi Temp, 1добави op2lo, Templdi Temp, 0ADC op2hi, Temp
load1: ldi Temp, azero; натоварване Temp с ASCII 0hunds: CPI op2hi, 100; сравнение op2hi до 100brlo load2; ако по-малко от 100 Гото load2Inc Temp; ако след това по-голяма или равна на 100 Temp IncСъби op2hi, 100; изважда 100 от op2hirjmp hunds; Гото hundsload2: ST Z, температура; натоварване стотици цифра в отговор, Inc Zldi Temp, azero; Temp презареждане с ASCII 0десетки: CPI op2hi, 10; сравнение op2hi до 10brlo load3; ако по-малко от 10 Гото load3Inc Temp; ако след това по-голяма или равна на 10 Temp увеличениеСъби op2hi, 10; изважда 10 от op2hirjmp десетки; Отидох в десеткиload3: ST Z, температура; натоварване десетки цифра в отговор, Inc Zldi Temp, azero; Temp презареждане с ASCII 0такива: добавяне на Temp, op2hi, сега Temp = Temp op2hiSt Z, температура; натоварване тези цифри в отговор, Inc Z
CPI op2lo, 0x00; сравнение op2lo до 0breq Fino; при равни други условия, Гото Fino
ldi Temp, "." друго, магазин "."
в отговор и Inc ZSt Z, Templdi Temp, azero; Temp презареждане с ASCII 0десети: CPI op2lo, 0b00011001; op2lo сравнение с .1brlo load4; ако по-малко от Гото load4Inc Temp; ако по-голям или равен Inc TempСъби op2lo, 0b00011001; ,1 изважда от op2lorjmp десети; Отидох в десети
load4: ST Z, температура; магазин десети цифра в отговор и Inc Zldi Temp, azero; Temp презареждане с ASCII 0hundths: CPI op2lo, 0b00000011; op2lo сравнение с .01brlo pfino; ако по-малко от Гото pfinoInc Temp; Inc TempСъби op2lo, 0b00000011; .01 изважда от op2lorjmp hundths; Гото hundths
pfino: ST Z, температура; магазин hundreths цифра в отговор и Inc ZFino: CLR Temp; ясно TempSt Z, температура; Temp магазин в отговор и Inc ZRet; връщане
;************************************************* ****; подпрограма за обработка въведете ключ;************************************************* ****
; таблица за определяне на мощност от 10 до умножи текущата цифра от
EXP10: CPI Temp, 2; е Temp 2?brne E1, ако не Гото E1ldi Temp, 100; Temp = 100Ret; връщанеE1: CPI Temp, 1; е Temp 1?brne e2, ако не Гото e2ldi Temp, 10; Temp = 10Ret; връщанеE2: CPI Temp, 0; е Temp 0?brne E3; ако не Гото e3ldi Temp, 1; Temp = 1Ret; връщанеE3: CPI Temp, 0xFF; е Temp 0xff (-1)brne e4, ако не Гото e4ldi Temp, 0b00011001; Temp = .1Ret; връщанеe4: CPI Temp, 0xfe; е Temp 0xfe (-2)brne E5, ако не Гото E5ldi Temp, 0b00000011; Temp = .01E5: Ret; връщане
ENTER: CLR negflag; ясно negflagldi Temp, 1; определени charin до 1MOV charin, Templdi ZH, високо (буфер); буфер адрес до Я-PTRldi ZL, ниско (буфер)Намери: LD butnum, Z ; точките за натоварване характер Я до в butnum и Inc ZCPI butnum, '. "е butnum десетичната точка?breq форма; ако това е така Гото формаInc charin; друго Inc charinCP NCHAR, charin; charin сравнение с броя на символитеbrsh намерите; ако NCHAR е същата или по-висока от charin Гото намеритеформа: ldi ZH, високо (буфер); буфер адрес до Я-PTRldi ZL, ниско (буфер)MOV ptind, charin; ход charin да ptindCLR numblo; ясно вцепененCLR numbhildi Temp, 1; нулиране charin до 1MOV charin, Temp
LD butnum, Z; натоварване характер точки Я до в butnumCPI butnum, '-'; butnum е отрицателен знак?brne f2, ако не Гото f2ldi Temp, 0xFF; друг определя negflagMOV negflag, Tempadiw ZL, 1; Inc ZInc charin; Inc charinf2: CP charin, ptind; сравнение charin да ptindbreq F11; ако равен Гото F11MOV Temp, ptind; Temp = (ptind - charin - 1)под Temp, charinСъби Temp, 1rcall exp10; повикване exp10LD op1hi, Z ; натоварване характер точки Я до в op1hiCLR op1lo; ясно op1loMOV op2hi, температура; ход Temp в op2hiCLR op2lo; ясно op2lorcall fix_mult; повикване fix_multдобави numbhi, op2hi; добави op2hi да numbhiInc charin; Inc charinrjmp F2; Гото f2
F11: adiw Зл, 1; Inc Zf1: Inc charin; Inc charinCP NCHAR, charin; сравнение NCHAR да charinbrsh fno; ако NCHAR е същата или по-висока от charin Гото fnoMOV Temp, negflag; ход negflag да TempCPI Temp, 0xFF; сравни с 0xFFbrne F3, ако не равен Гото F3COM numbhi; отричат вцепененCOM numbloldi Temp, 1добави numblo, Templdi Temp, 0ADC numbhi, TempЕ3: Ret; връщане
fno: MOV Temp, ptind; ход ptind да Tempпод Temp, charin; Temp = (ptind-charind)rcall exp10; повикване exp10MOV op2lo, температура; ход Temp да op2loCLR op2hi; ясно op2hiLD op1hi, Z ; натоварване характер точки Я до в op1hiCLR op1lo; ясно op1lorcall fix_mult; повикване fix_multдобави numblo, op2lo; добави op2lo да numblorjmp F1; Гото f1
Аз съм като някои трудности с някои кодиране отново.Моля да ми помогне.В todec suborutine е да cenvert отговор на знак след десетичната запетая, а влиза подпрограмата се нарича два пъти, всеки път, след като влезе в първа и втора операнди.Резултатите, че искам, че не е точно така, аз мислех, че е тези две подпрограми, че е проблем.Надявам се, че има някой, който е готов да прочетете чрез кода за мен.Благодарности.По начина, по който този проект е калкулатор за проекта.
Код:
;************************************************* ****; подпрограма за преобразуване на отговор на знак след десетичната запетая;************************************************* ****
todec: ldi ZL, ниско (отговор); Z точки за отговорldi ZH, високо (отговор)
знак: CPI op2hi, 0x80; сравнение op2hi да 0x80brlo load1; ако е по-ниска от Гото load1ldi Temp, '-'; друго op2 е отрицателнаSt Z, температура; магазин "-" в отговор и Inc ZCOM op2hi; отричат op2COM op2loldi Temp, 1добави op2lo, Templdi Temp, 0ADC op2hi, Temp
load1: ldi Temp, azero; натоварване Temp с ASCII 0hunds: CPI op2hi, 100; сравнение op2hi до 100brlo load2; ако по-малко от 100 Гото load2Inc Temp; ако след това по-голяма или равна на 100 Temp IncСъби op2hi, 100; изважда 100 от op2hirjmp hunds; Гото hundsload2: ST Z, температура; натоварване стотици цифра в отговор, Inc Zldi Temp, azero; Temp презареждане с ASCII 0десетки: CPI op2hi, 10; сравнение op2hi до 10brlo load3; ако по-малко от 10 Гото load3Inc Temp; ако след това по-голяма или равна на 10 Temp увеличениеСъби op2hi, 10; изважда 10 от op2hirjmp десетки; Отидох в десеткиload3: ST Z, температура; натоварване десетки цифра в отговор, Inc Zldi Temp, azero; Temp презареждане с ASCII 0такива: добавяне на Temp, op2hi, сега Temp = Temp op2hiSt Z, температура; натоварване тези цифри в отговор, Inc Z
CPI op2lo, 0x00; сравнение op2lo до 0breq Fino; при равни други условия, Гото Fino
ldi Temp, "." друго, магазин "."
в отговор и Inc ZSt Z, Templdi Temp, azero; Temp презареждане с ASCII 0десети: CPI op2lo, 0b00011001; op2lo сравнение с .1brlo load4; ако по-малко от Гото load4Inc Temp; ако по-голям или равен Inc TempСъби op2lo, 0b00011001; ,1 изважда от op2lorjmp десети; Отидох в десети
load4: ST Z, температура; магазин десети цифра в отговор и Inc Zldi Temp, azero; Temp презареждане с ASCII 0hundths: CPI op2lo, 0b00000011; op2lo сравнение с .01brlo pfino; ако по-малко от Гото pfinoInc Temp; Inc TempСъби op2lo, 0b00000011; .01 изважда от op2lorjmp hundths; Гото hundths
pfino: ST Z, температура; магазин hundreths цифра в отговор и Inc ZFino: CLR Temp; ясно TempSt Z, температура; Temp магазин в отговор и Inc ZRet; връщане
;************************************************* ****; подпрограма за обработка въведете ключ;************************************************* ****
; таблица за определяне на мощност от 10 до умножи текущата цифра от
EXP10: CPI Temp, 2; е Temp 2?brne E1, ако не Гото E1ldi Temp, 100; Temp = 100Ret; връщанеE1: CPI Temp, 1; е Temp 1?brne e2, ако не Гото e2ldi Temp, 10; Temp = 10Ret; връщанеE2: CPI Temp, 0; е Temp 0?brne E3; ако не Гото e3ldi Temp, 1; Temp = 1Ret; връщанеE3: CPI Temp, 0xFF; е Temp 0xff (-1)brne e4, ако не Гото e4ldi Temp, 0b00011001; Temp = .1Ret; връщанеe4: CPI Temp, 0xfe; е Temp 0xfe (-2)brne E5, ако не Гото E5ldi Temp, 0b00000011; Temp = .01E5: Ret; връщане
ENTER: CLR negflag; ясно negflagldi Temp, 1; определени charin до 1MOV charin, Templdi ZH, високо (буфер); буфер адрес до Я-PTRldi ZL, ниско (буфер)Намери: LD butnum, Z ; точките за натоварване характер Я до в butnum и Inc ZCPI butnum, '. "е butnum десетичната точка?breq форма; ако това е така Гото формаInc charin; друго Inc charinCP NCHAR, charin; charin сравнение с броя на символитеbrsh намерите; ако NCHAR е същата или по-висока от charin Гото намеритеформа: ldi ZH, високо (буфер); буфер адрес до Я-PTRldi ZL, ниско (буфер)MOV ptind, charin; ход charin да ptindCLR numblo; ясно вцепененCLR numbhildi Temp, 1; нулиране charin до 1MOV charin, Temp
LD butnum, Z; натоварване характер точки Я до в butnumCPI butnum, '-'; butnum е отрицателен знак?brne f2, ако не Гото f2ldi Temp, 0xFF; друг определя negflagMOV negflag, Tempadiw ZL, 1; Inc ZInc charin; Inc charinf2: CP charin, ptind; сравнение charin да ptindbreq F11; ако равен Гото F11MOV Temp, ptind; Temp = (ptind - charin - 1)под Temp, charinСъби Temp, 1rcall exp10; повикване exp10LD op1hi, Z ; натоварване характер точки Я до в op1hiCLR op1lo; ясно op1loMOV op2hi, температура; ход Temp в op2hiCLR op2lo; ясно op2lorcall fix_mult; повикване fix_multдобави numbhi, op2hi; добави op2hi да numbhiInc charin; Inc charinrjmp F2; Гото f2
F11: adiw Зл, 1; Inc Zf1: Inc charin; Inc charinCP NCHAR, charin; сравнение NCHAR да charinbrsh fno; ако NCHAR е същата или по-висока от charin Гото fnoMOV Temp, negflag; ход negflag да TempCPI Temp, 0xFF; сравни с 0xFFbrne F3, ако не равен Гото F3COM numbhi; отричат вцепененCOM numbloldi Temp, 1добави numblo, Templdi Temp, 0ADC numbhi, TempЕ3: Ret; връщане
fno: MOV Temp, ptind; ход ptind да Tempпод Temp, charin; Temp = (ptind-charind)rcall exp10; повикване exp10MOV op2lo, температура; ход Temp да op2loCLR op2hi; ясно op2hiLD op1hi, Z ; натоварване характер точки Я до в op1hiCLR op1lo; ясно op1lorcall fix_mult; повикване fix_multдобави numblo, op2lo; добави op2lo да numblorjmp F1; Гото f1