Monday, April 4, 2011

Mari Belajar Assembly 32 Bit dengan masm32 di windows

Oke seperti janji saya sebelumnya, di tutorial kali ini kita akan belajar sedikit…. Dasar-dasar pemrograman assembly 32 bit secara otodidak dan menggunakan referensi dari berbagai macam sumber yang bisa kita dapatkan di internet. Saya rasa jikalau teman-teman mau berikut beberapa alamat situs yang bias dijadikan sumber referensi pemrograman assembly khusus 32 bit baik itu di platform windows maupun di linux :
-          http://203.148.211.201/iczelion/index.html >>> bagus nih buat belajar assembly di platform windows dengan menggunakan compiler masm32 beserta librarynya.
-          http://www.ilmuhacking.com/programming/belajar-assembly-di-linux/ >>> belajar assembly di platform linux dengan compiler nasm
-          Dst… cari di google bro…. “:D
Sebelumya saya juga adalah seorang pemula, dan saya baru sangat sedikit mengenal bahasa pemrograman mesin ini, tapi hal itu tidak bisa menghalangi saya untuk setidaknya mempublish dan membagikan kepada siapa saja yang tertarik membaca artikel dari saya, dan editor sendiri merasa banyak kekurangan serta perlu pembenahan dari berbagai suhu… :D
Oke hal yang pertama yang perlu kita pelajari adalah pengenalan itu sendiri, dan tanpa banyak basa-basi dan tanpa membuang waktu untuk menulis ulang hal yang sebenarnya sudah mubasir jika ditulis ulang untuk menghemat waktu maka ada baiknya untuk pengenalan tentang assembly 32 bit boleh teman teman langsung baca dari artikel kang Rizki Wicaksono editor dari ilmuhacking.com di alamat http://www.ilmuhacking.com/programming/belajar-assembly-di-linux/ artikel yang sangat bagus dan sangat bermanfaat menurut saya thanks bro tutorialnya :D .
Nah karena kang rizky sudah memberikan tutor dalam platform linux, maka kali ini kita akan belajar bersama-sama di platform windows dengan kompiler dan library yang disediakan oleh masm32.
Pertama kalinya kita DOWNLOAD dulu program masm32 kemudian langsung di install
DOWNLOAD MASM32
Kerangka dasar dari penulisan program assembly di platform windows menggunakan masm32 seperti ini :

.386
.MODEL Flat, STDCALL
.DATA
<inisialisasi data anda>
.DATA?
<data anda yang tidak akan diinisialisasi>
.CONST
<deklarasi konstan anda>
.CODE
<label>
<kode program anda>
end <label>
Mari kita analisa kerangka dasar diatas :
.386 ; adalah jenis CPU yang kita gunakan, dimasa nenek saya mulai megang komputer  CPU jenis 80286 masih banyak ditemui, tapi di masa sekarang CPU jenis ini jarang di temui coi… jadi di kesempatan ini kita konsentrasi saja di CPU jenis 80386, dan ini juga menjelaskan tentang kode .386 di awal penulisan kode, bahwa kita menggunakan CPU jenis 80386
.MODEL Flat, STDCALL ; .MODEL memberitahukan spesifikasi model memori program anda, dan di windows 32 bit hanya menggunakan model “Flat” ini menjelaskan penggunaan kode .MODEL Flat.
STDCALL ; memberitahukan kepada kompiler (masm) tentang bagaimana proses kerja dan cara kompiler melewati setiap parameter dalam kode program, seperti kiri ke kanan atau kanan ke kiri.
.DATA ;di bagian ini anda menaruh data-data pada kode program anda yang akan di inisialisi.
.DATA? ;dibagian ini anda menaruh data-data program yang tidak akan diinisialisasi program anda, misalnya anda ingin mengalokasikan memory program tanpa menginisialisasinya, seperti contoh jika anda mengalokasikan memory sebesar 10.000 byte di bagian .DATA? program anda, ukuran program anda tidak akan sampai 10.000 byte juga, bagian ini hanya menyampaikan ke kompiler berapa banyak ruang memory  yang diperlukan saat program  dimuat ke dalam memory. Ini menjelaskan kegunaan dari bagian .DATA?
.CONST ;bagian ini anda meletakkan deklarasi yang akan digunakan oleh program anda, dan bagian ini adalah bagian yang tidak akan pernah bisa di modivikasi dari program anda, bagian ini “konstan”.
.CODE ; di bagian ini kode program anda.
<label> ; digunakan untuk member spesifikasi kode anda, semua kode yang di tulis harus diantara <label> dan end <label>
Simple Message Box :
ini adalah source code messagebox kita :
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

