Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by Johnny
Fri, 16 Jun 2006 13:28
Flagi
Author: Johnny
Date: Fri, 16 Jun 2006 13:28
Date: Fri, 16 Jun 2006 13:28
18 lines
1304 bytes
1304 bytes
Nie mam chyba szczęścia do opisu flag - mam problem z dwoma: carry i overflow. Czytam, że carry odnosi się do operacji arytmetycznych bez znaku a overflow do operacji ze znakiem. Wprowadzam coś takiego: sub ah,80 i ustawiają się oba znaczniki naraz. Czy ktoś mógłby (najlepiej na przykładach) wytłumaczyć kiedy każdy z tych znaczników się zmienia; co to znaczy operacja arytmetyczna ze znakiem i bez, czy to oznacza że najwyższy bit jednego z argumentów jest ustawiony? Z góry dziękuję. -- Pozdrawiam Johnny
Re: Flagi
Author: Bogdan (bogdro)
Date: Fri, 16 Jun 2006 15:47
Date: Fri, 16 Jun 2006 15:47
45 lines
2735 bytes
2735 bytes
Johnny napisał(a): > Nie mam chyba szczęścia do opisu flag - mam problem z dwoma: carry i > overflow. Czytam, że carry odnosi się do operacji arytmetycznych bez > znaku a overflow do operacji ze znakiem. > > Wprowadzam coś takiego: > sub ah,80 > i ustawiają się oba znaczniki naraz. > > Czy ktoś mógłby (najlepiej na przykładach) wytłumaczyć kiedy każdy z > tych znaczników się zmienia; co to znaczy operacja arytmetyczna ze > znakiem i bez, czy to oznacza że najwyższy bit jednego z argumentów jest > ustawiony? Działając na liczbach 8-bitowych: -120 - 30 = -150 < -128 => ustawi OF 120 + 20 = 140 > 127 => ustawi OF 250 + 20 = 270 > 255 => ustawi CF 30 - 40 = -10 => ustawi CF Jeśli działanie "przebija" od dołu -128 lub od góry 127, ustawiana jest OF. Jeśli działanie "przebija" od dołu 0 lub od góry 255, ustawiana jest CF. Tzw. "ze znakiem" czy "bez znaku" to nie tyle sama operacja, co interpretacja jej wyników. Liczby 8-bitowe traktowane jako bez znaku to 0, 1, ..., 255, a ze znakiem: -128, -127, ..., +127. Jeśli pierwszy mój przykład traktować jako bez znaku, to mamy: +135 - 30 = 105. Nie nastąpiło przebicie 255 ani 0, więc CF=0. W drugim przykładzie: 120+20 = 140, też nie pzrebija, też CF=0. W trzecim, traktowanym jak ze znakiem: -6 + 20 = +14, nie przebija -128 ani +127, więc OF=0. W czwartym: 30-40=-10, też nie przebija, też OF=0. Działanie "127+200" ustawi obie flagi (wynik przebija i 127 i 255 w górę), podobnie "1-200" (wynik przebija i -128 i 0 w dół). -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: Flagi
Author: Johnny
Date: Fri, 16 Jun 2006 19:21
Date: Fri, 16 Jun 2006 19:21
4 lines
1067 bytes
1067 bytes
Dzięki. Chyba sobie to wydrukuję i powieszę na ścianie ;-) -- Johnny
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads