BILANGAN
1.1. BERBAGAI JENIS BILANGAN
Didalam pemrograman dengan bahasa assembler, bisa digunakan berbagai jenis bilangan. Jenis bilangan yang bisa digunakan, yaitu: Bilangan biner, oktaf, desimal dan hexadesimal. Pemahaman terhadap jenis-jenis bilangan ini adalah penting, karena akan sangat membantu kita dalam pemrograman yang sesungguhnya.
1.1.1. 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.
1.1.2. 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).
1.1.3. 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 8N. Contohnya bilangan 128 = (1 X 81) + (2 X 80) = 1010.5
1.1.4. 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.
1.2. 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
+------------+---------------+---------------+
Gambar 1.1. Bilangan Bertanda dan Tidak
M E M O R I
Memori dengan komputer memiliki hubungan yang tak dapat dipisahkan, karena setiap komputer memerlukan memori sebagai tempat kerjanya. Memori ini dapat berfungsi untuk memuat program dan juga sebagai tempat untuk menampung hasil proses.
Yang perlu kita perhatikan bahwa memori untuk menyimpan program maupun hasil dari pekerjaan bersifat volatile yang berarti bahwa data yang disimpan cuma sebatas adanya aliran listrik. Jadi bila listrik mati maka hilang pulalah semua data yang ada di dalamnya. Hal ini mengakibatkan diperlukannya media penyimpan kedua yang biasanya berupa disket maupun hard disk.
2.1. Microprocessor
Pada IBM-PC terdapat suatu bagian penting yang disebut microprocessor atau yang sering disebut processor saja. Processor ini berfungsi untuk menangani keseluruhan dari kerja komputer kita. Pada processor inilah segala hal yang berhubungan dengan kerja komputer diatur dan dibagi prioritasnya dengan baik agar tidak terjadi kesalahan yang kemudian akan menyebabkan kacaunya informasi yang diperoleh.
Lama kelamaan tugas komputer tentu saja makin bertambah baik dari segi kuantitas maupun kerumitannya. Sejalan dengan itu processor juga makin dikembangkan. Processor yang baru sebenarnya hanyalah perbaikan dan pengembangan dari yang versi lama sehingga semua instruksi yang berlaku di processor lama dapat pula dikerjakan oleh yang baru dengan tentu saja beberapa keunggulan.
Adapun processor yang kini banyak beredar di pasaran :
- 8088 & 8086 :
Ini merupakan processor IBM-PC yang pertama sekali atau yang sering disebut XT. Processor 8088 menggunakan jalur bus data 8 bit sedangkan 8086 menggunakan 16 bit. Perbedaan jalur bus ini menyebabkan perbedaan jumlah data yang dikirim pada satu saat dan secara langsung mengakibatkan speed 8086 berada di atas 8088. Baik 8088 maupun 8086 mampu mengalamatkan memori hingga 1 MB.
- 80286 :
Versi pengembangan dari 8086. Pada 80286 ini beberapa instruksi baru ditambahkan. Selain itu dengan jalur bus yang sama dengan 8086, 80286 dirancang mempunyai speed di atas 8086. Selain itu 80286 dapat bekerja pada 2 8
mode yaitu mode real dan protected.
Mode real pada 80286 dapat beroperasi sama seperti 8088 dan 8086 hanya terdapat perbedaan dalam hal speed. Mode real ini dimaksudkan agar semua software yang dapat dioperasikan pada 8088/8086 dapat pula dioperasikan dengan baik di 80286. Pada mode protected 80286 mampu mengalamatkan sampai 16 MB memori.
- 80386 :
Processor 80386 merupakan sesuatu yang sangat baru dibanding 80286 sebab bus data yang digunakan di sini sudah 32 bit sehingga speednya juga jauh di atas 80286. Selain itu pada 80386 ditambahkan pula sebuah mode pemrograman baru yaitu mode virtual. Pada mode virtual ini 80386 mampu mengalamatkan sampai 4 GB memori. Sama seperti 80286, mode real dimaksudkan untuk kompatibilitas
dengan 8088/8086 dan mode protected untuk menjaga kompatibilitas dengan 80286.
2.2. Organisasi Memori Pada PC
Memori yang ada pada komputer perlu diatur sedemikian rupa sehingga mudah dalam pengaksesannya. Oleh sebab itu dikembangkanlah suatu metode yang efektif dalam pengorganisasiannya. Pada bagian ini akan dibahas mengenai pengorganisasian memori ini.
2.3. Pembagian Memori
Memori komputer terbagi atas 16 blok dengan fungsi-fungsi khusus yang sebagian besar adalah sebagai RAM (Random Access Memory) yang berfungsi sebagai penyimpan bagi hasil pengolahan pada komputer itu sendiri. Untuk lebih jelasnya diberikan pembagian fungsi pada blok memori ini secara kasar pada gambar 2.1.
---------------------------------------------------
block fungsi
---------------------------------------------------
0 RAM
1 RAM
2 RAM
3 RAM
4 RAM
5 RAM
6 RAM
7 RAM
8 RAM
9 RAM
A EXTENDED VIDEO MEMORI
B EXTENDED VIDEO MEMORY
C PERLUASAN ROM
D FUNGSI LAIN
F BIOS & BASIC
---------------------------------------------------
Gambar 2.1. Pembagian blok memori IBM PC
________________________________________
2.4. Pengalamatan Memori Dengan Segment Offset
Sudah kita bahas bersama bahwa baik 8086 maupun mode real 80286 dapat mengalamatkan sampai 1 MB memori. Tetapi sebenarnya baik 8086 maupun 80286 adalah procesor 16 bit. Banyaknya memori yang dapat dicatat atau dialamatkan oleh procesor 16 bit adalah maksimal 216 byte (=64 KB). Jadi bagaimana 8086 dan mode real 80286 mampu mengalamatkan sampai 1 MB memori ?.
Hal ini dapat dimungkinkan dengan adanya pengalamatan yang menggunakan sistem 20 bit walaupun sebenarnya procesor itu hanya 16 bit. Dengan cara ini dapat dialamatkan 220 byte (=1 MB) memori. Tetapi masih tetap ada satu kendala dalam pengalamatan 20 bit ini. Yaitu bahwa sesuai dengan tipenya procesor ini hanya mampu mengakses 16 bit data pada satu kali akses time. Sebagai pemecahannya dikembangkanlah suatu metode pengalamatan 20 bit yang dimasukkan ke dalam format 16 bit.
Pada metode pengalamatan ini baik 8086 maupun mode real 80286 membagi ruang memori ke dalam segmen-segmen di mana besar 1 segmen adalah 64 KB (=216 byte). Jadi pada segmen 0000h(Tanda "h" menunjukkan hexadesimal) terdapat 64 KB data, demikian pula dengan segmen 0001h dan seterusnya.
Sekarang bagaimana caranya agar setiap data yang tersimpan dalam satu segmen yang besarnya 64 KB itu dapat diakses secara individual. Cara yang dikembangkan adalah dengan membagi-bagi setiap segmen menjadi bagian-bagian yang disebut offset. Dalam satu segmen terdapat 216 offset yang diberi nomor dari 0000h sampai FFFFh. Nomor offset selalu diukur relatif dari awal suatu segmen.
Sekarang kita lihat bagaimana sebenarnya letak suatu segmen dalam memori komputer kita. Segmen 0000h berawal dari lokasi memori 0 hingga 65535 ( 64 KB ). Segmen 0001h berawal dari lokasi memori 16 (0010h) hingga 65551 (65535 + 16). Segmen 0002h berawal dari lokasi 32 hingga 65567. Demikian seterusnya. Kita lihat bahwa sistem penempatan segmen semacam ini akan menyebabkan ter-
Segmen Offset
0000 +--------------------+0000
0001 +-----+-------------+0000 0016
0002+-----+------------+0000 0016 0032
0003+-----+-----------+0000 0016 0032 0048
: : :
: : : :
:
+------+65535
:
: +------+65535
+------+65535
+-----------------+65535
Gambar 2.2. Peta Overlapping Segmen
jadinya overlapping (tumpang-tindih) di mana lokasi offset 0010h bagi segmen 0000h akan merupakan offset 0000h bagi segmen 0001h. Demikian pula offset 0011h bagi segmen 0000h akan merupakan offset 0001h bagi segmen 0001h. Dalam pembahasan selanjutnya akan kita lihat bahwa ada banyak nilai segmen:offset yang dapat digunakan untuk menyatakan suatu alamat memori tertentu disebabkan adanya overlapping ini. Untuk lebih jelasnya dapat kita lihat pada gambar 2.2.
2.5. Konversi Alamat
Alamat yang menggunakan sistem segmen:offset ini disebut sebagai alamat relatif karena sifat offset yang relatif terhadap segmen. Sedangkan alamat memori yang sebenarnya disebut alamat absolut. Berikut kita lihat cara pengkonversian alamat relatif ke absolut.
Pengkonversian dapat dilakukan dengan menggeser nilai segmen 4 bit ke kiri dan kemudian dijumlahkan dengan nilai offset. Atau yang lebih sederhana adalah dengan mengalikan nilai segmen dengan 24 (=10h) dan kemudian dijumlahkan dengan nilai offset. Cara ini dikembangkan dari besarnya selisih segmen yang satu dengan yang berikutnya yang sebesar 16 bit (=10h).
Alamat relatif : 1357h:2468h 1356h:2478h
13570 13560
2468 2478
------- -------
Alamat absolut : 159D8h 159D8h
Pada kedua contoh di atas terlihat jelas alamat relatif 1357h:2468h sebenarnya menunjukkan lokasi yang sama dalam memori dengan alamat relatif 1356h:2478h yang disebut overlapping.
Alamat yang overlapping ini menyebabkan sebuah alamat absolute dapat dinyatakan dengan alamat segmen:offset yang bervariasi sebanyak 2 pangkat 12 atau sebanyak 4096 variasi.
Variasi untuk alamat absolute :
0 - 15 dapat dinyatakan dengan 1 variasi
16 - 31 dapat dinyatakan dengan 2 variasi
32 - 48 dapat dinyatakan dengan 3 variasi
:
:
65520 keatas dapat dinyatakan dengan 4096 variasi.
BAB III
INTERRUPT
3.1. PENGERTIAN INTERRUPT
Interupsi adalah suatu permintaan khusus kepada mikroposesor untuk melakukan sesuatu. Bila terjadi interupsi, maka komputer akan menghentikan dahulu apa yang sedang dikerjakannya dan melakukan apa yang diminta oleh yang menginterupsi.
Pada IBM PC dan kompatibelnya disediakan 256 buah interupsi yang diberi nomor 0 sampai 255. Nomor interupsi 0 sampai 1Fh disediakan oleh ROM BIOS, yaitu suatu IC didalam komputer yang mengatur operasi dasar komputer. Jadi bila terjadi interupsi dengan nomor 0-1Fh, maka secara default komputer akan beralih menuju ROM BIOS dan melaksanakan program yang terdapat disana. Program yang melayani suatu interupsi dinamakan Interrupt Handler.
3.2. VEKTOR INTERUPSI
Setiap interrupt akan mengeksekusi interrupt handlernya masing-masing berdasarkan nomornya. Sedangkan alamat dari masing- masing interupt handler tercatat di memori dalam bentuk array yang besar elemennya masing-masing 4 byte. Keempat byte ini dibagi lagi yaitu 2 byte pertama berisi kode offset sedangkan 2 byte berikutnya berisi kode segmen dari alamat interupt handler yang bersangkutan. Jadi besarnya array itu adalah 256 elemen dengan ukuran elemen masing-masing 4 byte. Total keseluruhan memori yang dipakai adalah sebesar 1024 byte (256 x 4 = 1024) atau 1 KB dan disimpan dalam lokasi memori absolut 0000h sampai 3FFh. Array sebesar 1 KB ini disebut Interupt Vector Table (Table Vektor Interupsi). Nilai-nilai yang terkandung pada Interupt Vector Table ini tidak akan sama di satu komputer dengan yang lainnya.
Interupt yang berjumlah 256 buah ini dibagi lagi ke dalam 2 macam yaitu:
- Interupt 00h - 1Fh (0 - 31) adalah interrupt BIOS dan standar di semua komputer baik yang menggunakan sistem operasi DOS atau bukan. Lokasi Interupt Vector Table-nya ada di alamat absolut 0000h-007Fh.
- Interupt 20h - FFh (32 - 255) adalah interrupt DOS. Interrupt ini hanya ada pada komputer yang menggunakan sistem operasi DOS dan Interupt Handler-nya di-load ke memori oleh DOS pada saat DOS digunakan. Lokasi Interupt Vector Table-nya ada di alamat absolut 07Fh-3FFh.
+---------------------------------------------------------------+
Nomor Nama Nomor Nama
Interupt Interupt Interupt Interupt
+---------------------------------------------------------------+
*00h Divide By Zero 10h Video Service
*01h Single Step 11h Equipment Check
*02h Non MaskableInt(NMI) 12h Memory Size
*03h Break point 13h Disk Service
04h Arithmatic Overflow 14h Communication (RS-232)
05h Print Screen 15h Cassette Service
06h Reserved 16h Keyboard Service
07h Reserved 17h Printer Service
08h Clock Tick(Timer) 18h ROM Basic
09h Keyboard 19h Bootstrap Loader
0Ah I/O Channel Action 1Ah BIOS time & date
0Bh COM 1 (serial 1) 1Bh Control Break
0Ch COM 2 (serial 2) 1Ch Timer Tick
0Dh Fixed Disk 1Dh Video Initialization
0Eh Diskette 1Eh Disk Parameters
0Fh LPT 1 (Parallel 1) 1Fh Graphics Char
+---------------------------------------------------------------+
Gambar 3.1. BIOS Interrupt
* Interrupt ini telah dipastikan kegunaannya oleh sistem untuk keperluan yang khusus , tidak boleh dirubah oleh pemrogram seperti yang lainnya.
- DEVIDE BY ZERO : Jika terjadi pembagian dengan nol maka proses akan segera dihentikan.
- SINGLE STEP : Untuk melaksanakan / mengeksekusi intruksi satu persatu.
- NMI : Pelayanan terhadap NMI (Non Maskable Interrupt) yaitu interupsi yang tak dapat dicegah.
- BREAK POINT : Jika suatu program menyebabkan overflow flag menjadi 1 maka interrupt ini akan melayani pencegahannya dan memberi tanda error.
+-------------------------------------------+
Nomor Nama Interrupt
Interrupt
+-------------------------------------------+
20h Terminate Program
21h DOS Function Services
22h Terminate Code
23h Ctrl-Break Code
24h Critical Error Handler
25h Absolute Disk Read
26h Absolute Disk Write
27h Terminate But Stay Resident
+-------------------------------------------+
Gambar 3.2. DOS Interrupt
Didalam pemrograman dengan bahasa assembler kita akan banyak sekali menggunakan interupsi untuk menyelesaikan suatu tugas.
REGISTER
4.1.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.
4.2.JENIS-JENIS REGISTER
Register yang digunakan oleh mikroprosesor dibagi menjadi 5 bagian dengan tugasnya yang berbeda-beda pula, yaitu :
4.2.1. 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
4.2.2. 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.
4.2.3. 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 masing-masing 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
+----+----+ +----+----+ +----+----+ +----+----+
Gambar 4.1. General purpose Register
________________________________________
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 BX, biasanya digunakan untuk menunjukkan suatu alamat offset dari suatu segmen.
Register CX, digunakan secara khusus pada operasi looping dimana register ini menentukan berapa banyaknya looping yang akan terjadi.
Register DX, digunakan untuk menampung sisa hasil pembagian 16 bit.
Pada prosesor 80386 terdapat tambahan register 32 bit, yaitu EAX,EBX,ECX dan EDX.
4.2.4. Index Pointer Register
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.
4.2.5. Flags Register.
Sesuai dengan namanya Flags(Bendera) register ini menunjukkan kondisi dari suatu keadaan<>. 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
- SF
- ZF
- CF
bernilai 1.
0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 01 00
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
NT IOPLOFDFIFTFSFZF AF PF CF
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Gambar 4.2. Susunan Flags Register 8088
- PF
dihasilkan merupakan bilangan genap.
- DF
- IF
- TF
- AF
- NT
terjadi secara beruntun.
- IOPL . Flag ini terdiri atas 2 bit dan digunakan pada prosesor 80286 dan 80386 untuk mode proteksi.
Adapun susunan dari masing-masing flag didalam flags register dapat anda lihat pada gambar 4.2. Pada prosesor 80286 dan 80386 keatas terdapat beberapa tambahan pada flags register, yaitu :
- PE
- MP
- EM
- TS
- ET
- RF
- VF
mikroprosesor akan memungkinkan dijalankannya aplikasi mode real pada mode proteksi. Register ini hanya terdapat pada 80386 keatas.
Disadur Dari forumbebas.com
Faisal Assembler