Showing posts with label Assembly. Show all posts
Showing posts with label Assembly. Show all posts

Sunday, June 5, 2011

Belajar bahasa Assembly menggunakan NASM (Linux)

Untuk kali ini saya sharing belajar bahasa Assembly di linux menggunakan NASM, pada tutorial sebelumnya telah dijelaskan cara instalasi program nasm di sistem operasi linux menggunakan linux ubuntu. nah untuk program pertama yang sangat mudah karena masih belum menggunakan proses percabangan seperti interuksi jmp,je,ja sebagainya.. gunakan gedit,vi,pico atau aplikasi editor teks lainnya pada linux.
section .data
hello: db 'hello,Apa Kabar,,,?',10
nama: db 'Tri Wanda Septian',10
helloLen: equ $-hello
helloLna: equ $-nama
section .text

global _start

_start:
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,helloLen
int 80h

mov ecx,nama
mov edx,helloLna
int 80h

mov eax,1
mov ebx,0
int 80h

Kemudian lakukan seperti pada postingan sebelumnya yaitu compile dan link ke objek

Analisa program
  • Menggunakan NASM

section .data
hello: db 'hello,Apa Kabar,,,?',10 ; 'hello,Apa Kabar,,,?' dengan banyak linefeed karakternya
nama: db 'Tri Wanda Septian',10 ; 'Tri Wanda Septian' dengan banyak linefeed karakternya
helloLen: equ $-hello ; batas untuk label hello yaitu 'hello,Apa Kabar,,,?'
helloLna: equ $-nama ; batas untuk label nama yaitu 'Tri Wanda Septian?'

section .text

global _start
;dimana pada bagian inilah kode assembly ditulis. Bagian teks. harus dimulai dengan global  _start ;sebagai deklarasi global, yang akan memberitahu kernel dimana eksekusi program dimulai.

_start:
mov eax,4 ; sistem pemanggilan untuk menulis (sys_write)
mov ebx,1 ; file pengdeskripsi yaitu 1 sebagai standar output
mov ecx,hello ;offset dari label hello ke register ecx
mov edx,helloLen ;batas dari string.label helloLen adalah konstan tidak perlu mengatakannya mode tak langsung ;seperti mov edx,[helloLen]
int 80h ; intruksi memanggil kernel

mov ecx,nama ;offset dari label nama ke register ecx
mov edx,helloLna ;batas dari string
int 80h ; interuksi memanggil kernel

mov eax,1;memanggil sistem untuk keluar (sys_exit)
mov ebx,0 ;interuksi keluar dengan kode 0
int 80h ; interuksi memanggil kernel

  • Menggunakan TASM pada DOS

.MODEL SMALL
.CODE
ORG 100h
Program : JMP Start
hello db 'hello,Apa Kabar,,,?$'
nama db 'Tri Wanda Septian$'
Start : mov ah,09h
mov dx,offset hello
int 21h

mov dx,offset nama
int 21h
int 20h
END Program

Silahkan belajar menganalisa perbandingan antara 2 program tersebut. :)

Sumber referensi :

  • http://docs.cs.up.ac.za/programming/asm/derick_tut/

Assembler NASM pengganti TASM di linux

Bahasa assembly merupakan bahasa tingkat rendah yang hanya mengindetifikasi register pada mikroprosesor, namun perlu kita ketahui struktur dari compiler untuk bahasa pemrograman assembly pada setiap sistem operasi agak sedikit berbeda dan kali ini, tutorial singkat untuk mencoba pemrograman bahasa assembly di linux(Ubuntu)