Skip to content Skip to sidebar Skip to footer

[TUTORIAL] Cara mengubah (Konversi) Bahasa C ke Assembly dengan GCC (Menggunakan VS Code)

Assalamu‘alaikum wr. wb.

Hello guys, Kembali lagi bersama Inzaghi's Blog! Jika kalian ingin mempelajari Bahasa Pemrograman Tingkat Rendah seperti Assembly tapi kesulitan untuk memahami Sintaks kodenya, Nah solusinya adalah dengan membuatnya menggunakan Bahasa C kemudian dikonversikan ke Bahasa Rakitan/Assembly. Pada Postingan ini, saya akan memberikan Tutorial Konversi dari Bahasa C ke Assembly dengan GCC di VS Code.



Sumber Artikel : Situstarget.com dan Geeksforgeeks.org

Memang sih, Bahasa Assembly sulit dipelajari terutama bagi Pemula karena merupakan Bahasa Tingkat Rendah yang digunakan dalam Pemrograman Komputer, Mikroprosesor, Pengendali Mikro, dan perangkat lainnya yang dapat diprogram. Bahasa Assembly juga merupakan Bahasa yang lebih mudah dipahami oleh Komputer karena mendekati Bahasa Mesin.


Sedangkan, Bahasa Pemrograman C merupakan salah satu Bahasa Pemrograman Komputer. Dibuat pada Tahun 1972 oleh Dennis Ritchie untuk Sistem Operasi Unix di Bell Telephone Laboratories. Meskipun C dibuat untuk memprogram sistem dan jaringan komputer namun bahasa ini juga sering digunakan dalam mengembangkan software aplikasi.

Sintaks untuk mengubah ke Assembly : 

$ gcc -S filename.c

Tergantung Nama File C yang Anda namai, makanya ditulis sebagai "filename.c".

Mari kita lihat contohnya di bawah ini.

1. Program Sederhana (Hello World)

Pertama, kita buat terlebih dahulu Program dalam Bahasa C yang berjudul "hello.c". Anda bisa membuatnya dengan menggunakan Visual Studio Code (VS Code).

#include <stdio.h>

int main() {
    printf("Hello world!");
    return 0;
}
Kemudian, kita ketik :

gcc -S hello.c

Maka, File Assembly akan dibuat secara Otomatis oleh Kompailer (Compiler) GCC. Inilah Gambar-nya :


Maka, akan seperti ini File dalam Bahasa Assembly yang bernama "hello.s" :

    .file   "main.c"
    .text
    .def    __main; .scl    2;  .type   32; .endef
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $48, %rsp
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    movl    $6, -4(%rbp)
    movl    $4, -8(%rbp)
    movl    -8(%rbp), %edx
    movl    -4(%rbp), %eax
    movl    %eax, %ecx
    call    add
    movl    %eax, -12(%rbp)
    movl    $0, %eax
    addq    $48, %rsp
    popq    %rbp
    ret
    .seh_endproc

    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    add;    .scl    2;  .type   32; .endef
Memang, Baris kodenya lebih panjang dan lebih banyak jika diubah ke Bahasa Assembly. Karena setiap Baris indentasi dalam kode di atas sesuai dengan instruksi mesin tunggal. Misalnya, instruksi pushq  menunjukkan bahwa isi register %rbp harus didorong ke tumpukan program. Semua informasi tentang nama variabel lokal atau tipe data telah dihapus.

Mari kita ambil contoh lain yang ada di bawah ini :

2. Penjumlahan Sederhana

Sama seperti diatas, kita buat terlebih dahulu Program dalam Bahasa C yang berjudul "addition.c".

#include <stdio.h>

int main(){
    int a, b, c;
   
    a = 1;
    b = 2;
    c = a+b;
   
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("a + b = %d", c);
}
Kemudian, kita ketik :

gcc -S addition.c

Maka, File Assembly akan dibuat secara Otomatis oleh Kompailer (Compiler) GCC. Inilah Gambar-nya :


Maka, akan seperti ini File dalam Bahasa Assembly yang bernama "addition.s" :

    .file   "addition.c"
    .text
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "a = %d\12\0"
.LC1:
    .ascii "b = %d\12\0"
