BAB IV IMPLEMENTASI DAN PENGUJIAN IMPLEMENTASI DAN PENGUJIAN
Perintah-perintah Mikroprosesor INTEL 8088/8086 yang didukung di dalam perangkat lunak ini adalah modus pengalamatan (MOV), penjumlahan (ADD), penjumlahan dengan satu (INC), penjumlahan dengan carry (ADC), pengurangan (SUB), pengurangan dengan satu (DEC), pengurangan dengan pinjaman (SBB), perkalian (MUL) dan pembagian (DIV). Sedangkan register – register yang didukung adalah general purpose register, yaitu AX, BX, CX, DX, dan register flag yaitu Z (Zero), C (Carry), A (Half-Carry), S (Sign), P (Parity) dan O (Overflow). Penulis merancang penerapan modus pengalamatan dan perintah aritmatika dalam sebuah perangkat lunak sehingga User dapat meng-input perintah–perintah opcode yang didukung dan perangkat lunak yang akan mengeksekusi perintah baris per baris dan menunjukkan perubahan isi register akibat dari perintah yang dieksekusinya.
4.1
Implementasi Sistem
Implementasi sistem dalam perangkat lunak simulasi ini mencakup spesifikasi kebutuhan perangkat keras (hardware) dan spesifikasi perangkat lunak (software).
50
4.1.1
Spesifikasi Perangkat Keras dan Perangkat Lunak
Program ini dijalankan dengan menggunakan perangkat keras (hardware) sebagai berikut : 1.
Prosesor Intel Atom N450 1.66 GHz.
2.
Memory 1 Gb.
3.
Harddisk 150 GB.
4.
GMA card 256 MB.
5.
Monitor dengan resolusi 1024 X 600 pixel.
6.
Keyboard dan Mouse Adapun perangkat lunak (software) yang direkomendasikan untuk menjalankan
aplikasi ini adalah lingkungan sistem operasi MS-Windows NT/2000/XP.
4.2
Pengujian Program
Penulis melakukan pengujian-pengujian meliputi pengujian unit berupa prosedur atau fungsi dan pengujian sistem secara keseluruhan. Teknik yang digunakan adalah pengujian black box. Setiap pengujian dilakukan dengan cara membuat contoh soal. Dari satu contoh soal yang diujikan sebanyak 3 kali didapat hasil sebagai berikut :
51
Inisialisasi Pengaksesan Fungsi
Antarmuka
dan Akhir
Performasi
Data Program Test I
OK
OK
NO
NO
NO
Test II
OK
OK
OK
NO
NO
Test III
OK
OK
OK
OK
OK
Berikut contoh soal yang diujikan yang merupakan suatu ekspresi aritmatika dalam bilangan heksa desimal (10CF * 2) + (((AB - 45) - (C / 5)) * D), dapat ditulis ke dalam bentuk op-code sebagai berikut (hasil operasi disimpan ke register AX) : -
MOV AX, AB
-
MOV BX, 45
-
SUB AX, BX
-
MOV BX, AX
-
MOV AX, C
-
MOV CX, 5
-
DIV CX
-
SUB BX, AX
-
MOV AX, D
-
MUL BX
-
MOV BX, AX
-
MOV AX, 10CF
-
MOV CX, 2
-
MUL CX
-
ADD AX, BX
52
Input perintah pada perangkat lunak adalah barisan op-code di atas, maka output program adalah sebagai berikut :
Gambar 4.1 Tampilan Output Untuk Contoh Kasus
Output hasil eksekusi adalah sebagai berikut : =============================== 1.
MOV AX, BX
=============================== Perintah MOV memindahkan data dari register BX ke AX. Isi register AX sekarang = isi dari register BX = 0000000000000000 = 0000H. =============================== 2.
MOV BX, 45
===============================
53
Perintah MOV akan menyalin bilangan 45H ke register BX. Isi register BX sekarang = 45H = 01000101.
=============================== 3.
SUB AX, BX
=============================== Perintah SUB mengurangkan isi dari register AX dan BX. Hasil pengurangan dikembalikan ke register AX. Isi dari register AX dikurang dengan isi register BX = 0000000000000000 0000000001000101 = 1111111110111011 Isi dari register AX berubah menjadi 1111111110111011 Flag Z = 0 -> Hasil pengurangan tidak nol. Flag C = 1 -> Bit carry dari operasi. Flag A = 1 -> Bit half carry dari operasi. Flag S = 0 -> Hasil pengurangan positif. Flag P = 1 -> Jumlah Bit bernilai '1' = 14 (genap). Flag O = 0 -> Hasil operasi tidak overflow.
=============================== 4.
MOV BX, AX
=============================== Perintah MOV memindahkan data dari register AX ke BX. Isi register BX sekarang = isi dari register AX = 1111111110111011 = FFBBH.
=============================== 5.
MOV AX, C
=============================== Perintah MOV akan menyalin bilangan CH ke register AX. Isi register AX sekarang = CH = 1100.
54
=============================== 6.
MOV CX, 5
=============================== Perintah MOV akan menyalin bilangan 5H ke register CX. Isi register CX sekarang = 5H = 0101.
=============================== 7.
DIV CX
=============================== Perintah DIV melakukan operasi pembagian isi dari register DX-AX dengan CX. Hasil bagi disimpan ke register AX. Sisa bagi disimpan ke register DX. Isi dari register DX-AX dibagi dengan isi dari register CX. Hasil
bagi
dari
00000000000000000000000000001100
/
0000000000000101
=
/
0000000000000101
=
0000000000000010 Sisa
bagi
dari
00000000000000000000000000001100
0000000000000010 Isi dari register AX berubah menjadi 0000000000000010. Isi dari register DX berubah menjadi 0000000000000010. Flag Z = 0 -> Hasil pengurangan tidak nol. Flag C = 0 -> MSB 16 bit = 1 Flag S = 0 -> Hasil pengurangan positif. Flag P = 0 -> Jumlah Bit bernilai '1' = 1 (ganjil). Flag O = 0 -> Hasil operasi tidak overflow.
=============================== 8.
SUB BX, AX
=============================== Perintah SUB mengurangkan isi dari register BX dan AX. Hasil pengurangan dikembalikan ke register BX.
55
Isi dari register BX dikurang dengan isi register AX = 1111111110111011 0000000000000010 = 1111111110111001 Isi dari register BX berubah menjadi 1111111110111001 Flag Z = 0 -> Hasil pengurangan tidak nol. Flag C = 0 -> Bit carry dari operasi. Flag A = 0 -> Bit half carry dari operasi. Flag S = 0 -> Hasil pengurangan positif. Flag P = 0 -> Jumlah Bit bernilai '1' = 13 (ganjil). Flag O = 0 -> Hasil operasi tidak overflow.
=============================== 9.
MOV AX, D
=============================== Perintah MOV akan menyalin bilangan DH ke register AX. Isi register AX sekarang = DH = 1101.
=============================== 10.
MUL BX
=============================== Perintah MUL melakukan operasi perkalian isi dari register BX dengan AX. Hasil perkalian disimpan ke register DX-AX. Isi
dari
register
BX
dikali
isi
register
AX
0000000000001101 = 00000000000011001111110001100101 Isi dari register DX berubah menjadi 0000000000001100. Isi dari register AX berubah menjadi 1111110001100101. Flag Z = 0 -> Hasil pengurangan tidak nol. Flag C = 0 -> MSB 16 bit = 1 Flag S = 0 -> Hasil pengurangan positif. Flag P = 1 -> Jumlah Bit bernilai '1' = 10 (genap). Flag O = 0 -> Hasil operasi tidak overflow.
56
=
1111111110111001
*
=============================== 11.
MOV BX, AX
=============================== Perintah MOV memindahkan data dari register AX ke BX. Isi register BX sekarang = isi dari register AX = 1111110001100101 = FC65H.
=============================== 12.
MOV AX, 10CF
=============================== Perintah MOV akan menyalin bilangan 10CFH ke register AX. Isi register AX sekarang = 10CFH = 0001000011001111.
=============================== 13.
MOV CX, 2
=============================== Perintah MOV akan menyalin bilangan 2H ke register CX. Isi register CX sekarang = 2H = 0010.
=============================== 14.
MUL CX
=============================== Perintah MUL melakukan operasi perkalian isi dari register CX dengan AX. Hasil perkalian disimpan ke register DX-AX. Isi
dari
register
CX
dikali
isi
register
AX
0001000011001111 = 00000000000000000010000110011110 Isi dari register DX berubah menjadi 0000000000000000. Isi dari register AX berubah menjadi 0010000110011110. Flag Z = 0 -> Hasil pengurangan tidak nol. Flag C = 0 -> MSB 16 bit = 0
57
=
0000000000000010
*
Flag S = 0 -> Hasil pengurangan positif. Flag P = 0 -> Jumlah Bit bernilai '1' = 7 (ganjil). Flag O = 0 -> Hasil operasi tidak overflow.
=============================== 15.
ADD AX, BX
=============================== Perintah ADD menjumlahkan isi dari register AX dan BX. Hasil penjumlahan dikembalikan ke register AX. Isi dari register AX ditambah dengan isi register BX = 0010000110011110 + 1111110001100101 = 10001111000000011 Isi dari register AX berubah menjadi 0001111000000011 Flag Z = 0 -> Hasil penjumlahan tidak nol. Flag C = 1 -> Bit carry dari operasi. Flag A = 1 -> Bit half carry dari operasi. Flag S = 0 -> Hasil penjumlahan positif. Flag P = 1 -> Jumlah Bit bernilai '1' = 6 (genap). Flag O = 1 -> Hasil operasi overflow.
Hasil operasi disimpan pada register AX, yaitu : 0001 1110 0000 0011 (dalam biner) atau 1E03 (dalam heksa desimal).
58