Membuat Prosedur dan Makro

Bahasa Assembly. 18.12.2012. Tek Komputer

Berikut ini buku dari Susanto yang pernah diupload oleh www.ilmukomputer.com. Coba buka halaman 84 tentang prosedur dan MACRO.  Klik DISINI untuk Donload: Assembler- susanto

Tugas: Buat Macro dan Prosedur jika dijalankan akan menulis tulisan : TEKNIK KOMPUTER UNISMA

Iklan

Mencetak Kalimat dengan Turbo Assembler

Coba praktekan dengan Turbo Assembler program mencetak kalimat (servis 9ah)

.MODEL SMALL

.CODE

ORG 100h

Tdata : JMP Proses

Kal0 DB ‘PROSES PENCETAKAN STRING ‘,13,10,’$’

Kal1 DB ‘DIBELAKANG TANDA $ TIDAK BISA DICETAK ‘

Proses:

MOV AH,09h ; Servis ke 9

MOV DX,OFFSET Kal0 ; Ambil Alamat Offset Kal0

INT 21h ; Cetak perkarakter sampai tanda $

LEA DX,Kal0 ; Ambil Alamat Offset Kal0

INT 21h ; Cetak perkarakter sampai tanda $

LEA DX,Kal0+7 ; Ambil Alamat Offset KAl0+7

INT 21h ; Cetak perkarakter sampai tanda $

LEA DX,KAL1 ; Ambil Offset kal1

INT 21h ; Cetak perkarakter sampai ketemu $

INT 20h ; Selesai, kembali ke DOS

END Tdata

Simpan dengan nama tulisan.asm, Kompilasi dan link file tersebut dengan mengetik TASM tulisan dan jika tidak ada masalah ketik dengan TLINK/T tulisan.

Looping pada Bahasa Rakitan (Debug)

Bahasa Assembly, 06.11.2012, T. Komputer

Bahasa pemrograman tingkat tinggi memiliki instruksi looping seperti ‘for’, ‘do – while’, dan sejenisnya. Pada bahasa rakitan, instruksi tersebut dilayani oleh register ‘c’. Misalnya kita akan mencetak huruf ‘A’ sebanyak 10 kali, maka register CX haris diisi: A

Pada program di atas ada kesalahan pada lokasi looping yaitu seharusnya di 107 tertulis 104, sehingga program akan berjalan terus tidak berhenti.

Intruksi berikut ini akan menghasilkan?

Ganti Baris Pada Bahasa Rakitan (Debug)

Ganti baris pada bahasa rakitan prinsipnya adalah mencetak dua kode ASCII 0D dan 0A berturut-turut. Di sini ASCII 0A berfungsi turun satu baris, sedangkan 0D geser ke kiri satu baris. Jika kita hanya menggunakan 0A maka baris berikutnya akan maju satu digit dari yang atasnya (ada offset).

Perhatikan gambar di atas, hurub ABC akan ada offset satu ketukan tiap ganti baris, Oleh karena itu saat berganti baris kita harus tambahkan 0D agar bergeser ke kiri juga dan tidak hanya turun satu baris. Perhatikan listing berikut ini.

Perhatikan, hasilnya ABC tercetak dalam baris yang berbeda tetapi dalam kolom yang sama dan tidak ada offset ke kanan satu digit. Sengaja digunakan push dan pop sekalian belajar instruksi itu .. dan biar pusing dikit J.

Penjumlahan dengan Bahasa Rakitan (Debug)

Berhubung ada masalah dengan kelistrikan di lab hardware, berikut ini saya publish cara menjumlahkan dua angka dengan bahasa rakitan (debug). Praktekan dengan komputer yang ada di lab.

Di sini kita harus mengurangi tiap bilangan yang diinputkan dengan 30H untuk keperluan merubah ‘String’ menjadi ‘Numerik’. Sebagai contoh, angka dua dalam ASCII adalah 32H, jika dua ditambah tiga tanpa dikurangi 30H, hasilnya bukan 35H melainkan 65H sehingga hasilnya jauh dari akurat. Untuk memunculkan kalimat ‘Masukkan Angka 1 : ‘ kita gunakan interupt 21 service 09H. Untuk menerima masukan dari keyboard kita gunakan interupt yang sama tetapi dengan servis 01H.

Interupt 21 Servis 09H