.LC2:
    .ascii "a + b = %d\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $48, %rsp
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    movl    $1, -4(%rbp)
    movl    $2, -8(%rbp)
    movl    -4(%rbp), %edx
    movl    -8(%rbp), %eax
    addl    %edx, %eax
    movl    %eax, -12(%rbp)
    movl    -4(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC0(%rip), %rcx
    call    printf
    movl    -8(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC1(%rip), %rcx
    call    printf
    movl    -12(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC2(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $48, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef
Begitupun seterusnya, dan untuk berikutnya saya tidak akan menjelaskan secara panjang lebar lagi.

3. Fungsi Operasi Hitung

Nama File : aritmethic_function.c

#include <stdio.h>

float tambah(float x, float y){
    return (x+y);
}

float kurang(float x, float y){
    return (x-y);
}

float kali(float x, float y){
    return (x*y);
}

float bagi(float x, float y){
    return (x/y);
}


int main(){
    int add, sub, mul;
    float dvd;
    int a = 9;
    int b = 4;
    add = tambah(a, b);
    sub = kurang(a, b);
    mul = kali(a, b);
    dvd = bagi(a, b);
   
    printf("a = %d, b = %d\n", a, b);
    printf("a + b = %d\n", add);
    printf("a - b = %d\n", sub);
    printf("a * b = %d\n", mul);
    printf("a / b = %.2f\n", dvd);
}
Ketik :

gcc -S aritmethic_function.c

Kode dalam Bahasa Assembly GCC (aritmethic_function.s) :

    .file   "aritmethic_function.c"
    .text
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .globl  tambah
    .def    tambah; .scl    2;  .type   32; .endef
    .seh_proc   tambah
tambah:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    .seh_endprologue
    movss   %xmm0, 16(%rbp)
    movss   %xmm1, 24(%rbp)
    movss   16(%rbp), %xmm0
    addss   24(%rbp), %xmm0
    popq    %rbp
    ret
    .seh_endproc
    .globl  kurang
    .def    kurang; .scl    2;  .type   32; .endef
    .seh_proc   kurang
kurang:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    .seh_endprologue
    movss   %xmm0, 16(%rbp)
    movss   %xmm1, 24(%rbp)
    movss   16(%rbp), %xmm0
    subss   24(%rbp), %xmm0
    popq    %rbp
    ret
    .seh_endproc
    .globl  kali
    .def    kali;   .scl    2;  .type   32; .endef
    .seh_proc   kali
kali:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    .seh_endprologue
    movss   %xmm0, 16(%rbp)
    movss   %xmm1, 24(%rbp)
    movss   16(%rbp), %xmm0
    mulss   24(%rbp), %xmm0
    popq    %rbp
    ret
    .seh_endproc
    .globl  bagi
    .def    bagi;   .scl    2;  .type   32; .endef
    .seh_proc   bagi
bagi:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    .seh_endprologue
    movss   %xmm0, 16(%rbp)
    movss   %xmm1, 24(%rbp)
    movss   16(%rbp), %xmm0
    divss   24(%rbp), %xmm0
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "a = %d, b = %d\12\0"
.LC1:
    .ascii "a + b = %d\12\0"
.LC2:
    .ascii "a - b = %d\12\0"
.LC3:
    .ascii "a * b = %d\12\0"
.LC4:
    .ascii "a / b = %.2f\12\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $64, %rsp
    .seh_stackalloc 64
    .seh_endprologue
    call    __main
    movl    $9, -4(%rbp)
    movl    $4, -8(%rbp)
    pxor    %xmm0, %xmm0
    cvtsi2ssl   -8(%rbp), %xmm0
    pxor    %xmm2, %xmm2
    cvtsi2ssl   -4(%rbp), %xmm2
    movd    %xmm2, %eax
    movaps  %xmm0, %xmm1
    movd    %eax, %xmm0
    call    tambah
    cvttss2sil  %xmm0, %eax
    movl    %eax, -12(%rbp)
    pxor    %xmm0, %xmm0
    cvtsi2ssl   -8(%rbp), %xmm0
    pxor    %xmm3, %xmm3
    cvtsi2ssl   -4(%rbp), %xmm3
    movd    %xmm3, %eax
    movaps  %xmm0, %xmm1
    movd    %eax, %xmm0
    call    kurang
    cvttss2sil  %xmm0, %eax
    movl    %eax, -16(%rbp)
    pxor    %xmm0, %xmm0
    cvtsi2ssl   -8(%rbp), %xmm0
    pxor    %xmm4, %xmm4
    cvtsi2ssl   -4(%rbp), %xmm4
    movd    %xmm4, %eax
    movaps  %xmm0, %xmm1
    movd    %eax, %xmm0
    call    kali
    cvttss2sil  %xmm0, %eax
    movl    %eax, -20(%rbp)
    pxor    %xmm0, %xmm0
    cvtsi2ssl   -8(%rbp), %xmm0
    pxor    %xmm5, %xmm5
    cvtsi2ssl   -4(%rbp), %xmm5
    movd    %xmm5, %eax
    movaps  %xmm0, %xmm1
    movd    %eax, %xmm0
    call    bagi
    movd    %xmm0, %eax
    movl    %eax, -24(%rbp)
    movl    -8(%rbp), %edx
    movl    -4(%rbp), %eax
    movl    %edx, %r8d
    movl    %eax, %edx
    leaq    .LC0(%rip), %rcx
    call    printf
    movl    -12(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC1(%rip), %rcx
    call    printf
    movl    -16(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC2(%rip), %rcx
    call    printf
    movl    -20(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC3(%rip), %rcx
    call    printf
    pxor    %xmm0, %xmm0
    cvtss2sd    -24(%rbp), %xmm0
    movq    %xmm0, %rax
    movq    %rax, %rdx
    movq    %rdx, %xmm0
    movapd  %xmm0, %xmm1
    movq    %rax, %rdx
    leaq    .LC4(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $64, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef

3. Array Sederhana

Nama File : array.c

#include <stdio.h>

int main() {
    int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
    x[0] = 5;
   
    printf("%d\n", x[0]);
    printf("%d\n", x[6]);
   
    int length = sizeof(x)/sizeof(x[0]);    
    for (int i = 0; i < length; i++) {    
        printf("%d ", x[i]);    
    }    
}
Ketik :

gcc -S array.c

Kode dalam Bahasa Assembly GCC (array.s) :

    .file   "array.c"
    .text
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "%d\12\0"
.LC1:
    .ascii "%d \0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $80, %rsp
    .seh_stackalloc 80
    .seh_endprologue
    call    __main
    movl    $1, -48(%rbp)
    movl    $2, -44(%rbp)
    movl    $3, -40(%rbp)
    movl    $4, -36(%rbp)
    movl    $5, -32(%rbp)
    movl    $6, -28(%rbp)
    movl    $7, -24(%rbp)
    movl    $8, -20(%rbp)
    movl    $9, -16(%rbp)
    movl    $5, -48(%rbp)
    movl    -48(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC0(%rip), %rcx
    call    printf
    movl    -24(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC0(%rip), %rcx
    call    printf
    movl    $9, -8(%rbp)
    movl    $0, -4(%rbp)
    jmp .L4
.L5:
    movl    -4(%rbp), %eax
    cltq
    movl    -48(%rbp,%rax,4), %eax
    movl    %eax, %edx
    leaq    .LC1(%rip), %rcx
    call    printf
    addl    $1, -4(%rbp)
.L4:
    movl    -4(%rbp), %eax
    cmpl    -8(%rbp), %eax
    jl  .L5
    movl    $0, %eax
    addq    $80, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef

4. Pointer Sederhana

Nama File : pointer.c

#include <stdio.h>

int main() {

   int var1;
   char var2[10];

   printf("Alamat dari variabel var1 adalah : %x\n", &var1);
   printf("Alamat dari variabel var2 adalah : %x\n", &var2);

   return 0;
}
Ketik :

gcc -S pointer.c

Kode dalam Bahasa Assembly GCC (pointer.s) :

    .file   "pointer.c"
    .text
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
    .align 8
.LC0:
    .ascii "Alamat dari variabel var1 adalah : %x\12\0"
    .align 8
.LC1:
    .ascii "Alamat dari variabel var2 adalah : %x\12\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $48, %rsp
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    leaq    -4(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC0(%rip), %rcx
    call    printf
    leaq    -14(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC1(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $48, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef

5. Swap Program Sederhana

Nama File : swap.c

#include <stdio.h>

int swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int x = 5;  
    int y = 10;
    printf("%d", swap(&x, &y));
   
    return 0;
}
Ketik :

gcc -S swap.c

Kode dalam Bahasa Assembly GCC (swap.s) :

    .file   "swap.c"
    .text
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .globl  swap
    .def    swap;   .scl    2;  .type   32; .endef
    .seh_proc   swap
swap:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $16, %rsp
    .seh_stackalloc 16
    .seh_endprologue
    movq    %rcx, 16(%rbp)
    movq    %rdx, 24(%rbp)
    movq    16(%rbp), %rax
    movl    (%rax), %eax
    movl    %eax, -4(%rbp)
    movq    24(%rbp), %rax
    movl    (%rax), %edx
    movq    16(%rbp), %rax
    movl    %edx, (%rax)
    movq    24(%rbp), %rax
    movl    -4(%rbp), %edx
    movl    %edx, (%rax)
    nop
    addq    $16, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "%d\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $48, %rsp
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    movl    $5, -4(%rbp)
    movl    $10, -8(%rbp)
    leaq    -8(%rbp), %rdx
    leaq    -4(%rbp), %rax
    movq    %rax, %rcx
    call    swap
    movl    %eax, %edx
    leaq    .LC0(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $48, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef

6. Program Fungsi Ackermann

Nama File : ackermann.c

#include <stdio.h>

int ack(int m, int n){
    if (m == 0){
        return n + 1;
    }
    else if((m > 0) && (n == 0)){
        return ack(m - 1, 1);
    }
    else if((m > 0) && (n > 0)){
        return ack(m - 1, ack(m, n - 1));
    }
}

int main(){
    int x, y, A;
    printf("Ackermann Function A(x, y)\n");
    printf("Insert value of x : ");
    scanf("%d", &x);
    printf("Insert value of y : ");
    scanf("%d", &y);
    A = ack(x, y);
   
    printf("A(%d, %d) = %d", x, y, A);
   
    return 0;
}
Ketik :

gcc -S ackermann.c

Kode dalam Bahasa Assembly GCC (ackermann.s) :

    .file   "ackermann.c"
    .text
    .def    scanf;  .scl    3;  .type   32; .endef
    .seh_proc   scanf
scanf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $0, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfscanf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .globl  ack
    .def    ack;    .scl    2;  .type   32; .endef
    .seh_proc   ack
ack:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $32, %rsp
    .seh_stackalloc 32
    .seh_endprologue
    movl    %ecx, 16(%rbp)
    movl    %edx, 24(%rbp)
    cmpl    $0, 16(%rbp)
    jne .L6
    movl    24(%rbp), %eax
    addl    $1, %eax
    jmp .L5
.L6:
    cmpl    $0, 16(%rbp)
    jle .L8
    cmpl    $0, 24(%rbp)
    jne .L8
    movl    16(%rbp), %eax
    subl    $1, %eax
    movl    $1, %edx
    movl    %eax, %ecx
    call    ack
    jmp .L5
.L8:
    cmpl    $0, 16(%rbp)
    jle .L9
    cmpl    $0, 24(%rbp)
    jle .L9
    movl    24(%rbp), %eax
    subl    $1, %eax
    movl    %eax, %edx
    movl    16(%rbp), %ecx
    call    ack
    movl    %eax, %edx
    movl    16(%rbp), %eax
    subl    $1, %eax
    movl    %eax, %ecx
    call    ack
    jmp .L5
.L9:
.L5:
    addq    $32, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "Ackermann Function A(x, y)\12\0"
.LC1:
    .ascii "Insert value of x : \0"
.LC2:
    .ascii "%d\0"
.LC3:
    .ascii "Insert value of y : \0"
.LC4:
    .ascii "A(%d, %d) = %d\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $48, %rsp
    .seh_stackalloc 48
    .seh_endprologue
    call    __main
    leaq    .LC0(%rip), %rcx
    call    printf
    leaq    .LC1(%rip), %rcx
    call    printf
    leaq    -8(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC2(%rip), %rcx
    call    scanf
    leaq    .LC3(%rip), %rcx
    call    printf
    leaq    -12(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC2(%rip), %rcx
    call    scanf
    movl    -12(%rbp), %edx
    movl    -8(%rbp), %eax
    movl    %eax, %ecx
    call    ack
    movl    %eax, -4(%rbp)
    movl    -12(%rbp), %edx
    movl    -8(%rbp), %eax
    movl    -4(%rbp), %ecx
    movl    %ecx, %r9d
    movl    %edx, %r8d
    movl    %eax, %edx
    leaq    .LC4(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $48, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfscanf;    .scl    2;  .type   32; .endef
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef

7. Program Format Waktu (Nama Hari dan Bulan)

Nama File : day-and-month-name.c

#include <time.h>
#include <stdio.h>

int main() {
    char bufDay[32];
    struct tm *ts1;
    size_t last1;
    time_t nowDy = time(NULL);
    ts1   = localtime(&nowDy);
    last1 = strftime(bufDay, 32, "%A", ts1);
    bufDay[last1] = '\0';

    char bufMon[32];
    struct tm *ts2;
    size_t last2;
    time_t nowMn = time(NULL);
    ts2   = localtime(&nowMn);
    last2 = strftime(bufMon, 32, "%B", ts2);
    bufMon[last2] = '\0';


    printf("%s\n", bufDay);
    printf("%s\n", bufMon);
   
    return 0;
}
Ketik :

gcc -S day-and-month-name.c

Kode dalam Bahasa Assembly GCC (day-and-month-name.s) :

    .file   "day-and-month-name.c"
    .text
    .def    time;   .scl    3;  .type   32; .endef
    .seh_proc   time
time:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $32, %rsp
    .seh_stackalloc 32
    .seh_endprologue
    movq    %rcx, 16(%rbp)
    movq    16(%rbp), %rcx
    movq    __imp__time64(%rip), %rax
    call    *%rax
    addq    $32, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .def    localtime;  .scl    3;  .type   32; .endef
    .seh_proc   localtime
localtime:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $32, %rsp
    .seh_stackalloc 32
    .seh_endprologue
    movq    %rcx, 16(%rbp)
    movq    16(%rbp), %rcx
    movq    __imp__localtime64(%rip), %rax
    call    *%rax
    addq    $32, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "%A\0"
.LC1:
    .ascii "%B\0"
.LC2:
    .ascii "%s\12\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $160, %rsp
    .seh_stackalloc 160
    .seh_endprologue
    call    __main
    movl    $0, %ecx
    call    time
    movq    %rax, -72(%rbp)
    leaq    -72(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, -8(%rbp)
    movq    -8(%rbp), %rdx
    leaq    -64(%rbp), %rax
    movq    %rdx, %r9
    leaq    .LC0(%rip), %r8
    movl    $32, %edx
    movq    %rax, %rcx
    call    strftime
    movq    %rax, -16(%rbp)
    leaq    -64(%rbp), %rdx
    movq    -16(%rbp), %rax
    addq    %rdx, %rax
    movb    $0, (%rax)
    movl    $0, %ecx
    call    time
    movq    %rax, -120(%rbp)
    leaq    -120(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, -24(%rbp)
    movq    -24(%rbp), %rdx
    leaq    -112(%rbp), %rax
    movq    %rdx, %r9
    leaq    .LC1(%rip), %r8
    movl    $32, %edx
    movq    %rax, %rcx
    call    strftime
    movq    %rax, -32(%rbp)
    leaq    -112(%rbp), %rdx
    movq    -32(%rbp), %rax
    addq    %rdx, %rax
    movb    $0, (%rax)
    leaq    -64(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC2(%rip), %rcx
    call    printf
    leaq    -112(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC2(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $160, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef
    .def    strftime;   .scl    2;  .type   32; .endef

8. Program Sistem Penanggalan

Nama File : penanggalan.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int main(){
    int leap, thn, bln, tgl, har;
    int harke, harmun;
    int jam, mnt, dtk;
    double dateCal, persen, permun;

    char bufMon[32];
    struct tm *ts1;
    size_t last1;
    time_t nowMn = time(NULL);
    ts1   = localtime(&nowMn);
    last1 = strftime(bufMon, 32, "%B", ts1);
    bufMon[last1] = '\0';

    char bufDay[32];
    struct tm *ts2;
    size_t last2;
    time_t nowDy = time(NULL);
    ts2   = localtime(&nowDy);
    last2 = strftime(bufDay, 32, "%A", ts2);
    bufDay[last2] = '\0';

    char bufDate[32];
    struct tm *ts3;
    size_t last3;
    time_t nowDt = time(NULL);
    ts3   = localtime(&nowDt);
    last3 = strftime(bufDate, 32, "%A, %d %B %G", ts3);

    char bufTime[32];
    struct tm *ts4;
    size_t last4;
    time_t nowTm = time(NULL);
    ts4   = localtime(&nowTm);
    last4 = strftime(bufTime, 32, "%H:%M:%S", ts4);
    bufTime[last4] = '\0';

    time_t now;
    time(&now);
    struct tm *local_time = localtime(&now);
   
    thn = 1900 + local_time->tm_year;
    bln = 1 + local_time->tm_mon;
    tgl = local_time->tm_mday;
    har = local_time->tm_wday;
    harke = 1 + local_time->tm_yday;
    jam = local_time->tm_hour;
    mnt = local_time->tm_min;
    dtk = local_time->tm_sec;
 
    if (thn % 400 == 0){
        leap = 366;
    }
    else if (thn % 100 == 0){
        leap = 365;
    }
    else if (thn % 4 == 0){
        leap = 366;
    }
    else {
        leap = 365;
    }
 
    dateCal = (harke-1)+((double)jam/24)+((double)mnt/1440)+((double)dtk/86400);
    persen = (double)(100*dateCal/leap);
    harmun = 1+leap-harke;
    permun = 100-persen;


    printf("Tahun                    : %d\n", thn);
    printf("Bulan                    : %d (%s)\n", bln, bufMon);
    printf("Tanggal                  : %d\n", tgl);
    printf("Hari                     : %d (%s)\n", har, bufDay);
    printf("Hari ke (dalam Setahun)  : %d\n", harke);
    printf("Sisa Hari (Tahun depan)  : %d\n", harmun);
    printf("Persentase dalam Setahun : %f%\n", persen);
    printf("Persentase Hitung Mundur : %f%\n", permun);
    printf("Jam                      : %d\n", jam);
    printf("Menit                    : %d\n", mnt);
    printf("Detik                    : %d\n", dtk);


    printf("\n");
    printf("%s, %02d %s %d\n", bufDay, tgl, bufMon, thn);
    printf("Day-%d (%.4f%)\n", harke, persen);
    printf("%s", bufTime);
   
    return 0;
}
Ketik :

gcc -S penanggalan.c

Kode dalam Bahasa Assembly GCC (penanggalan.s) :

    .file   "penanggalan.c"
    .text
    .def    printf; .scl    3;  .type   32; .endef
    .seh_proc   printf
printf:
    pushq   %rbp
    .seh_pushreg    %rbp
    pushq   %rbx
    .seh_pushreg    %rbx
    subq    $56, %rsp
    .seh_stackalloc 56
    leaq    48(%rsp), %rbp
    .seh_setframe   %rbp, 48
    .seh_endprologue
    movq    %rcx, 32(%rbp)
    movq    %rdx, 40(%rbp)
    movq    %r8, 48(%rbp)
    movq    %r9, 56(%rbp)
    leaq    40(%rbp), %rax
    movq    %rax, -16(%rbp)
    movq    -16(%rbp), %rbx
    movl    $1, %ecx
    movq    __imp___acrt_iob_func(%rip), %rax
    call    *%rax
    movq    %rbx, %r8
    movq    32(%rbp), %rdx
    movq    %rax, %rcx
    call    __mingw_vfprintf
    movl    %eax, -4(%rbp)
    movl    -4(%rbp), %eax
    addq    $56, %rsp
    popq    %rbx
    popq    %rbp
    ret
    .seh_endproc
    .def    time;   .scl    3;  .type   32; .endef
    .seh_proc   time
time:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $32, %rsp
    .seh_stackalloc 32
    .seh_endprologue
    movq    %rcx, 16(%rbp)
    movq    16(%rbp), %rcx
    movq    __imp__time64(%rip), %rax
    call    *%rax
    addq    $32, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .def    localtime;  .scl    3;  .type   32; .endef
    .seh_proc   localtime
localtime:
    pushq   %rbp
    .seh_pushreg    %rbp
    movq    %rsp, %rbp
    .seh_setframe   %rbp, 0
    subq    $32, %rsp
    .seh_stackalloc 32
    .seh_endprologue
    movq    %rcx, 16(%rbp)
    movq    16(%rbp), %rcx
    movq    __imp__localtime64(%rip), %rax
    call    *%rax
    addq    $32, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .def    __main; .scl    2;  .type   32; .endef
    .section .rdata,"dr"
.LC0:
    .ascii "%B\0"
.LC1:
    .ascii "%A\0"
.LC2:
    .ascii "%A, %d %B %G\0"
.LC3:
    .ascii "%H:%M:%S\0"
    .align 8
.LC8:
    .ascii "Tahun                    : %d\12\0"
    .align 8
.LC9:
    .ascii "Bulan                    : %d (%s)\12\0"
    .align 8
.LC10:
    .ascii "Tanggal                  : %d\12\0"
    .align 8
.LC11:
    .ascii "Hari                     : %d (%s)\12\0"
    .align 8
.LC12:
    .ascii "Hari ke (dalam Setahun)  : %d\12\0"
    .align 8
.LC13:
    .ascii "Sisa Hari (Tahun depan)  : %d\12\0"
    .align 8
.LC14:
    .ascii "Persentase dalam Setahun : %f%\12\0"
    .align 8
.LC15:
    .ascii "Persentase Hitung Mundur : %f%\12\0"
    .align 8
.LC16:
    .ascii "Jam                      : %d\12\0"
    .align 8
.LC17:
    .ascii "Menit                    : %d\12\0"
    .align 8
.LC18:
    .ascii "Detik                    : %d\12\0"
.LC19:
    .ascii "\12\0"
.LC20:
    .ascii "%s, %02d %s %d\12\0"
.LC21:
    .ascii "Day-%d (%.4f%)\12\0"
.LC22:
    .ascii "%s\0"
    .text
    .globl  main
    .def    main;   .scl    2;  .type   32; .endef
    .seh_proc   main
main:
    pushq   %rbp
    .seh_pushreg    %rbp
    subq    $384, %rsp
    .seh_stackalloc 384
    leaq    128(%rsp), %rbp
    .seh_setframe   %rbp, 128
    .seh_endprologue
    call    __main
    movl    $0, %ecx
    call    time
    movq    %rax, 72(%rbp)
    leaq    72(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, 240(%rbp)
    movq    240(%rbp), %rdx
    leaq    80(%rbp), %rax
    movq    %rdx, %r9
    leaq    .LC0(%rip), %r8
    movl    $32, %edx
    movq    %rax, %rcx
    call    strftime
    movq    %rax, 232(%rbp)
    leaq    80(%rbp), %rdx
    movq    232(%rbp), %rax
    addq    %rdx, %rax
    movb    $0, (%rax)
    movl    $0, %ecx
    call    time
    movq    %rax, 24(%rbp)
    leaq    24(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, 224(%rbp)
    movq    224(%rbp), %rdx
    leaq    32(%rbp), %rax
    movq    %rdx, %r9
    leaq    .LC1(%rip), %r8
    movl    $32, %edx
    movq    %rax, %rcx
    call    strftime
    movq    %rax, 216(%rbp)
    leaq    32(%rbp), %rdx
    movq    216(%rbp), %rax
    addq    %rdx, %rax
    movb    $0, (%rax)
    movl    $0, %ecx
    call    time
    movq    %rax, -24(%rbp)
    leaq    -24(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, 208(%rbp)
    movq    208(%rbp), %rdx
    leaq    -16(%rbp), %rax
    movq    %rdx, %r9
    leaq    .LC2(%rip), %r8
    movl    $32, %edx
    movq    %rax, %rcx
    call    strftime
    movq    %rax, 200(%rbp)
    movl    $0, %ecx
    call    time
    movq    %rax, -72(%rbp)
    leaq    -72(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, 192(%rbp)
    movq    192(%rbp), %rdx
    leaq    -64(%rbp), %rax
    movq    %rdx, %r9
    leaq    .LC3(%rip), %r8
    movl    $32, %edx
    movq    %rax, %rcx
    call    strftime
    movq    %rax, 184(%rbp)
    leaq    -64(%rbp), %rdx
    movq    184(%rbp), %rax
    addq    %rdx, %rax
    movb    $0, (%rax)
    leaq    -80(%rbp), %rax
    movq    %rax, %rcx
    call    time
    leaq    -80(%rbp), %rax
    movq    %rax, %rcx
    call    localtime
    movq    %rax, 176(%rbp)
    movq    176(%rbp), %rax
    movl    20(%rax), %eax
    addl    $1900, %eax
    movl    %eax, 172(%rbp)
    movq    176(%rbp), %rax
    movl    16(%rax), %eax
    addl    $1, %eax
    movl    %eax, 168(%rbp)
    movq    176(%rbp), %rax
    movl    12(%rax), %eax
    movl    %eax, 164(%rbp)
    movq    176(%rbp), %rax
    movl    24(%rax), %eax
    movl    %eax, 160(%rbp)
    movq    176(%rbp), %rax
    movl    28(%rax), %eax
    addl    $1, %eax
    movl    %eax, 156(%rbp)
    movq    176(%rbp), %rax
    movl    8(%rax), %eax
    movl    %eax, 152(%rbp)
    movq    176(%rbp), %rax
    movl    4(%rax), %eax
    movl    %eax, 148(%rbp)
    movq    176(%rbp), %rax
    movl    (%rax), %eax
    movl    %eax, 144(%rbp)
    movl    172(%rbp), %edx
    movslq  %edx, %rax
    imulq   $1374389535, %rax, %rax
    shrq    $32, %rax
    sarl    $7, %eax
    movl    %edx, %ecx
    sarl    $31, %ecx
    subl    %ecx, %eax
    imull   $400, %eax, %ecx
    movl    %edx, %eax
    subl    %ecx, %eax
    testl   %eax, %eax
    jne .L8
    movl    $366, 252(%rbp)
    jmp .L9
.L8:
    movl    172(%rbp), %edx
    movslq  %edx, %rax
    imulq   $1374389535, %rax, %rax
    shrq    $32, %rax
    sarl    $5, %eax
    movl    %edx, %ecx
    sarl    $31, %ecx
    subl    %ecx, %eax
    imull   $100, %eax, %ecx
    movl    %edx, %eax
    subl    %ecx, %eax
    testl   %eax, %eax
    jne .L10
    movl    $365, 252(%rbp)
    jmp .L9
.L10:
    movl    172(%rbp), %eax
    andl    $3, %eax
    testl   %eax, %eax
    jne .L11
    movl    $366, 252(%rbp)
    jmp .L9
.L11:
    movl    $365, 252(%rbp)
.L9:
    movl    156(%rbp), %eax
    subl    $1, %eax
    pxor    %xmm1, %xmm1
    cvtsi2sdl   %eax, %xmm1
    pxor    %xmm0, %xmm0
    cvtsi2sdl   152(%rbp), %xmm0
    movsd   .LC4(%rip), %xmm2
    divsd   %xmm2, %xmm0
    addsd   %xmm0, %xmm1
    pxor    %xmm0, %xmm0
    cvtsi2sdl   148(%rbp), %xmm0
    movsd   .LC5(%rip), %xmm2
    divsd   %xmm2, %xmm0
    addsd   %xmm0, %xmm1
    pxor    %xmm0, %xmm0
    cvtsi2sdl   144(%rbp), %xmm0
    movsd   .LC6(%rip), %xmm2
    divsd   %xmm2, %xmm0
    addsd   %xmm1, %xmm0
    movsd   %xmm0, 136(%rbp)
    movsd   136(%rbp), %xmm1
    movsd   .LC7(%rip), %xmm0
    mulsd   %xmm1, %xmm0
    pxor    %xmm1, %xmm1
    cvtsi2sdl   252(%rbp), %xmm1
    divsd   %xmm1, %xmm0
    movsd   %xmm0, 128(%rbp)
    movl    252(%rbp), %eax
    addl    $1, %eax
    subl    156(%rbp), %eax
    movl    %eax, 124(%rbp)
    movsd   .LC7(%rip), %xmm0
    subsd   128(%rbp), %xmm0
    movsd   %xmm0, 112(%rbp)
    movl    172(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC8(%rip), %rcx
    call    printf
    leaq    80(%rbp), %rdx
    movl    168(%rbp), %eax
    movq    %rdx, %r8
    movl    %eax, %edx
    leaq    .LC9(%rip), %rcx
    call    printf
    movl    164(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC10(%rip), %rcx
    call    printf
    leaq    32(%rbp), %rdx
    movl    160(%rbp), %eax
    movq    %rdx, %r8
    movl    %eax, %edx
    leaq    .LC11(%rip), %rcx
    call    printf
    movl    156(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC12(%rip), %rcx
    call    printf
    movl    124(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC13(%rip), %rcx
    call    printf
    movsd   128(%rbp), %xmm0
    movq    128(%rbp), %rax
    movapd  %xmm0, %xmm1
    movq    %rax, %rdx
    leaq    .LC14(%rip), %rcx
    call    printf
    movsd   112(%rbp), %xmm0
    movq    112(%rbp), %rax
    movapd  %xmm0, %xmm1
    movq    %rax, %rdx
    leaq    .LC15(%rip), %rcx
    call    printf
    movl    152(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC16(%rip), %rcx
    call    printf
    movl    148(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC17(%rip), %rcx
    call    printf
    movl    144(%rbp), %eax
    movl    %eax, %edx
    leaq    .LC18(%rip), %rcx
    call    printf
    leaq    .LC19(%rip), %rcx
    call    printf
    leaq    80(%rbp), %r8
    movl    164(%rbp), %ecx
    leaq    32(%rbp), %rax
    movl    172(%rbp), %edx
    movl    %edx, 32(%rsp)
    movq    %r8, %r9
    movl    %ecx, %r8d
    movq    %rax, %rdx
    leaq    .LC20(%rip), %rcx
    call    printf
    movsd   128(%rbp), %xmm0
    movq    128(%rbp), %rdx
    movl    156(%rbp), %eax
    movapd  %xmm0, %xmm2
    movq    %rdx, %r8
    movl    %eax, %edx
    leaq    .LC21(%rip), %rcx
    call    printf
    leaq    -64(%rbp), %rax
    movq    %rax, %rdx
    leaq    .LC22(%rip), %rcx
    call    printf
    movl    $0, %eax
    addq    $384, %rsp
    popq    %rbp
    ret
    .seh_endproc
    .section .rdata,"dr"
    .align 8
.LC4:
    .long   0
    .long   1077411840
    .align 8
.LC5:
    .long   0
    .long   1083604992
    .align 8
.LC6:
    .long   0
    .long   1089804288
    .align 8
.LC7:
    .long   0
    .long   1079574528
    .ident  "GCC: (Rev5, Built by MSYS2 project) 10.3.0"
    .def    __mingw_vfprintf;   .scl    2;  .type   32; .endef
    .def    strftime;   .scl    2;  .type   32; .endef

Dan masih banyak lagi Program lainnya dalam Bahasa C yang dapat diubah ke Bahasa Assembly.


Itulah Tutorial Konversi dari Bahasa C ke Assembly dengan GCC yang telah kita bahas sekarang. Mohon maaf apabila ada sedikit kesalahan dalam penulisan Kode Program sedikitpun. Dan Untuk mengubah dari Bahasa C ke Assembly, silakan klik di sini (Ctoassembly.com).

Terima Kasih šŸ˜„šŸ˜˜šŸ‘ŒšŸ‘ :)

Wassalamu‘alaikum wr. wb.

Ads