Jakiś błąd

Apr 09, 2005 5 Replies

Piszę program w Avr asembler. Program jest prosty, ale robie jakiś błąd, którego nie widzę. Czy ktoś mogłby to sprawdzić?



Zmienne V,H,T od 0 do 99



;Wynik=V+100*(H+100*T) ;pomocniczy rejestr R30 .def A1 = R16; A1 mlodszy bajt zmiennej A .def A2 = R17; A2 starszy bajt zmiennej A .def A3 = R18; .def B1 = R19; B1 mlodszy bajt zmiennej B .def B2 = R20; B2 starszy bajt zmiennej B .def B3 = R21; .def T = R25; .def H = R26; .def V = R27; .def MSB = R2 .equ ccc = $45



zmienne: ldi T,23 ldi H,36 ldi V,47 ldi R30,100 oblicz_adres: mul T,R30; mov A1,R0 mov A2,R1



mov B2,0 add A1,H adc A2,B2 mul A1,R30 mov B1,R0 mov B2,R1 mul A2,R30 mov A1,R0 mov A2,R1



ldi R29,0 add A1,B2 adc R23,R27 cpi R23,0 breq skok ldi R29,1 add A2,R29 skok: add B1,V



;Wynik znajduje się w A2 - najstarszy bajt; A1 - mlodszy, B1 - najmlodszy koniec: rjmp koniec


Efekt jest taki, ze cos przeklamuje. Moze ktos znajdzie chwilke zeby to sprawdzic, bo nie mam wprawy w takich dzialaniach. Dzialanie jest takie Wynik=V+100*(H+100*T) a wynik musi byc w trzech rejestrach.



pozdrawiam, dArek


[...]

Ja tam nie wiem .. ale co bylo wczesniej w R23, i czy na pewno 0 ? BO to jest jego pierwsze wystapienie w programie ..

J.

To jest sumowanie 8 bitowej liczby do 16 bitowej z przeniesieniem. W B2 jest 8 bitowa liczba a R27=0 znaczy, ze starszy bajt jest zero. To tak jakby 16bitowa liczba tylko starszy bajt rowny zero - czyli 8 bitowa. :) namieszalem?

Znalazłem szmatę. Temat zamknięty.

pozdrawiam, dArek

Błąd polega na kolejności działania. Najpierw zrobiłem działania na starszym bajcie o poten na młodszym. Każdy wie, że robi się na odwrót. No ale pisałem to późnym wieczorem. Szukałem błędu a to nie sposób. Czasami warto napisać coś jeszcze raz. Wtedy szybciej się człowiek z tym upora. Operacje są ok, tylko ta kolejność była nie taka.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required