Interupt ini bermaksud mencetak satu deretan ‘String’ di layar. Berbeda dengan Servis 02H yang hanya mencetak satu ‘Karakter’, servis ini mencetak isi RAM di alamat offset yang didefinisikan di register DX. Oleh karena itu sebelum program dijalankan, kita harus mengisi terlebih dahulu RAM dengan ‘String’ lewat instruksi ‘f’, singkatan dari ‘fill’. Misal –f200’Masukkan Angka 1 : $’ berarti mengisi RAM di offset 200 dengan kalimat ‘Masukkan Angka 1 : ‘. Perhatikan, selalu diakhiri dengan simbol ‘$’ yang artinya ‘String‘.

Interupt 21 Servis 01H

Interupt DOS ini merupakan servis untuk menangkap masukan dari keyboard yang hasilnya disimpan di register AL. Jadi jika kita masukan angka ‘2’, maka ASCII ‘2’ yang berupa bilangan 32H akan tersimpan di register AL. Karena akan dijumlahkan, maka harus kita konversi terlebih dahulu menjadi 02H dengan cara mengurangi isi register AL tersebut dengan bilangan 30H agar dihasilkan bilangan 02H. Berikutnya isi register AL harus kita pindahkan, misalnya ke register BL, karena AL akan digunakan untuk menampung masukan dari keyboard untuk angka kedua.

Menulis kode di Debug.Exe

Berikutnya kita mulai menuliskan kode program di debug. Masuk ke DOS prompt lewat ‘Start’ – ‘Run’ – ‘Ketik CMD’. Setelah masuk ke DOS, ketik ‘debug’. Kita mulai membuat program di alamat offset ‘100’, dengan mengetik ‘- a100’.

Ketika kita salah mengetik instruksi, debug langsung menunjukkan lokasi kesalahannya (lihat offset 0124). Jika kita jalankan, misal angka pertama 2 dan angka kedua 3 maka dihasilkan angka 5. Untuk menjalankan ketik ‘g’ yang artinya ‘Go’.

Mencetak Satu Kalimat dengan Bahasa Rakitan

Jika mencetak satu karakter terlalu lama, kita dapat mencetak langsung satu kalimat. Kalimat yang akan dicetak diletakkan di RAM di luar range program. Jika program antara 100 hingga 110, maka letakkan alamat kalimat yang akan dicetak di atas 110.

Di sini kalimat yang akan ditulis diletakkan pada alamat Offset RAM: 200 (di atas 107 pada program di atas). Tetapi kita harus mengisi data di alamat tersebut. Gunakan instruksi “f” yang berarti “fill”. Untuk mengecek ketik instruksi “d” yang artinya “dump”, untuk melihatnya.

Karena data di alamat offset 200 sudah terisi dengan kalimat TEKNIK KOMPUTER UNISMA BEKASI, maka jika dijalankan dengan mengetik “g” yang artinya “go”, maka akan muncul tulisan tersebut seperti gambar di atas. Berikutnya agar program di atas tersimpan di harddisk dengan nama misalnya tkunisma.com gunakan instruksi berikut ini:

Instruksi “n” yang artinya “name” bermaksud memberi nama file yang nanti tersimpan, dalam hal ini di letakkan di directory D, dengan nama tkunisma.com. rip bermaksud memberitahu prosesor awal program, yakni offset 100. rcx perlu dimasukan sebagai batas akhir program, di sini kita masukan 271 ke atas karena data tulisan ada di situ. Setelah diketik “w” yang artinya “write”, maka prosesor akan menyimpan di harddisk dengan nama tkunisma.com.

Cara Melihat Kode Bahasa Rakitan dari File

Kita sudah memiliki file di D: dengan nama tkunisma.com. Arahkan ke folder tersebut, kemudian masuk ke debug dengan mengetik “debug”. Pada mode debug ketik namanya, lengkap dengan folder dan sub direktori jika ada. Setelah diketik “l” yang artinya “load”, lanjutkan dengan “u100” yang artinya “unassembly dari offset 100”.

Menghitung Alamat Real

Alamat yang muncul dalam bahasa rakitan berformat segment:offset. Untuk mengetahui alamat fisik, jumlahkan alamat segment dengan offset dengan menambah satu digit pada segment agar diperoleh total bit 20 bit, karena jika hanya dijumlahkan langsung, jumlah bitnya 16, padahal prosesor berjumlah 20 bit. Misal kita menghitung alamat real dari instruksi MOV ah,9 di atas, jumlahkan segment dan offsetnya tetapi Segment di tambah satu bit “0” di belakangnya. Hati-hati, angka tersebut Hexadesimal.

