Aritmatika
I.
Pendahuluan
Terdapat beberapa perintah aritmatika dalam mikroprosesor yang terbagi dalam beberapa
kelompok yaitu penjumlahan, pengurangan, perkalian dan pembagian.
II.
Penjumlahan
1. ADD
Berfungsi untuk melakukan penjumlahan Byte atau Word. Dalam setiap perintah
harus terdapat minimal satu register dan tujuannya harus berupa alamat atau register.
Selain itu lebar datanya harus sama. Bila terdapat carry, register CF akan bernilai 1.
Syntax : ADD tujuan, sumber
Operasi : Sumber + Tujuan + CF Tujuan
Carry CF
Contoh : - ADD AL, BL
Benar
- ADD AL, AX
Salah
- ADD AX, [22]
Benar
- ADD [22], BX
Benar
- ADD AX, 22
Benar
- ADD 22, AX
Salah
2. ADC
Berfungsi untuk melakukan penjumlahan Byte atau Word namun Carry Flag (CF) ikut
dijumlahkan.
Syntax : ADD tujuan, sumber
Operasi : Sumber + Tujuan Tujuan
Carry CF
Contoh : MOV AL, 0
ADD AL, 22
Bila CF bernilai 1 setelah perintah
dieksekusi AL akan bernilai 23
3. INC
Berfungsi untuk menambahkan satu ke tujuan. Tujuan dapat berupa byte atau word.
Syntax : INC tujuan
Operasi : Tujuan + 1 Tujuan
Contoh : - INC AX
Isi AX ditambah 1
- INC WORD [BX]
Isi alamat memori DS:BX ditambah 1
4. DAA
Berfungsi untuk menyesuaikan penjumlahan BCD agar hasilnya tetap BCD.
Syntax : DAA
Contoh : MOV AX, 09H
AX = 09 (BCD)
ADD AX, 1
Setelah instruksi ADD nilai AX = 0AH
DAA
Setelah instruksi DAA nilai AX =10H (BCD)
III.
Pengurangan
1. SUB
Berfungsi untuk melakukan pengurangan Byte atau Word dengan metode 2s
complement. Dalam setiap perintah harus terdapat minimal satu register dan
tujuannya harus berupa alamat atau register. Selain itu lebar datanya harus sama. Bila
terdapat borrow, register CF akan bernilai 1, tapi apabila dilihat dari proses
sebenarnya yang dilakukan dengan menjumlahkan bilangan hasil 2s Complement,
maka register CF akan bernilai 1 apabila tidak terjadi carry dalam proses penjumlahan
tersebut.
Misalnya pengurangan 23H dengan 22H adalah sebagai berikut:
22H
0010 0010
2s Complement dari 23
1101 1101
------------- +
Hasil
1111 1111
Tidak ada carry, jadi register
CF bernilai 1
2s Complement dari 1111 1111 = 0000 0001 atau 1H.
Syntax : SUB tujuan, sumber
Operasi : Tujuan Sumber Tujuan
Borrow CF
Contoh : - SUB AL, BL
Benar
- SUB AL, AX
Salah
- SUB AX, [22]
Benar
- SUB [22], BX
Benar
- SUB 22, AX
Salah
2. SBB
Berfungsi untuk melakukan pengurangan Byte atau Word namun dengan
memperhitungkan Carry Flag (CF).
Misalnya pengurangan 23H dengan 22H dan CF bernilai 1 adalah sebagai berikut:
23H
0010 0110
2s Complement dari 22
1101 1110
2s Complement dari CF
0000 0000
------------- +
Hasil
1 0000 0000
Register CF bernilai 0
Syntax
Operasi
Contoh
3. DEC
Berfungsi untuk mengurangkan satu ke tujuan. Tujuan dapat berupa byte atau word.
Syntax : DEC tujuan
Operasi : Tujuan 1 Tujuan
Contoh : - DEC AX
Isi register AX dikurangi 1
- DEC WORD [BX]
Isi alamat memori DS:BX dikurangi 1
4. DAS
Perkalian
1. MUL
Berfungsi untuk mengalikan antara operand dengan isi akumulator, bila operand
tersebut 8 bit, maka akan dikalikan dengan AL dan hasil disimpan di AX, namun bila
operand tersebut 16 bit, maka akan dilakukan perkalian antara operand dengan AX
dan hasilnya akan disimpan di DX (High Word atau separuh MSB) dan di AX (Low
Word atau separuh LSB). Flag register yang dipengaruhi adalah Overflow (OF) dan
Carry (CF) apabila OF dan CF bernilai 1 maka terjadi overflow dalam proses
perkalian.
Syntax : MUL operand
Operasi : - 8 bit : AL * operand AX
- 16 bit : AX * operand DX:AX
Contoh
: MOV AL, 12
MOV CL, 5
MUL CL
2. IMUL
Fungsinya sama dengan MUL, hanya saja kedua bilangan yang dikalikan dianggap
sebagai bilangan bulat bertanda (signed integer). Bila OF dan CF bernilai 1 dalam
perkalian 8 bit, AH tidak berisi sign-extension bit atau AH <> 00, dalam perkalian 6
bit, DX tidak berisi sign-extension bit atau DX <> 0000.
Syntax : IMUL operand
Operasi : - 8 bit : AL * operand AX
- 16 bit : AX * operand DX:AX
Contoh : MOV AX, 0FF7H
Register AX diisi dengan FF7H
MOV WORD PTR[BX}, 5A10H Isi memori DS:BX bernilai 5A10H
IMUL WORD [BX]
DX=059D, AX = D570
OF = CF = 1
V.
Pembagian
1. DIV
Berfungsi untuk membagi sebuah operand dengan isi akumulator, bila operand itu 8
bit, maka AX dibagi operand dan hasil modulusnya disimpan di AL, sisanya disimpan
di AH. Bila operand 16 bit, maka DX:AX dibagi operand, hasil modulusnya disimpan
di AX, sisanya di DX. Jika hasil pembagian (modulus) lebih besar dari kapasitas
register penyimpan (AL > FFH dan AX > FFFFH) maka terjadi interupt 0 (Division
by Zero) dan program akan berhenti dengan tidak normal. Dalam operasi ini tidak ada
flag register yang terpengaruh.
Syntax : DIV operand
Operasi : - 8 bit : AX / operand AL = Modulus, AH = Sisa
- 16 bit : DX:AX / operand AX = Modulus, DX = Sisa
Contoh : MOV AX, 0F05H
MOV DX, 068AH
MOV CX, 8E9H
DIV CX
AX(Modulus)=BBE1 dan DX(sisa)=073C
2. IDIV
Fungsinya sama dengan DIV, hanya saja kedua bilangan yang dikalikan dianggap
sebagai bilangan bulat bertanda (signed integer).Division by Zero akan terjadi apabila
pada operasi 8 bit pembilang dan penyebut bertanda sama dan modulus > 7FH (>127)
atau pembilang dan penyebut bertanda lain dan modulus < 81H (<-127), sedangkan
pada operasi 16 bit pembilang dan penyebut bertanda sama dan modulus > 7FFFH
(>32767), atau pembilang dan penyebut bertanda lain dan modulus < 8001H
(<-32767).
Syntax : IDIV operand
Operasi : - 8 bit : AX / operand AL = Modulus, AH = Sisa
- 16 bit : DX:AX / operand AX = Modulus, DX = Sisa
Contoh : MOV AX, FFF9H
AX = -7
MOV CL, 0FDH
CL = -3
IDIV CL
AL = 2 dan AH -1
VI.