Hello World w Asm

Odpowiedz Nowy wątek
2014-11-15 16:51
0

Jestem zmuszony teraz nauczyć się na poważnie asm. Wcześniej coś sobie pisałem, ale raczej nie by się nauczyć, tylko by zaliczyć. Teraz mam problem, bo nie mogę zrozumieć dlaczego kod asm HelloWorld napisany przeze mnie, różni się od tego który mi zwrócił kompilator gcc z opcją -S i -O2. Myślałem, ze po optymalizacji dostane praktycznie linia w linie to samo.
Kod kompilatora:

    .file   "main.c"
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC0:
    .string "Hello World"
    .section    .text.unlikely,"ax",@progbits
.LCOLDB1:
    .section    .text.startup,"ax",@progbits
.LHOTB1:
    .p2align 4,,15
    .globl  main
    .type   main, @function
main:
.LFB24:
    .cfi_startproc
    subq    $8, %rsp
    .cfi_def_cfa_offset 16
    movl    $.LC0, %edi
    call    puts
    xorl    %eax, %eax
    addq    $8, %rsp
    .cfi_def_cfa_offset 8
    ret
    .cfi_endproc
.LFE24:
    .size   main, .-main
    .section    .text.unlikely
.LCOLDE1:
    .section    .text.startup
.LHOTE1:
    .ident  "GCC: (Ubuntu 4.9.1-16ubuntu6) 4.9.1"
    .section    .note.GNU-stack,"",@progbits

I mój:

section     .text
global      _start                             

_start:                                         

    mov     edx,len                           
    mov     ecx,msg                             
    mov     ebx,1                               
    mov     eax,4                              
    int     0x80                               
    mov     eax,1                              
    int     0x80                                

section     .data

msg     db  'Hello, world!',0xa                 
len     equ $ - msg 

Pozostało 580 znaków

2014-11-15 17:26
0

Gdybyś użył GAS (gnu asm) i umieścił wszystkie informacje, jakie umieszcza kompilator to wyszedłby Ci podobny kod.

W zupełnie inny sposób wyświetlasz swój napis - używasz przerwania.
W kodzie wygenerowanym przez kompilator używana jest funkcja puts (stdio.h)

Luźnymi słowami: Użyłeś zupełnie innego języka i zupełnie innego sposobu.

edytowany 3x, ostatnio: spartanPAGE, 2014-11-15 17:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0