Alamat real MOV ah,09 adalah 13f10 + 0100 = 14010

 

 

 

Books for Microprocessor and Assembler

In 2002, I tought Interfacing and had a good book as a literature about Intel microprocessor written by Berry B. Brey. This book was translation from “The Interl Microprocessor, 8086/8086 to Pentrium Pro Processor – Architecture, Programming, and Interfacing. But, my friend bought this book from me (Part 2) and part 2 of that book has given to another my friend, so when I must teach about that subject I must get this book again. Fortunately when I was searching on internet, I found the link about ebook of that book, so I downloaded it.

To tell you the truth, I was very difficult to understand that translation book because some terminologies did not match to our language. I better like reading the English version than its translation. And the most important thinks is that book contain some assembler language that I must try to understand.

The second book is about assembly programming. Assembly is the first programming language for microprosessor after machine language. The book above was written by Irvine with Macro Assembler from microsoft (MASM) but I prefer using Turbo Assembler from Borland (TASM).

Asyiknya Sidang Tugas Akhir

Selain mengajar dan meneliti, ternyata ada satu lagi aktivitas yang mengasyikkan sebagai dosen, yaitu menyidang tugas akhir / skripsi mahasiswa. Walau terkadang didapati mahasiswa yang kurang serius, ternyata banyak juga yang serius dan kreatif, terutama saat mengatasi permasalahan-permasalahan yang dihadapi. Periode yang lalu merupakan periode sidang tugas akhir/skripsi yang menurut saya menarik terutama saat peragaan alat robot. Permasalahan yang muncul ternyata bukan hanya masalah teknis saja, keuangan juga harus menjadi bahan pertimbangan.

 

Robot tampak bergerak timpang karena kurangnya motor penggerak kaki, sehingga mahasiswa menggunakan rangkaian penyambung antara kaki depan dengan belakangnya. Terlepas dari itu, ketekunannya menyelesaikan tugas akhir D3 patut diacungi jempol. Selamat.

MENULIS KALIMAT DENGAN TURBO ASSEMBLER

Hari/M.Kul/Ruang/Dosen: Jumat-24-12-2010/B.Assembly/L.Software/Rahmadya TH

Berbeda dengan debug yang alamat offset-nya ditunjuk dengan jelas (berupa angka). Pada Turbo Assembler offset ditunjuk berupa variabel yang nantinya akan dirubah secara otomatis oleh sistem (DOS). Berikut ini program contoh menulis satu kalimat:


Kemudian kita akan buat dengan Turbo Assembler. Buka kembali Notepad, ketik instruksi berikut ini:


Dengan Turbo Assembler, “Mov DX, 300″ diubah menjadi ” MOV DX, OFFSET Kal” dimana Kal merupakan variabel berisi data (DB) RAHMADYA. Perhatikan teknik pembuatan data “Kal Db …” dan lompatan (JUMP). Coba kompilasi dengan Turbo Assembler dan lanjutkan dengan linking.


Selamat Mencoba !!!


Rahmadya Trias Handayanto

MEMBUNYIKAN SPEAKER DENGAN DEBUG & TURBO ASSEMBLER

A. MEMBUNYIKAN SPEAKER DENGAN DEBUG

Buka DOS lalu ketik debug, maka Anda akan masuk mode debug berbasis dos. Ketik a100 untuk memulai menulis program. Ketik program berikut ini:


Hasilnya adalah speaker berbunyi dan akan berhenti setelah sembarang tuts ditekan. Untuk menghasilkan program executable (com/exe) ketik instruksi berikut ini:


Maka akan dihasilkan satu file baru bernama bunyi.com di direktori d.

 

B. MEMBUNYIKAN SPEAKER DEGNAN TURBO ASSEMBLER

Turbo assembler tidak menyediakan fasilitas editor, oleh karena itu kita harus menggunakan editor dos (ketik edit <nama>.asm pada dos prompt). Atau gunakan notepad bawaan windows. Ketik program berikut ini:

 

;/=======================================================\;

; Program : SPEAKER.ASM ;

; BY : RAHMADYA ;

; Fungsi : membunyikan speaker dan ;