.data
MsgBoxCaption  db “Iczelion Tutorial No.2″,0
MsgBoxText       db “Win32 Assembly is Great!”,0

.code
start:
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
invoke ExitProcess, NULL
end start
Sebelumnya kita simpan dulu source code kita di C:\masm32\bin\ dengan nama messagebox.asm
Mari kita analisa bersama  kode yang baru dan asing diatas:
Option casemap:none ; memberitahukan kepada masm bahwa dia akan membedakan penulisan huruf besar dan kecil pada label, jadi contoh label : start akan berbeda dengan label : Start
include ; memberitahukan kepada masm untuk menggunakan library-library yang di butuhkan oleh program kita, di ikut sertakan dengan alamat include yang ingin kita gunakan.
MsgBoxCaption ; adalah inisialisasi data untuk border window program kita,
NULL (0) dan MB_OK ; setiap penggunaan karakter ANSI di WINDOWS harus di ikuti dengan nilai NULL atau “0” dalam bilangan hexadecimal sebagai nilai untuk mlakukan “terminated” program dan penggunaan kedua system call ini adalah default library masm di folder include/windows.inc, disinilah perbedaan library punya om masm32 dengan beberapa kompiler yang berhubungan langsung dengan mesin, di masm32 kita tidak pelu memanggil syscall yang langsung ke library mesin, dan juga tidak harus memanggil dengan inisialisasi angka, cukup dengan inisialisasi “nama” yang sudah terdapat dalam library windows.inc di masm yang kita gunakan
MsgBoxText ; inisialisasi untuk text dalam program kita
addr ; adalah perintah yang kita gunakan untuk menggantikan peranan perintah “offset” dimana kita mengasumsikan menggunakan perintah “addr” untuk memanggil variable lokal (MsgBoxCaption, MsgBoxCaption ) dalam “masm” dan tentunya akan berbeda jika kita menggunakan variable global yang tidak di inisialisasi secara lokal sebelumnya. (mungkin agak membingungkan tapi yakinlah sejalan proses pembelajaran anda akan segera mengerti dengan cepat)
<invoke atau call> ; Pada saat eksekusi program, eksekusi dimulai dari <label> sampai di end <label>, proses eksekusi akan terus di proses termasuk melakukan proses saat menemukan perintah – perintah control seperti MOV, CALL, ADD, JMP, JNE dll… dan untuk meng akhiri proses program hingga keluar ke window kita akan memanggil fungsi API bernama “ExitProcees” dengan perintah “call ExitProcess” atau “Invoke ExitProcess”
nah mari kita uji program kita,
pertama – tama kita buka masm editor yang berletak di C:\masm32\qeditor.exe kemudian kita buka program kita tadi (messagebox.asm).

kemudian kita langsung compile cukup dengan memilih menu –> Project –> Assemble & Link, kalau tidak ada error maka di folder C:\masm32\bin kita mendapatkan 2 file baru bernama “messagebox.obj” dan “messagebox.exe”
hore… ahirnya  program GUI pertama kita yang di tulis dalam bahasa assembly berhasil di buat, coba eksekusi file “messagebox.exe” yang sudah kita buat tadi, dan hasilnya adalah sebuah program “message box” yang sederhana.
Demikianlah tutorial cupu dari seorang pemula ini, yang kurang lebih bukanlah asli dari otak saya namun mengkopi habis-habisan tutorial yang bertebaran di internet, kemudian mencoba dan melakukan share ulang ke teman-teman semua dan begitulah ilmu pengetahuan, belajar dari guru dan mengembangkannnya berdasarkan penafsiran pribadi serta membagikan ulang meski tulisannya tampak seperti hasil “google translate” he he he tapi setidaknya editor sudah turut menganalisa kok :D .
Banyak kekurangan di tulisan pertama saya tentang pemrograman assembly ini, namun lebih dan kurangnya tolong… di maafkan, saya hanyalah orang biasa yang juga perlu belajar.
Tak lupa terima kasih kepada sumber referensi utama saya :
http://203.148.211.201/iczelion/ , http://www.ilmuhacking.com/programming/belajar-assembly-di-linux/, dan http://translate.google.com yang sudah banyak membantu dalam perbaikan kata-kata dan pengertian bahasa asingnya :D

sumber: http://blackpolri.wordpress.com/2010/08/27/mari-belajar-assembly-32-bit-secara-otodidak-dengan-masm32-di-windows/

No comments:

Post a Comment

MY LINK