Operasi Aritmatika pada Assemby dengan Debug


Pada kali ini saya akan berbagi sedikit tentang operasi Aritmatika pada Assembly beserta pdf :

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