; mematikannya ketika inputan keyboard diketik ;

;\=======================================================/;

 

    .MODEL SMALL

    .CODE

    ORG 100h

 

Proses :

    MOV AL,33H

    OUT 61H,AL

    MOV AL,01H

    OUT 42H,AL

    OUT 42H,AL

    MOV AH,01H

    INT 21H

    MOV AL,00H

    OUT 61H,AL

    INT 20H

END Proses

 

Simpan dengan nama speaker.asm. Lakukan tahap kompilasi berikut ini:

TASM speaker

Dilanjutkan dengan :

TLINK/T speaker.

Hasilnya adalah program speaker.com yang terletak pada direktori kerja. Selamat mencoba !!!

NOTE: Jangan sampai lupa “H” pada setiap angka, misal INT 21H jangan hanya INT 21 saja.


Rahmadya Trias Handayanto

MATERI UAS BAHASA ASSEMBLY

Bulan november mungkin menjadi bulan tersibuk tahun ini. Diawali dengan kelahiran anak ke-2, pelatihan penulisan artikel ilmiah tiga hari di Hotel Sheraton, seminar Telkom di Hotel Arya Duta, pelatihan Oracle 11g di PT Assaba, Survey Evaluasi Kinerja di Departemen Pekerjaan Umum (PU), hingga aktivitas yang padat sebagai anggota kelompok kerja penerimaan pegawai baru di lingkungan Universitas Islam “45” Bekasi. Akibatnya tentu saja aktivitas mengajar yang sedikit terhambat. Oleh karena itu, mencontoh tradisi malu orang-orang Jepang, saya mengucapkan gomennasai (maaf) kepada semua pihak yang merasa kurang terlayani.

Saya teringat nasehat guru ngaji saya waktu kecil dulu, “Ambil yang baik, tinggalkan yang buruk”. Tentu saja maksudnya bukan waktu ke mesjid bawa sendal buruk, pas pulang ambil sendal yang baik, tetapi dalam segala kondisi, keadaan, posisi, atau situasi, pasti ada sisi positif yang dapat kita manfaatkan. Banyaknya pelatihan-pelatihan yg harus saya jalani membuat saya berkewajiban menyebarkan ilmu tersebut agar bisa dinikmati juga oleh pihak lain yang mungkin lebih membutuhkan dari pada saya sendiri.

Kembali ke mata kuliah bahasa Assembly, atau sering diistilahkan bahasa rakitan, materi UAS akan beralih ke pemrograman tanpa debug. Tanpa debug di sini berarti kita memerlukan software tambahan untuk merakit script berbahasa asembly menjadi executable program. Salah satu buku berbahasa Indonesia yang baik adalah karangan Susanto, atau dikenal dengan inisial S’to, yang bukunya tentang hacking banyak beredar di pasaran. Kita sudah selayaknya berterima kasih kepada beliau atas kebaikan hatinya men-sharing buku itu gratis setelah royaltinya di PT Gramedia berakhir. Saya berhasil mendolotnya di situs www.ilmukomputer.com, situs pembelajaran buatan sensei saya, Pa Romi SW. Atau bisa donlot di link ini: http://www.ziddu.com/download/12903550/sto-assembly.rar.html


Salah satu software yang menurut saya terbaik untuk mengkompilasi bahasa asembly adalah Turbo Assembler buatan borland. Tentu saja jika ada yang lebih tertarik dengan Macro Assembler buatan Microsoft juga tidak apa-apa. Toh, listingnya tidak jauh berbeda. Banyak dijumpai pula emulator-emulator bahasa asembly yang gratis didonlot di internet. Manfaat emulator adalah berkurangnya resiko akibat “utak-atik” kita dengan bahasa asembly, seperti kata-kata lucu yang sering saya lihat di MTV (dengan logat Jepangnya), “bi ker ful, don trai dis at hom”. Jika tertarik dengan turbo assembler bisa baca buku terbitan luar negeri “Mastering Turbo Assembler” karangan Tom Swan yang tebalnya seribu halaman. Silahkan donlot sendiri aja.


Sedangkan untuk software-nya cari sendiri di internet. Atau klik link ini aja, saya bantuin cari: http://www.ziddu.com/download/12903634/TASM.rar.html Bagaimana cara menggunakannya? Tentu jawabannya: baca dan praktekan !!


Rahmadya Trias Handayanto