Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by sztuczny inteligent
Sun, 18 May 2008 04:11
c2asm — pętla
Author: sztuczny inteligent
Date: Sun, 18 May 2008 04:11
Date: Sun, 18 May 2008 04:11
14 lines
1304 bytes
1304 bytes
Dlaczego kompilatory języka C zwykle tłumaczą
test zawarty w warunku pętli “while(){}”
jako rozkaz “cmpl $stała,%rejestr” na architekturze x86, mimo że mogłyby korzystać z tego, że
ostatni rozkaz w bloku pętli ustawia flagę ZF bądź CF i OF, np. “
0: …
subl %ebx,%eax
# cmpl $0,%eax
jnz 0b
”
--
qo |) CPL<=dataDPL CPL==/>=codeDPL:conform'/nc';max=CPL! AV0ID bHp
_x/ , CPL<=TSS,gateDPL CPL>=/==dest_DPL:/(jmp&nc') ,RPL!- #GP -o0o
| ng __ -- __ -- __ -- __ -- __ -- __ -- __ -- __ -x86-, EV3RY o0o
,__ -- __ -- Current/Requested/DescriptorPrivilegeLevel C/R/DPL , d4y m:#=
Re: c2asm — pętla
Author: Bogdan (bogdro)
Date: Sun, 18 May 2008 12:18
Date: Sun, 18 May 2008 12:18
28 lines
2149 bytes
2149 bytes
sztuczny inteligent pisze:
> Dlaczego kompilatory języka C zwykle tłumaczą
> test zawarty w warunku pętli “while(){}”
> jako rozkaz “cmpl $stała,%rejestr” na architekturze x86, mimo że mogłyby korzystać z tego, że
> ostatni rozkaz w bloku pętli ustawia flagę ZF bądź CF i OF, np. “
> 0: …
> subl %ebx,%eax
> # cmpl $0,%eax
> jnz 0b
> ”
Po pierwsze: czy włączyłeś optymalizacje? Jeśli nie, to nie ma co
się dziwić - kod asma jest bardzo nieoptymalny.
Po drugie: skąd wiesz, że zawsze ostatnią instrukcją pętli będzie
SUB? Może to być np. DEC (niezmieniające CF). OF nie zmienia się
podczas przechodzenia przez zero.
Po trzecie: nie wszystkie pętle kończą się na zerze. CMP jest
ogólne. Oczywiście, że kompilatory powinny rozróżniać ten szczególny
przypadek, ale widać nie wszystkie to robią (jeśli włączyłeś
optymalizacje).
Po czwarte: to w całości wydaje mi się dziwne, bo warunek w pętli
while sprawdzany jest u góry, nie u dołu pętli.
--
Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.JabberPL.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: c2asm — pętla
Author: Wojciech Muła
Date: Sun, 18 May 2008 19:18
Date: Sun, 18 May 2008 19:18
16 lines
1483 bytes
1483 bytes
sztuczny inteligent <slijkurwa-usenet@yahoo.com> wrote:
> Dlaczego kompilatory języka C zwykle tłumaczą
> test zawarty w warunku pętli “while(){}”
> jako rozkaz “cmpl $stała,%rejestr” na architekturze x86, mimo że mogłyby korzystać z tego, że
> ostatni rozkaz w bloku pętli ustawia flagę ZF bądź CF i OF, np. “
> 0: …
> subl %ebx,%eax
> # cmpl $0,%eax
> jnz 0b
> ”
Sekwencja cmp/jcc jest traktowana na współczesnych procesorach jako jeden
rozkaz, więc kompilator przy optymalizacji raczej może to tak zostawić.
w.
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