Dasar Teori
Operasi Aritmatika merupakan dasar dalam mikroprosessor. Operasi
aritmatika dipergunakan untuk melakukan kalkulasi berbagai proses yang nantinya
akan dilakukan oleh microprocessor, baik yang berhubungan dengan perhitungan
alamat, data, maupun keperluan lainnya.
Operasi Aritmatika
meliputi:
1. Operasi penjumlahan: yaitu operasi untuk menabahkan 2 atau lebih operan. Operasi ini ada
berbagai macam, antara lain : ADD, ADC, INC.
2. Operasi pengurangan: yaitu operasi untuk mengurangkan 2 atau lebih operan. Sama seperti
operasi penjumlahan, maka operasi pengurangan juga ada operasi pengurangan
general (SUB), pengurangan dengan carry (SBB) dan pengurangan dengan 1 (DEC).
3. Operasi perkalian: yaitu operasi untuk mengalikan 2 buah operan atau lebi dengan
menggunakan instruksi MUL.
4. Operasi pembagian: yaitu operasi untuk melakukan pembagian antara 2 buah atau lebih operab
menggunakan instruksi DIV.
Jadi, untuk melihat perubahan pada flag
– flag registernya jika terjadi operasi aritmatika, maka dipergunakan
bantuan program DEBUG .
Percobaan
·
Operasi Pengurangan
Membuat program assembly dengan menggunakan TASM dan kemudian linking
menjadi COM:
.Model Small
.Code
ORG 100h
Tdata:
JMP Proses
ALo Equ
0EFFFH
AHi Equ
122h
BLo Equ
0FFFFh
BHi Equ
0FEh
HslLo dw
?
HslHi dw
?
Proses :
MOV AX,ALo
SUB AX,BLo
MOV HslLo,AX
MOV
AX,AHi
SBB AX,BHi
MOV HslHi,AX
INT 20h
End Tdata
- Membuat Program Tambah.asm denga perintah C: edit KURANG.ASM
- Kemudian mencompile program untuk membentuk program berkestensi .obj serta untuk melihat error dalam
program yang dibuat dengan perintah tasm
KURANG.ASM seperti pada gambar dibawah.
- Setelah Tidak terdapat lagi pesan error, linking program tersebut dengan
perintah tlink/t KURANG.OBJ seperti
pada gambar dibawah:
- Kemudian debug hasil linking menggunakan DEBUG dengan mengetikkan
perintah :
DEBUG KURANG.COM
- Kemudian trace setiap baris program dan mengamati perubahan pada
register.
1. MOV AX,EFFF, yaitu memindahkan data EFFFh kedalam register AX sehingga
AX menjadi AX=EFFF pada trace selanjutnya.
2. SUB AX,FFFF, yaitu mengurangkan isi register AX dengan FFFFh sehingga
pada trace berikutnya AX=F000 dan mempunyai carry terlihat pada register flag
berubah menjadi CY.
3. MOV CS:[0103],AX, yaitu memindahkan data pata register AX kedalam Counter
Segment pada offset 0103. Dan HslLo bernilai F000
4. MOV AX,0122, yaitu memundahkan data 0122 kedalam register AX sehingga
trace berikutnya pada register AX=0122
5. SBB AX,O0FE, yaitu mengurangkan isi register ax yaitu 0122-FE-Carry
dengan 00FE, sehingga pada register AX menjadi AX=0023 setelah dikurangi. Jadi
hasil HslHi bernilai 0023
6. MOV CS:[0105],AX, memindahkan isi register AX kedalam counter Segment di
offset 0105. Sehingga HslHi bernilai 0023
7. INT 20, untuk mengakhiri eksekusi program. Kembali ke DOS
ANALISA :
Disini kita dapat melihat bagaimana caranya mendefinisikan suatu nilai
konstanta dan Variabel dengan :
ALo Equ 0EFFFH
AHi
Equ 122h
BLo
Equ 0FFFFh
BHi
Equ 0FEh
HslLo
dw ?
HslHi
dw ?
Perintah EQU digunakan untuk mendefisisikan suatu yang konstanta, data
yang telah didefinisikan dengan perintah EQU tidak dapat dirubah. Dengan
perintah EQU kita mendefinisikan bahwa ALo = 0EFFF, AHi=122, BLo=FFFF dan
BHi=0FE. Untuk menampung hasil dari pengurangan A-B(122EFFF-FEFFF) nantinya,
kita definisikan suatu tempat untuk menyimpannya dengan nama HslLo dan HslHi.
Tanda '?' digunakan untuk menyatakan bahwa tempat yang kita pesan
sebanyak sebanyak 1 word(DW) tidak diberikan data awal yang akan terdapat
pada variabel tersebut(HslLo dan HslHi).
Jadi data yang akan terdapat pada HslLo dan HslHi bisa apa saja dan kita tidak
mengetahuinya. Tempat data program kita lompati dengan perintah JMP supaya
komputer tidak mengeksekusi data program sebagai perintah.
MOV AX,ALo
SUB AX,Blo
MOV HslLO,AX
Untuk mengurangkan angka 122EFFF dengan 0FEFFFF kita dapat mengurangkan
word rendah dari angka tersebut dahulu, yaitu EFFF- FFFF. Hal ini dikarenakan
daya tampung register yang hanya 16 bit. Dapat anda lihat bahwa pengurangan
EFFF-FFFF akan menyebabkan terjadinya peminjaman(Borrow), hasil word
rendah(F000) yang didapatkan kemudian kita simpan pada variabel HslLo.
122 EFFF
FE FFFF
---------- -
023 F000
Sampai saat ini kita sudah selesai mendapatkan nilai pada word
rendahnya, yang disimpan pada variabel HslLo.
MOV AX,AHi
SBB AX,BHi
MOV HslHi,AX
Langkah selanjutnya adalah menghitung word tingginya yaitu pengurangan
122-FE-Carry dengan menggunakan perintah SBB maka masalah tersebut dengan mudah
terpecahkan. Akhirnya kita akan mendapatkan hasil pengurangan dari
122EFFF-0FEFFFF yaitu 23F000 yang tersimpan pada pasangan
HslHi:HslLo(0023F000).
Untuk lebih lengkap silahkan download disini.
Comments