Selasa, 21 Juni 2011

INSTRUKSI DASAR ARITMETIKA


INSTRUKSI DASAR ARITMETIKA
Hampir semua program computer dapat melaksanankan operasi aritmetik. Set intruksi intel mempunyai intruksi untuk aritmetik integer, menggunakan operand 8-bit dan 16-bit. Operasi floating-foint ditangani dalam salah satu dari ketiga cara berikut :
1.      Chip koprosesor matematika khusus (8087, 80287, 80387)
2.      Rutin perangkat lunak yang berfungsi sama dengan koprosesor, atau
3.      Perangkat lunak yang mengonversi nilai floating-point ke integer, menghitung, dan kemudian mengonversi bilangan kembali ke floating-point.
Ø  Intruksi INC dan DEC
Intruksi INC dan DEC menambah satu atau mengurang 1 nilai dari suatu operand, secara berurutan. Sintaknya sebagai berikut :
            INC tujuan
            DEC tujuan
Tujuan mungkin register 8-bit atau 16-bit atau operand memori. INC dan DEC lebih cepat dari intruksi ADD dan SUB. Semua status flag dipengaruhi, kecuali flag carry. Contohnya sebagai berikut:
            Inc al
            Dec bx
            Inc membyte
Dec byte ptr membyte
Dec memword
Inc word ptr memword

Ø  Intruksi ADD
Intruksi ADD menjumlahkan operand sumber 8 atau 16-bit ke operand tujuan pada ukuran yang sama. Sintaknya sebagai berikut :
            ADD tujuan, sumber
Sumber tidak diubah oleh operasi. Ukuran operand harus sesuai dan hanya satu operand memori yang digunakan. Register segmen tidak boleh jadi tujuan. Semua status flag dipengaruhi.contoh sebagai berikut:
            Add al, 1
            Add cl, al
            Add bx, 1000h
            Add var 1, ax
            Add dx, var1
            Add var1, 10
Ø  Intruksi SUB
Intruksi SUB mengurangkan operand sumber dari operand tujuan . sintak sebagai berikut:
            SUB tujuan, sumber
Ukuran kedua operand harus sesuai, dan hanya boleh satu operad memori. Register segment tidak boleh menjadi operand tujuan. Pada level bit, yang terjadi adalah operand source dinegasikan kemudian ditambahkan kelevel tujuan. Contoh, 4-1 adalah 4+(-1). Mengingat kembali bahwa notasi twos komplemen digunakan untuk menegasikan bilangan maka -1 disimpan sebagai 11111111b.
           

0 0 0 0 0 1 0 0 (4)
      +    1 1 1 1 1 1 1 1 (-1)
            0 0 0 0 0 0  1 1
Penjumlahan ini menghasilkan carry pada bit yang paling tinggi (menset carry flag), tetapi carry sendiri diabaikan ketika bekerja dengan bilangan bertanda.
Contoh SUB digunakan dengan berbagai tipe operand seperti berikut :
            Sub al, 1
            Sub cl, al
            Sub bx, 1000h
            Sub var1, ax
            Sub dx, var1
            Sub var1, 10
Ø  Flag yang dipengaruhi oleh ADDdan SUB
Jika ADD dan SUB menghasilkan nilai nol maka flag zero diset. Jika hasil negative maka flag tanda diset. Pada contoh berikut, baris 2 menghasilkan nilai nol dan baris 4 mengasilkan nilai -1(FFFFh).
            Mov ax, 10
            Sub ax, 10
Mov bx, 1
Sub bx, 2
Flag zero diset ketika hasil operasi aritmetik sama dengan nol. Sebagai catatan, INC dan DEC mempengaruri flag zero, tetapi tidak mempengaruhi flag carry:
            Mov bl, 4Fh
            Add bl, 0B1h
            Mov ax, 0FFFFh
            Inc ax
Keputusan kapan operand bertanda atau tidak bertanda seluruhnya diserahkan kepada pemrogram. CPU memperbaharui flag carry dan overlow untuk menangani dua kemungkinan. Untuk alas an ini, kita perlu membahas dua tipe operasi secara terpisah.
Operasi tidak bertanda (unsigned). Untuk aritmetika tidak bertanda, kita hanya peduli pada flag carry. Jika hasil operasi penjumlahan terlalu besar untuk operand tujuan maka flag carry diset. Contoh, penjumlahan 0FFh + 1 seharusnya sama dengan 100h, tetapi hanya dua digit paling bawah (00) yang pas untuk AL. oleh sebab itu, operasi menset flag carry:
Mov ax, 00FFh
Add a1,1                     ; AX = 0000, CF = 1
            Dalam konteks ini, ADD adalah operasi 8-bit karena AL yang digunakan . jika kita ingin mendapatkan jawaban yang benar maka kita harus menambah 1 AX, membuatnya menjadi operasi 16-bit.
            Mov ax, 5501h
            Add ax, 2                    ; AX =55FF, CF = 1
Operasi bertanda. Flag overlow diset ketika operasi penjumlahan atau pengurangan menghasilkan bilangan bertanda diluar range.
Contoh1:
            Mov a1, +126              0 1 1 1 1 1 1 0
            Add a1, 2                 + 0 0 0 0 0 0 1 0
                                                1 0 0 0 0 0 0 0             AL = -128 ?, OF = 1

Tidak ada komentar:

Posting Komentar