Article View: pl.comp.lang.asm
Article #2360Re: ADD SUB kontra INC DEC
From: yesma
Date: Wed, 11 Aug 2010 19:10
Date: Wed, 11 Aug 2010 19:10
81 lines
3510 bytes
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-mailReferences:
<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