🚀 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 sztuczny inteligent Sun, 18 May 2008 04:11
c2asm — pętla
#1817
Author: sztuczny inteligent
Date: Sun, 18 May 2008 04:11
14 lines
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
#1818
Author: Bogdan (bogdro)
Date: Sun, 18 May 2008 12:18
28 lines
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
#1819
Author: Wojciech Muła
Date: Sun, 18 May 2008 19:18
16 lines
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