Kamis, 31 Mei 2012

Percobaan Bahasa Asembly terbaru


MODUL I

SISTEM BILANGAN DAN REGISTER
TUJUAN
􀂾 Mahasiswa mengenal sistem bilangan
􀂾 Mahasiswa mampu mengkonversikan sistem bilangan
􀂾 Menampilkan dan membaca isi register
􀂾 Mengetahui fungsi-fungsi register sebagai pengalamat data
DASAR TEORI
BERBAGAI JENIS BILANGAN
Didalam pemrograman dengan bahasa assembler, bisa digunakan berbagai jenis bilangan. Jenis bilangan yang bisa digunakan, yaitu: Bilangan biner, oktaf, decimal dan hexadesimal. Pemahaman terhadap jenis-jenis bilangan ini adalah penting, karena akan sangat membantu kita dalam pemrograman yang sesungguhnya.
BILANGAN BINER
Sebenarnya semua bilangan, data maupun program itu sendiri akan diterjemahkan oleh komputer ke dalam bentuk biner. Jadi pendefinisisan data dengan jenis bilangan apapun(Desimal, oktaf dan hexadesimal) akan selalu diterjemahkan oleh komputer ke dalam bentuk biner. Bilangan biner adalah bilangan yang hanya terdiri atas 2 kemungkinan(Berbasis dua), yaitu 0 dan 1. Karena berbasis 2, maka pengkorversian ke dalam bentuk desimal adalah dengan mengalikan suku ke-N dengan 2N.
Contohnya: bilangan biner 01112 = (0 X 23) + (1 X 22) + (1 X 21) + (1 X 20) = 710.
BILANGAN DESIMAL
Tentunya jenis bilangan ini sudah tidak asing lagi bagi kita semua. Bilangan Desimal adalah jenis bilangan yang paling banyak dipakai dalam kehidupan sehari-hari, sehingga kebanyakan orang sudah akrab dengannya. Bilangan desimal adalah bilangan yang terdiri atas 10 buah angka(Berbasis 10), yaitu angka 0-9. Dengan basis sepuluh ini maka suatu angka dapat dijabarkan dengan perpangkatan sepuluh.
Misalkan pada angka 12310 = (1 X 102) + (2 X 101) + (1 X 100).
BILANGAN OKTAL
Bilangan oktal adalah bilangan dengan basis 8, artinya angka yang dipakai hanyalah antara 0-7. Sama halnya dengan jenis bilangan yang lain, suatu bilangan oktal dapat dikonversikan dalam bentuk desimal dengan mengalikan suku ke-N dengan 8 N.
Contohnya bilangan 128 = (1 X 81) + (2 X 80) = 1010.
BILANGAN HEXADESIMAL
Bilangan hexadesimal merupakan bilangan yang berbasis 16. Dengan angka yang digunakan berupa: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Dalam pemrograman assembler, jenis bilangan ini boleh dikatakan yang paling banyak digunakan. Hal ini dikarenakan mudahnya pengkonversian bilangan ini dengan bilangan yang lain, terutama dengan bilangan biner dan desimal. Karena berbasis 16, maka 1 angka pada hexadesimal
akan menggunakan 4 bit.
BILANGAN BERTANDA DAN TIDAK
Pada assembler bilangan-bilangan dibedakan lagi menjadi 2, yaitu bilangan bertanda dan tidak. Bilangan bertanda adalah bilangan yang mempunyai arti plus(+) dan minus(-), misalkan angka 17 dan -17. Pada bilangan tidak bertanda, angka negatif(yang mengandung tanda '-') tidaklah dikenal. Jadi angka -17 tidak akan akan dikenali sebagai angka -17, tetapi sebagai angka lain. Kapan suatu bilangan perlakukan sebagai bilangan bertanda dan tidak? Assembler akan selalu melihat pada Sign Flag, bila pada flag ini bernilai 0, maka bilangan akan diperlakukan sebagai
bilangan tidak bertanda, sebaliknya jika flag ini bernilai 1, maka bilangan akan diperlakukan sebagai bilangan bertanda. Pada bilangan bertanda bit terakhir (bit ke 16) digunakan sebagai tanda plus(+) atau minus(-). Jika pada bit terakhir bernilai 1 artinya bilangan tersebut adalah bilangan negatif, sebaliknya jika bit terakhir bernilai 0, artinya bilangan tersebut adalah bilangan positif(Gambar 1.1).
| >>>> Bilangan <<<< |
+------------+---------------+---------------+
| Biner |Tidak Bertanda | Bertanda |
+------------+---------------+---------------+
| 0000 0101 | + 5 | + 5 |
| 0000 0100 | + 4 | + 4 |
| 0000 0011 | + 3 | + 3 |
| 0000 0010 | + 2 | + 2 |
| 0000 0001 | + 1 | + 1 |
| 0000 0000 | 0 | 0 |
| 1111 1111 | + 255 | - 1 |
| 1111 1110 | + 254 | - 2 |
| 1111 1101 | + 253 | - 3 |
| 1111 1100 | + 252 | - 4 |
| 1111 1011 | + 251 | - 5 |
| 1111 1010 | + 250 | - 6 |
PENGERTIAN REGISTER
Dalam pemrograman dengan bahasa Assembly, mau tidak mau anda harus berhubungan dengan apa yang dinamakan sebagai Register. Lalu apakah yang dimaksudkan dengan register itu sebenarnya ?.
Register merupakan sebagian memori dari mikroprosesor yang dapat diakses dengan kecepatan yang sangat tinggi. Dalam melakukan pekerjaannya mikroprosesor selalu menggunakan register-register sebagai perantaranya, jadi register dapat diibaratkan sebagai kaki dan tangannya mikroprosesor.
JENIS-JENIS REGISTER
Register yang digunakan oleh mikroprosesor dibagi menjadi 5 bagian dengan tugasnya yang berbeda-beda pula, yaitu :
Segmen Register.
Register yang termasuk dalam kelompok ini terdiri atas register CS,DS,ES dan SS yang masing-masingnya merupakan register 16 bit. Register-register dalam kelompok ini secara umum digunakan untuk menunjukkan alamat dari suatu segmen.
Register CS(Code Segment) digunakan untuk menunjukkan tempat dari segmen yang sedang aktif, sedangkan register SS(Stack Segment) menunjukkan letak dari segmen yang digunakan oleh stack. Kedua register ini sebaiknya tidak sembarang diubah karena akan menyebabkan kekacauan pada program anda nantinya.
Register DS(Data Segment) biasanya digunakan untuk menunjukkan tempat segmen dimana data-data pada program disimpan. Umumnya isi dari register ini tidak perlu diubah kecuali pada program residen.
Register ES(Extra Segment), sesuai dengan namanya adalah suatu register bonus yang tidak mempunyai suatu tugas khusus.
Register ES ini biasanya digunakan untuk menunjukkan suatu alamat di memory, misalkan alamat memory video. Pada prosesor 80386 terdapat tambahan register segment 16 bit, yaitu FS<Extra Segment> dan GS<Extra Segment>.
Pointer dan Index Register.
Register yang termasuk dalam kelompok ini adalah register SP,BP,SI dan DI yang masing-masing terdiri atas 16 bit. Register- register dalam kelompok 16 ini secara umum digunakan sebagai penunjuk atau pointer terhadap suatu lokasi di memory.
Register SP(Stack Pointer) yang berpasangan dengan register segment SS(SS:SP) digunakan untuk mununjukkan alamat dari stack, sedangkan register BP(Base Pointer)yang berpasangan dengan register SS(SS:BP) mencatat suatu alamat di memory tempat data.
Register SI(Source Index) dan register DI(Destination Index) biasanya digunakan pada operasi string dengan mengakses secara langsung pada alamat di memory yang ditunjukkan oleh kedua register ini. Pada prosesor 80386 terdapat tambahan register
32 bit, yaitu ESP,EBP,ESI dan EDI.
General Purpose Register.
Register yang termasuk dalam kelompok ini adalah register AX,BX,CX dan DX yang masing-masing terdiri atas 16 bit. Register- register 16 bit dari kelompok ini mempunyai suatu ciri khas, yaitu dapat dipisah menjadi 2 bagian dimana masingmasing bagian terdiri atas 8 bit, seperti pada gambar 4.1. Akhiran H menunjukkan
High sedangkan akhiran L menunjukkan Low.
+ A X + + B X + + C X + + D X +
+-+--+--+-+ +-+--+--+-+ +-+--+--+-+ +-+--+--+-+
| AH | AL | | BH | BL | | CH | CL | | DH | DL |
+----+----+ +----+----+ +----+----+ +----+----+
Secara umum register-register dalam kelompok ini dapat digunakan untuk berbagai keperluan, walaupun demikian ada pula penggunaan khusus dari masing-masing register ini yaitu :Register AX, secara khusus digunakan pada operasi aritmatika terutama dalam operasi pembagian dan pengurangan.
Register IP berpasangan dengan CS(CS:IP) menunjukkan alamat dimemory tempat dari intruksi(perintah) selanjutnya yang akan dieksekusi. Register IP juga merupakan register 16 bit. Pada prosesor 80386 digunakan register EIP yang merupakan register 32 bit.
Flags Register.
Sesuai dengan namanya Flags(Bendera) register ini menunjukkan kondisi dari suatu keadaan< ya atau tidak >. Karena setiap keadaan dapat digunakan 1 bit saja, maka sesuai dengan jumlah bitnya, Flags register ini mampu memcatat sampai 16 keadaan.
Adapun flag yang terdapat pada mikroprosesor 8088 keatas adalah :
·         OF <OverFlow Flag>. Jika terjadi OverFlow pada operasi aritmatika, bit ini akan bernilai 1.
·         SF <Sign Flag>. Jika digunakan bilangan bertanda bit ini akan bernilai 1
·         ZF <Zero Flag>. Jika hasil operasi menghasilkan nol, bit ini akan bernilai 1.
·         CF <Carry Flag>. Jika terjadi borrow pada operasi pengurangan atau carry pada penjumlahan, bit ini akan bernilai 1.
·         PF <Parity Flag>. Digunakan untuk menunjukkan paritas bilangan. Bit ini akan bernilai 1 bila bilangan yang dihasilkan merupakan bilangan genap.
·         DF <Direction Flag>. Digunakan pada operasi string untuk menunjukkan arah proses.
·         IF <Interrupt Enable Flag>. CPU akan mengabaikan interupsi yang terjadi jika bit ini 0.
·         TF <Trap Flag>. Digunakan terutama untuk Debugging, dengan operasi step by step.
·         AF <Auxiliary Flag>. Digunakan oleh operasi BCD, seperti pada perintah AAA.
·         NT <Nested Task>. Digunakan pada prosesor 80286 dan 80386 untuk menjaga jalannya interupsi yang terjadi secara beruntun.
·         IOPL <I/O Protection level>. Flag ini terdiri atas 2 bit dan digunakan pada prosesor 80286 dan 80386 untuk mode proteksi.
·         PE <Protection Enable>. Digunakan untuk mengaktifkan mode proteksi. Flag ini akan bernilai 1 pada mode proteksi dan 0 pada mode real.
·         MP <Monitor Coprosesor>. Digunakan bersama flag TS untuk menangani terjadinya intruksi WAIT.
·         EM <Emulate Coprosesor>. Flag ini digunakan untuk mensimulasikan coprosesor 80287 atau 80387.
·         TS <Task Switched>. Flag ini tersedia pada 80286 keatas.
·         ET <Extension Type>. Flag ini digunakan untuk menentukan jenis coprosesor 80287 atau 80387.
·         RF <Resume Flag>. Register ini hanya terdapat pada prosesor 80386 keatas.
·         VF <Virtual 8086 Mode>. Bila flag ini bernilai 1 pada saat mode proteksi, mikroprosesor akan memungkinkan dijalankannya aplikasi mode real pada mode proteksi. Register ini hanya terdapat pada 80386 keatas.
Perintah–Perintah Debug
A : Merakit intruksi simbolik (kode mesin)
D : menampilkan isi suatu daerah memori
E : memasukan data ke memori yang dimulai pada lokasi tertentu
G : run executable program ke memori
N : menamai program
P : eksekusi sekumpulan intruksi yang terkait
Q : quit
R : menampilkan isi satu atau lebih register
T : trace isi sebuah intruksi
U : unassembled kode mesin ke kode simbolik
W : menulis program ke disk
Instruksi Bahasa Assembly
Secara fisik, kerja dari sebuah komputer dapat dijelaskan sebagai siklusFpfmbacaan instruksi yang tersimpan di dalam memori. Komputer menentukan alamat dari memori program yang akan dibaca, dan melakukan proses baca data di memori. Data yang dibaca diinterprestasikan sebagai instruksi. Alamat instruksi disimpan oleh komputer di register, yang dikenal sebagai program counter. Instruksi ini misalnya program aritmatika yang melibatkan 2 register.
Dalam bahasa Assembly mempunyai 3 tipe intruksi dasar yaitu : mnemonic, operan1 dan 2 serta komentar
Mnemonic atau opcode ialah kode yang akan melakukan aksi terhadap operand . Operand ialah data yang diproses oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau lebih operand, kadang juga tidak perlu operand. Sedangkan komentar dapat kita berikan dengan menggunakan tanda titik koma (;). Berikut contoh jumlah operand yang berbeda beda dalam suatu assembly.
CJNE R0,#22H, Tasmi ;dibutuhkan 3 buah operand
MOVX @DPTR, A ;dibutuhkan 2 buah operand
RR A ;1 buah operand
NOP ; tidak memerlukan operand
Semua instruksi tersebut dapat dibagi menjadi lima kelompok menurut fungsinya, yaitu:
􀂾 Instruksi Pemindahan Data
􀂾 Instruksi Aritmatika
􀂾 Instruksi Logika dan Manipulasi Bit
􀂾 Instruksi Percabangan
􀂾 Instruksi Stack, I/O, dan Kontrol.
Prosedur Percobaan
1. Klik menu start pada komputer
2. Pilih All Programs dan pilih accessories
3. Pilih command prompt
4. Lalu anda ketikan debug pada bagian c prompt dan tekan Enter
Kemudian anda ketikan Huruf A 100 dan tekan Enter
6. Lalu teketikan program dibawah ini
MOV AX, 0090H
MOV DS, AX
MOV SI,0120H
MOV DI, 0130H
MOV AX, SI
MOV DI, AX
INT 20H
7. Untuk melihat hasil dari program di atas ketikan huruf T (Trace) lalu tekan enter
dan lihat nilai dari tiap register
 
Untuk memberi nama pada program yang kita buat adalah dengan mengetikanhuruf n nama program.com
-n test.com
Tugas
1. Analisis Program yang anda dapat
2. Buatkan program untuk menukarkan isi data pada alamat memory 0120H dan
alamat memory 0130H
3. Buatkan Flowchart dari tuga

Tidak ada komentar:

Posting Komentar