RTV forum PL | NewsGroups PL

Odejmowanie w Assemblerze AVR: problem z negatywnym wynikiem przy wartości 255

Assembler w AVR, odejmowanie

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Odejmowanie w Assemblerze AVR: problem z negatywnym wynikiem przy wartości 255

scx
Guest

Tue Jan 16, 2007 10:21 am   



Witam

Jest sobie kod:

IMPULS:
cli
in czas,TCNT0
clr temp ;czyszczenie flag signed i negative
subi czas,112
brmi ALARM

Problem w tym , że nawet jeśli rejestr liczący timera ma 255, to w wyniku
odejmowania dostaje zawsze wynik negatywny Sad

scx
Guest

Tue Jan 16, 2007 10:40 am   



Dnia Tue, 16 Jan 2007 10:21:42 +0100, scx napisał(a):

?!?!?!

ldi czas,0xff
subi czas,112

I też mam ustawioną flagę "negative"! Od kiedy 255 - 112 < 0?

Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze

Robert Z.
Guest

Tue Jan 16, 2007 11:16 am   



Użytkownik "scx" <es-ce-iks-7@wu-pe.pe-el> napisał w wiadomości
news:1ga65keh0rf28.1q37w7e0xxqvc.dlg@40tude.net...
Quote:
Dnia Tue, 16 Jan 2007 10:21:42 +0100, scx napisał(a):

?!?!?!

ldi czas,0xff
subi czas,112

I też mam ustawioną flagę "negative"! Od kiedy 255 - 112 < 0?

Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze

flaga N ustawiana jest zawsze kiedy w wyniku ustawiony jest najbardziej
znaczacy bit ktory stanowi o znaku danej liczby. Jezeli operujesz na
liczbach ze znakiem to liczba 255 nie oznacza wcale 255 tylko -127;] zatem
-127-(+112) jak by nie bylo daje ujemna liczbe.

Darek
Guest

Tue Jan 16, 2007 11:20 am   



Quote:
Jest sobie kod:

IMPULS:
cli
in czas,TCNT0
clr temp ;czyszczenie flag signed i negative
subi czas,112
brmi ALARM

Problem w tym , że nawet jeśli rejestr liczący timera ma 255, to w wyniku
odejmowania dostaje zawsze wynik negatywny Sad

w jaki sposób masz zadeklarowaną zmienna czas? Jest to jeden z
rejestrów R16-R31?

i czy przypadkiem zapis nie powinien wyglądać tak:
subi czas,$112

Pozdrawiam
Darek

Piotrek Sz.
Guest

Tue Jan 16, 2007 12:40 pm   



scx <es-ce-iks-7@wu-pe.pe-el> napisał(a):

Quote:
Dnia Tue, 16 Jan 2007 10:21:42 +0100, scx napisał(a):

?!?!?!

ldi czas,0xff
subi czas,112

I też mam ustawioną flagę "negative"! Od kiedy 255 - 112 < 0?

Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze

Hmmm...
Traktujesz swoje dane jako liczby bez znaku , a sprawdzasz wskaźniki dla
operacji na liczbach ze znakiem , czyli U2.Gdybyś napisał co chcesz osiąnąć ,
to wtedy - kto wie ;-)

Piotrek


--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

RoMan Mandziejewicz
Guest

Tue Jan 16, 2007 2:28 pm   



Hello Robert,

Tuesday, January 16, 2007, 11:16:28 AM, you wrote:

Quote:
?!?!?!
ldi czas,0xff
subi czas,112
I też mam ustawioną flagę "negative"! Od kiedy 255 - 112 < 0?
Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze
flaga N ustawiana jest zawsze kiedy w wyniku ustawiony jest najbardziej
znaczacy bit ktory stanowi o znaku danej liczby. Jezeli operujesz na
liczbach ze znakiem to liczba 255 nie oznacza wcale 255 tylko -127;]

