phlonthOS

October 26, 2009

Memanfaatkan Pointer untuk menghitung Jumlah Karakter

Filed under: NASM — phlonthos @ 9:45 am

section .data
kalimat db "Belajar menghitung jumlah karakter dalam kalimat",10

jum_car equ $-kalimat

section .text
global _start
_start:
mov edx,jum_car
mov ecx,kalimat
mov ebx,1
mov eax,4
int 0x80

mov ebx, 0
mov eax, 1
int 0x80

Jika pada contoh sebelumnya, cetakkal.asm, kita harus mendefinisikan dulu berapa besar atau banyak karakter yg akan dicetak.
Kalau kalimat yg akan dicetak pendek ya tidak masalah. Bagaimana jika kalimat yang akan dicetak sangat panjang, misal 1000 karakter. Tidak mungkin kan kita menghitung satu persatu dahulu, baru didefinisikan. Intinya sangat memakan banyak waktu. Ada cara yang lebih mudah dan praktis yaitu dengan memanfaatkan pointer.

Caranya yaitu dengan mengisi register edx (register yang biasanya diisi dgn jumlah karakter kalimat yg akn dicetak) dengan pointer ke kalimat tersebut. Perintah dasar pointer yaitu:

label_data:
.ascii "data"

label_pointer:
.ukuran_data $-label_data

Sebelumnya:

mov edx,50

dimana 50 adalah jumlah karakter yang akan dicetak. Jika ingin memakai pointer harus didefinisikan dulu pointernya:

jum_car equ $-kalimat

dimana jum_car adalah label untuk pointer. equ adalah ukuran data yang umum digunakan untuk menghitung karakter. $-kalimat adalah pointer yang menunjuk ke pada alamat data, dalam contoh ini data dilabelkan dengan “kalimat” yang disimpan pada register ecx.

Dari contoh di atas, jelas kita tidak harus menghitung dulu jumlah karakter yang akan didefinisikan. Tetapi tinggal menggunakan pointer yang menunjuk ke kalimat yang akan dicetak. Jadi pointer tersebut pengganti dari jumlah karakter tersebut.

October 25, 2009

Program Cetak Kalimat

Filed under: NASM — phlonthos @ 2:18 am


section .data
kalimat db "Belajar NASM dimulai dari sini", 0xa

section .text
global _start
_start:
mov edx,50
mov ecx,kalimat
mov ebx,1
mov eax,4
int 0x80

mov ebx,0
mov eax,1
int 0x80

Penjelasan:
Pertama kalimat yang akan dicetak didefinisikan dengan pointer dalam label bernama kalimat. Pada main progrqam register eax diberi nilai 4, untuk memberitahukan bahwa proses yang akan dilakukan adalah menulis (sys_write()). Nilai ini adalah nilai kembalian dari syscall tersebut. Register ebx di set sebagai stdout. data diletakkan di register ecx , dan jumlah karakter dihitung pada register edx. Kemudian eksekusi kode yaitu int 0×80 kemudian untuk keluar dari program, register ebx diberi nilai 0 yang berarti exit. Register eax diberi nilai 1 yang berarti memanggil system call sys_exit, kemudian memanggil kernel dengan perintah int 0×80.

Untuk melakukan compile file dengan perintah :
nasm -f elf cetakkal.asm
Perintah itu akan menghasilkan file cetakkal.o
Lalu dilakukan proses linker dengan perintah
ld -o cetakkal cetakkal.o
Lalu memanggil hasilnya dengan perintah
./halo

October 21, 2009

phlonthOS Project

Filed under: News — phlonthos @ 3:05 am

phlonthOS adalah nama sebuah sistem operasi open source dan independent yang ditulis oleh seorang mahasiswa salah satu perguruan tinggi di Yogyakarta, sebagai syarat Tugas Akhirnya. phlonthOS ditargetkan akan selesai dan bisa digunakan pada bulan Januari 2010.

phlonthOS ditulis menggunakan bahasa pemrograman assembly dengan versi NASM yang dikerjakan pada platform linux. Pada versi beta, phlonthOS menggunakan register 16 bit, dengan antar muka berbasis text (Command Line Interface), dan berstruktur monolitik.

Saya kira cukup untuk perkenalan. Jika ingin mengetahui lebih jauh, terus ikuti perkembangannya melalui tulisan-tulisan dalam blog ini. Afaik, blog ini sekaligus digunakan sebagai online documentation pada phlonthOS Project.

Regards,

Angga Wicaksono

Theme: Silver is the New Black. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.