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
![](file:///C:/Users/ARIZWA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)
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
![](file:///C:/Users/ARIZWA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif)
Kemudian
anda ketikan Huruf A 100 dan tekan Enter
![](file:///C:/Users/ARIZWA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif)
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
![](file:///C:/Users/ARIZWA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif)
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