A nie -1?

Quote:
zatem -127-(+112) jak by nie bylo daje ujemna liczbe.

--
Best regards,
RoMan mailto:roman@pik-net.pl

Robert Z.
Guest

Tue Jan 16, 2007 2:54 pm   



Użytkownik "RoMan Mandziejewicz" <roman@pik-net.pl> napisał w wiadomości
news:1527960466.20070116142852@pik-net.pl...
Quote:
Hello Robert,

Tuesday, January 16, 2007, 11:16:28 AM, you wrote:

?!?!?!
ldi czas,0xff
subi czas,112
I też mam ustawioną flagę "negative"! Od kiedy 255 - 112 < 0?
Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze
flaga N ustawiana jest zawsze kiedy w wyniku ustawiony jest najbardziej
znaczacy bit ktory stanowi o znaku danej liczby. Jezeli operujesz na
liczbach ze znakiem to liczba 255 nie oznacza wcale 255 tylko -127;]

A nie -1?

zatem -127-(+112) jak by nie bylo daje ujemna liczbe.

--
Best regards,
RoMan mailto:roman@pik-net.pl


Masz oczywiscie racje, pomylilem sie i niemam nic na swoje usprawiedliwienie
;-]

pozdrawiam

Marek Wodzinski
Guest

Tue Jan 16, 2007 5:30 pm   



scx wrote:
Quote:
Jest sobie kod:
IMPULS:
cli
in czas,TCNT0
clr temp ;czyszczenie flag signed i negative
subi czas,112
brmi ALARM

Problem w tym , że nawet jeśli rejestr liczący timera ma 255, to w wyniku
odejmowania dostaje zawsze wynik negatywny Sad

Jak nie używasz liczb ze znakiem, to sprawdzaj carry, a nie sign.


pozdrawiam

majek
--
"If you want something done...do yourself!"
Jean-Baptiste Emmanuel Zorg

scx
Guest

Tue Jan 16, 2007 9:14 pm   



Dnia Tue, 16 Jan 2007 17:30:18 +0100, Marek Wodzinski napisał(a):

Quote:
scx wrote:
Jest sobie kod:
IMPULS:
cli
in czas,TCNT0
clr temp ;czyszczenie flag signed i negative
subi czas,112
brmi ALARM

Problem w tym , że nawet jeśli rejestr liczący timera ma 255, to w wyniku
odejmowania dostaje zawsze wynik negatywny :(

Jak nie używasz liczb ze znakiem, to sprawdzaj carry, a nie sign.

i to właśnie jest prawidłowa odpowiedź Razz
zamiast brmi - brcs

Dziękuję wszystkim za podpowiedzi, a szczególnie Robertowi za uświadomienie
mnie w kwestii reprezentacji liczb ujemnych Smile
I tak dzień po dniu człowiek się mądrzejszy robi :P

Urządzonko już pięknie śmiga - jest to ostrzegacz o przekroczeniu 5000
obrotów silnika + przypominacz o zapięciu pasów.
Jutro będzie testowany w naturze, a biurku działa OK.

Szymon Kubicki
Guest

Tue Jan 16, 2007 10:59 pm   



Dnia 16-01-2007 o 10:40:59 scx <es-ce-iks-7@wu-pe.pe-el> napisał(a):

Quote:
Aha: AVRStudio 4.12, Attiny12, testuję program we wbudowanym symulatorze

Dorzuce jeszcze od siebie to co sam nie dawno tutaj na grupie uslyszalem:
nie ufaj symulatorowi. Ostatnio symulator pokazywal jakies dziwolagi
natomiast zaprogramowana atmega dziala prawidlowo. Wiec zalecam ostroznosc.

pozdrawiam

--
Szymon

elektroda NewsGroups Forum Index - Elektronika Polska - Odejmowanie w Assemblerze AVR: problem z negatywnym wynikiem przy wartości 255

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map