SELMAT DATANG DI BLOG

Minggu, 21 Januari 2018

BAHASA RAKITAN

BAHASA RAKITAN

Asalamualaikum wr.wb

Bahasa rakitan atau lebih umum dikenal sebagai Assembly adalah bahasa pemrograman tingkat rendah yang digunakan dalam pemrograman komputermikroprosesorpengendali mikro, dan perangkat lainnya yang dapat diprogram. Bahasa rakitan mengimplementasikan representasi atas kode mesin dalam bentuk simbol-simbol yang secara relatif lebih dapat dipahami oleh manusia. Berbeda halnya dengan bahasa-bahasa tingkat tinggi yang berlaku umum, bahasa rakitan biasanya mendukung secara spesifik untuk suatu ataupun beberapa jenis arsitektur komputer tertentu. Dengan demikian, portabilitas bahasa rakitan tidak dapat menandingi bahasa-bahasa lainnya yang merupakan bahasa pemrograman tingkat tinggi. Namun, bahasa rakitan memungkinkan programmer memanfaatkan secara penuh kemampuan suatu perangkat keras tertentu yang biasanya tidak dapat ataupun terbatas bila dibuat dengan menggunakan bahasa pemrograman tingkat tinggi.
Pada bahasa rakitan, programmer umumnya menggunakan sebuah program utilitas yang disebut sebagai perakit (bahasa Inggrisassembler) yang digunakan untuk menerjemahkan kode dalam bahasa rakitan tersebut ke dalam kode mesin untuk perangkat keras tertentu. Sebuah perintah dalam bahasa rakitan biasanya akan diterjemahkan menjadi sebuah instruksi mnemonic dalam kode mesin, berbeda halnya dengan kompiler pada bahasa pemrograman tingkat tinggi yang menerjemahkan sebuah perintah menjadi sejumlah instruksi dalam kode mesin.
Beberapa perangkat lunak bahasa rakitan terkenal biasanya menyediakan tambahan fitur untuk memfasilitasi proses pengembangan program, mengontrol proses perakitan, dan alat bantu pengawakutuan (debugging).
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
Sekian dan terimakasih.
waalaikumsalam wr.wb

1 komentar:

Pengertian Hardware,Software Dan Fungsinya

1. Hardware     adalah sebua perangkat keras komputer yang sifatnya dapat di sentuh atau dapat dilihat secara kasat mata jadi dapat disimpul...