assembly

entry40 galeri
    39.
  1. iki integeri toplayan basit bir kaynak kodu düşünün:

    #include <stdio.h>

    int main() {
    int sayi1 = 34343;
    int sayi2 = 823482;
    int toplam = sayi1 + sayi2;

    printf("Toplam: %d\n", toplam);

    return 0;
    }

    ilk aşamada Preprocessing de, #include <stdio.h> ifadesiyle belirttiğimiz stio.h (input output header ı başlığı ) uzantılı dosya bu kaynak kodun içine entegre edilir.
    https://galeri.uludagsozluk.com/r/2381135/+

    önişleme safhasından geçen kod, assembly edilerek obje dosyasına dönüştürülür.

    .file "program.c"
    .text
    .section .rodata
    .LC0:
    .string "Toplam: %d\n"
    .text
    .globl main
    .type main, @function
    main:
    .LFB0:
    .cfi_startproc
    endbr64
    pushq %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq %rsp, %rbp
    .cfi_def_cfa_register 6
    subq $16, %rsp
    movl $34343, -12(%rbp)
    movl $823482, -8(%rbp)
    movl -12(%rbp), %edx
    movl -8(%rbp), %eax
    addl %edx, %eax
    movl %eax, -4(%rbp)
    movl -4(%rbp), %eax
    movl %eax, %esi
    leaq .LC0(%rip), %rax
    movq %rax, %rdi
    movl $0, %eax
    call printf@PLT
    movl $0, %eax
    leave
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
    .LFE0:
    .size main, .-main
    .ident "GCC: (Ubuntu 13.2.0-23ubuntu4) 13.2.0"
    .section .note.GNU-stack,"",@progbits
    .section .note.gnu.property,"a"
    .align 8
    .long 1f - 0f
    .long 4f - 1f
    .long 5
    0:
    .string "GNU"
    1:
    .align 8
    .long 0xc0000002
    .long 3f - 2f
    2:
    .long 0x3
    3:
    .align 8
    4:

    bu programın düşük ve yüksek voltaj değerleriyle elektrik sinyallerine dönüştürülmeden önceki son halidir.
    0 ...