Arsene Wenggar's Blog

satu kata satu cita..belajar untuk selamanya…

  • Cari Macam-macam

  • Ingatlah waktu setiap saat…

    Maret 2010
    S S R K J S M
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
  • Daftar Halaman

  • Akun

Permainan Bahasa Assembly di Linux

Posted by arsenewenggar pada Maret 19, 2010

Pada dasarnya perlu diketahui bahwa dalam bahasa assembly terdapat dua tipe yaitu AT&T dan NASM dimana AT&T biasa dipakai di lingkungan GNU sedangkan NASM dipakai oleh netwide assembler dan banyak dipakai di lingkungan windows. Perbedaan keduanya terletak pada syntaxnya namun untuk output selalu menghasilkan bahasa mesin yang sama. Adapun perbedaan antara AT&T dengan NASM yaitu :

  • Baris komentar diawali dengan “;” semicolon untuk NASM. AT&T mengawali komentar dengan # (hash)
  • Dalam format AT&T, setiap register diawali dengan %. NASM tidak menggunakan %.
  • Dalam format AT&T, setiap nilai literal (konstanta) diawali dengan $. NASM tidak menggunakan $.
  • Pada perintah yang menggunakan operand sumber dan tujuan, format AT&T menuliskan tujuan sebagai operand kedua (contoh: CMD sumber,tujuan). Sedangkan NASM menuliskan tujuan sebagai operand pertama (contoh: CMD tujuan,sumber).

Sebelum menginjak pada pembahasan bahasa assembly pada linux lebih lanjut, lebih baik perlu mengenal suatu perbedaan diantara DOS dengan Linux Assembly, karena perbedaan di antara keduanya sangatlah mencolok, perbedaan diantara keduanya antara lain :

  1. DOS biasa menggunakan interupsi int 21h dan BIOS menggunakan int 16h dan int 10h. pada linux semua fungsi-fungsi tersebut telah terhandle oleh kernel atau biasa disebut “kernel system calls” atau dapat dipanggil int 80h, keistimewaannya yaitu Linux System Calls memiliki daftar lebih sedikit daripada DOS namun pada penggunaannya lebih praktis.
  2. Kode 32-bit pada linux bekerja pada memori model flat dimana kekhawatiran tentang segmen-segmen yang ada tidak perlu dipikirkan, dalam hal ini tidak perlu ada modifikasi pada seluruh register segmen dan pada setiap alamat memiliki panjang 32bit dan hanya mengandung bagian yang bercabang.
  3. DOS hanya berkode 16bit.
  4. Pada kode assembly 32bit, penggunaannya pada penulisan EAX, EBX, ECX sedangkan 16bit hanya tertulis AX, BX, CX, dsb.

Sebuah program assembly terbagi atas tiga bagian,yaitu :

  • .data, digunakan untuk hal-hal seperti nama file, ukuran buffer , dan definisi konstan yang mengguni konstan yang berhubungaAX, BX, CXgni n pada penggunaannya lebih praktis, perbedaan diantara keduanya antara lain :
  • akan instruksi EQU seperti DB, DW, DQ, DT. Contoh :

section .data

message: db ‘Arsene Wenggar’ ; mendeklarasikan pesan yang mengandung ‘Arsene Wenggar!’ (tanpa kutipan)

msglength: equ 14 ; deklarasi panjangnya pesan

buffersize: dw 1024 ; deklarasi ukuran buffer pada kata yang mengandung 1024

  • .bss, suatu bagian dimana variable dideklarasikan. Instruksi yang dapat digunakan yaitu RESB, RESW, RESD, RESQ dan REST yang berfungsi untuk menyimpan ruang asing di memori untuk variable yang dimaksud. Contoh:

section .bss

filename: resb 255 ; menyimpan 255 byte

number: resb 1 ; menyimpan 1 byte

bignum: resw 1 ; menyimpan 1 kata (1 kata = 2 byte)

realarray: resq 10 ; menyimpan sebuah array dari 10 reals(artinya apa ya???)

  • .text, tempat dimana kode assembly ditulis dan untuk memulainya perlu deklarasi global _start, dimana hal deklarasi ini berfungsi memberitahu kernel bahwa program dieksekusi. Contoh :

section .text

global _start

_start:

pop ebx ; Here is the where the program actually begins

.

.

.

Contoh penerapan :

Syntax :

section .data

arsene: db ‘Arsene Wenggar!’,14

arsenew: equ $-arsene

section .text

global _start

_start:

xor bx,bx

mov cx,31

ulang:

mov eax,4

mov ebx,1

mov ecx,arsene

mov edx,arsenew

int 80h

mov eax,1

mov ebx,0

int 80h

Cara compile :

    1. Simpan dalam extensi .asm (contoh arsene.asm)
    2. Pada terminal ketik nasm -f elf arsene.asm
    3. Untuk membuat file extensi selanjutnya ketik ld -s -o arsene arsene.o
    4. Untuk menjalankan program ketik ./arsene
  • SELAMAT MENCOBA —

3 Tanggapan to “Permainan Bahasa Assembly di Linux”

  1. Love this matakuliah

  2. cyber_Ndut said

    punya modul lengkap gak tentang assembler? help

Tinggalkan komentar