assembler

Michal Ludvig michal-linux na logix.cz
Úterý Srpen 20 08:33:48 CEST 2002


Miloslav Trmac wrote:
> Michal Ludvig <michal-linux na logix.cz> wrote in message news:<3D60E459.6050700 na logix.cz>...
> 
>>00000000 <.text>:
>>    0:   bb ef be ad de          mov    $0xdeadbeef,%ebx
>>    5:   8d 76 00                lea    0x0(%esi),%esi
>>
>>(pozn. proc se tam navic dalo 'lea 0x0...' netusim a ted po tom patrat 
>>nebudu).
> 
> Zrejme zarovnani na 4 (8?) bytu.

To bezpochyby ano, ale proc tam nedava treba NOPy? Mozna ze je to takhle 
rychlejsi. Kdyz mu vnutim zarovnani na 16B, tak vysledny kod vypada takhle:
00000000 <.text>:
    0:   bb ef be ad de          mov    $0xdeadbeef,%ebx
    5:   8d 74 26 00             lea    0x0(%esi,1),%esi
    9:   8d bc 27 00 00 00 00    lea    0x0(%edi,1),%edi

Kdyz prelozim ten stejny kod (s .align 16) na x86-64 tak je tam spousta 
prave tech NOPu:
$ objdump -d tst.o

tst.o:     file format elf64-x86-64prelozi

Disassembly of section .text:

0000000000000000 <.text>:
    0:   bb ef be ad de          mov    $0xdeadbeef,%ebx
    5:   90                      nop
    6:   90                      nop
    7:   90                      nop
    8:   90                      nop
    9:   90                      nop
    a:   90                      nop
    b:   90                      nop
    c:   90                      nop
    d:   90                      nop
    e:   90                      nop
    f:   90                      nop

A kdyz po x86-64 assembleru chci prelozit jen ten mov, tak ve vysledku 
je opravdu jen ten mov a je mu uplne jedno, ze to je 5 bajtu. Asi zalezi 
i na linkeru, jak si s tim poradi a assembler vi, co si muze dovolit.

Michal Ludvig



Další informace o konferenci Linux