🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
3 messages
3 total messages Started by Johnny Fri, 16 Jun 2006 13:28
Flagi
#346
Author: Johnny
Date: Fri, 16 Jun 2006 13:28
18 lines
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
#347
Author: Bogdan (bogdro)
Date: Fri, 16 Jun 2006 15:47
45 lines
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
#348
Author: Johnny
Date: Fri, 16 Jun 2006 19:21
4 lines
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