🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.asm
Article #2360

Re: ADD SUB kontra INC DEC

#2360
From: yesma
Date: Wed, 11 Aug 2010 19:10
81 lines
3510 bytes
Michoo pisze:
> yesma pisze:
>> Michoo pisze:
>>> Jeżeli robisz operacje na liczbach złożonych z 2 słów procesora to 
>>> normalnie inkrementację zrobisz tak (eax,ebx - liczba):
>>> add ebx,1
>>> adc eax,0
>>>
>>
>> Chyba zaczynam coś rozumieć pierwsze add może ustawić CF a INC akurat
>> tej flagi nie ustawia, adc ją dodaje
>>
> Dokładnie.
> 
>>> a przy inc będzie to coś takiego:
>>> inc ebx
>>> jno skip ;jz chyba też zadziała dla unsigned
>>> inc eax
>>> skip: ...
>>>
>>> z dec podobnie
>>>
>>
>> ale tutaj chyba nie rozumiem , jno skip czy jo skip?
> Zwiększ jeżeli był overflow, czyli Jeżeli Nie wystąpił Overflow to nie 
> zwiększaj.

To z overflow ciężko mi zrozumieć bo niewiem kiedy
ta flaga jest ustawiana, jakoś słabo udokumentowana,
pewnie kiedyś gdzieś przeczytałem ale wyleciało mi
z pamięci bo nie używałem tej flagi.

> 
> To jest ogólna metoda tworzenia warunków w assemblerze - mamy w C:
> [...]
> --i;
> if(i==0)//JEŻELI WARUNEK SPEŁNIONY - wykonaj kod
>     foo();
> foo_bar();
> [...]
> 
> i kompilujemy to:
>     dec edx
>     jnz skip ;JEŻELI WARUNEK NIESPEŁNIONY - omiń kod
>     call foo
> skip:
>     call foo_bar
> 
> zaoszczędzamy w ten sposób jeden skok w przypadku gdy warunek jest 
> spełniony - po zrealizowaniu bloku if przechodzimy od razu do następnej 
> instrukcji.

a to rozumiem i też tak robię ale na P4 sub,1 jest szybsze
niż dec i też ustawi ZF, ale jeżeli chodzi o kod niekoniacznie
najszybki to będę nadal używał dec inc :)

> 
> W przypadku if ... else ... na końcu bloku if i tak musimy wykonać skok 
> bezwarunkowy, więc stosuje się inne optymalizacje:
> if(a) foo(); else bar(); jest tożsame z if(!a) bar(); else foo();
> więc możemy zamienić kolejność bloków gdy jeden warunek liczy się 
> prościej niż drugi.
> jako pierwszy dajemy ten blok który się częściej wykona - na starych x86 
> (i na risc) często skok to 2 cykle, brak skoku - 1)

też przeważnie to biorę pod uwagę (możliwość która jest bardziej
prawdopodobna pierwsza :)

> jeżeli są równie prawdopodobne to jako pierwszy dajemy blok, który jest 
> krótszy - żeby cel skoku przy ominięciu był w L1
> 

a o tym to jeszcze nie myślałem.
Tylko jak wyliczyć czy się zmieści w L1 czy nie ?, kod przed też chyba
może się znajdować w L1 ?. krótszy napewno
prędzej się tam zmieści więc trzeba się tego trzymać :)
Dzięki

-- 
Pozdrawiam - Grzechu
Linux x86_64
Technical Details
Message-ID: <i3usl1$gfv$1@inews.gazeta.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
References: <i24eks$ec7$1@inews.gazeta.pl> <i292oj$jgo$1@newsread1.aster.pl> <i29va9$gkc$1@inews.gazeta.pl> <i2a8p8$soh$1@news.onet.pl> <i2ac42$4s6$1@inews.gazeta.pl> <i2f5m4$36f$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
From: yesma <yesma@false.pl>
Newsgroups: pl.comp.lang.asm
Subject: Re: ADD SUB kontra INC DEC
Date: Wed, 11 Aug 2010 21:10:06 +0200
Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
Lines: 81
Message-ID: <i3usl1$gfv$1@inews.gazeta.pl>
References: <i24eks$ec7$1@inews.gazeta.pl> <i292oj$jgo$1@newsread1.aster.pl> <i29va9$gkc$1@inews.gazeta.pl> <i2a8p8$soh$1@news.onet.pl> <i2ac42$4s6$1@inews.gazeta.pl> <i2f5m4$36f$1@news.onet.pl>
Reply-To: yesma@false.pl
NNTP-Posting-Host: user14-095.satfilm.net.pl
Mime-Version: 1.0
X-Trace: inews.gazeta.pl 1281553889 16895 77.91.14.95 (11 Aug 2010 19:11:29 GMT)
X-Complaints-To: usenet@agora.pl
NNTP-Posting-Date: Wed, 11 Aug 2010 19:11:29 +0000 (UTC)
X-User: yesma
User-Agent: Mozilla-Thunderbird 2.0.0.24 (X11/20100329)
In-Reply-To: <i2f5m4$36f$1@news.onet.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit