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 :
- 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.
- 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.
- DOS hanya berkode 16bit.
- 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 :
-
- Simpan dalam extensi .asm (contoh arsene.asm)
- Pada terminal ketik nasm -f elf arsene.asm
- Untuk membuat file extensi selanjutnya ketik ld -s -o arsene arsene.o
- Untuk menjalankan program ketik ./arsene
- SELAMAT MENCOBA —
Devid Haryalesmana said
Love this matakuliah
arsenewenggar said
I agree
cyber_Ndut said
punya modul lengkap gak tentang assembler? help