Aritmatika (Bab II)
2.6. Instruksi Aritmatika
Dalam pemrosesan data diperlukan beberapa instruksi aritmatika, yang digunakan untuk manipulasi data, yang ditabelkan pada tabel berikut ini.
Mnemonic
| Description
| Addressing Mode | ||||
Direct | Register Indirect | Register | Immediate Constant | Register Specific | ||
ADD A,byte | A=A+byte | X | X | X | X | |
ADDC A,byte | A=A+byte+C | X | X | X | X | |
SUBB A,byte | A=A-byte-C | X | X | X | X | |
INC A | A=A+1 | Accumulator Only | X | |||
INC byte | byte=byte+1 | X | X | X | ||
INC DPTR | DPTR=DPTR+1 | DPTR Only | X | |||
DEC A | A=A-1 | Accumulator Only | X | |||
DEC byte | byte=byte-1 | X | X | X | ||
MUL AB | A=A x B, Sisa=B | A dan B Only | X | |||
DIV AB | A=A/B, Sisa=B | A dan B Only | X | |||
DA A | Desimal Adjust Accumulator |
Accumulator Only | X |
2.6.1. Instruksi Penjumlahan
ADD A, Source; A= A + Source
Ada dua instruksi penjumlahan: ADD dan ADDC, kedua instruksi menghitung penjumlahan dua byte. ADDC menjumlahkan dua byte, berikut bit carry.
Percobaan 2.6.1.1:
Org 0h
Start: Mov A,#1 ; A = 1
ADD A,#2 ; A = A + 2
Mov 78h,#3 ; [ 78h ] = 3
ADD A, 78h ; A = A + [ 78h ]
Mov R0, #89h ; R0 = 89h
Mov @R0, #4 ; [ 89h ] = 4
ADD A,@R0 ; A = A + [ 89h ]
Mov R5, #5 ; R5 = 5
ADD A,R5 ; A = A + R5
end
Instruksi ADDC adalah instruksi yang sama sebagaimana ADD kecuali flag Carry ikut dijumlahkan. ADDC biasanya sangat berguna pada saat penjumlahan long integer. Dapat anda perhatikan pada contoh berikut merupakan penjumlahan data 16 bit X dan Y, dengan penandaan XH dan XL menjadi high byte dan low byte dari X. Begitu juga YH dan YL menandai high byte dan low byte dari Y.
Percobaan 2.6.1.2: Rencanakan instruksi assembly untuk penjumlahan berikut: 1234h + 12EFh
Org 0h
Start: Mov 78h,#34h ; [ 78h ] = 34h
Mov 79h,#12h ; [ 79h ] =12h
Mov 7Ah,#0EFh; [ 7Ah ] = EFh
Mov 7Bh,#12h ; [ 7Bh ] = 12h
Mov A,78h ; A = [ 78h ]
Add A,7Ah ; A = A + [ 78h ]
Mov 78h,A ; [ 78h ] = A
Mov A,79h ; A = [ 79h ]
ADDC A,7Bh ; A = A + [ 7Bh ] + C
Mov 79h,A ; [ 79h ] = A
end
Berapakah hasil akhir dari penjumlahan ini ? Apakah sesuai dengan hitungan kalkulator anda ?
2.6.2. Instruksi Pengurangan
Operasi pengurangan SUBB juga menggunakan accumulator sebagai operand pertama. Accumulator dikurangi dengan operand kedua dan flag bit carry dan hasil pengurangan ditempatkan pada accumulator.
SUBB A, Source; A=A-Source-C
Percobaan 2.6.2.1:
Org 0h
Start: Setb C ; C = 1
Mov A,#10 ; A = 10
Subb A,#2 ; A = A - 2 - C
end
Percobaan 15:
Org 0h
Start: Clr C ; C = 0
Mov A,#10 ; A = 10
Subb A,#2 ; A = A - 2 - C
end
Bagaimanakah hasil pengurangan untuk kedua contoh tersebut ? Adakah perbedaan ?
Sekali lagi perhatikan pada pengurangan bilangan 16 bit berikut yang ditandai oleh bilangan integer 16 bit X dan Y
Percobaan 2.6.2.2:
Rencanakan instruksi assembly untuk pengurangan 1234h - 1135h
Org 0h
Start: Mov 78h,#34h ; [78h] = 34h
Mov 79h,#12h ; [79h] = 12h
Mov 7Ah,#0EFh ; [7Ah] = EFh
Mov 7Bh,#12h ; [7Bh] = 12h
Clr C ; C = 0
Mov A,78h ; A = [78h]
Subb A, 7Ah ; A = A-[78h]-C
Mov 78h, A ; [78h] = A
Mov A, 79h ; A = [79h]
Subb A, 7Bh ; A = A - [7Bh] - C
Mov 79h,A ; [79h] = A
end
2.6.3. Instruksi Perkalian dan Pembagian
MUL AB
Pada proses perkalian antara accumulator dan register B, maka hasil akhir low byte tersimpan pada register A dan high byte tersimpan pada register B
DIV AB
Pada proses pembagian 8 bit integer register A dengan 8 bit register B. Hasil pembagian akan tersimpan pada register A dan sisa akan tersimpan pada register B. Pada proses pembagian ini over flow digunakan untuk menunjukkan bahwa suatu kondisi divide by 0. Jika register B berisi 0 sebelum instruksi, maka hasil pembagian adalah tidak terdifinisi, dan flag overflow mengalami set
Percobaan 2.6.3.1:
Org 0h
Start: Mov A, #9 ; A = 9
Mov B, #5 ;B = 5
Mul AB ;A = A x B, B = sisa
end
Pada instruksi tersebut apakah yang dapat anda amati pada register A dan B, dan bagaimanakah hasil dari perkalian tersebut ?
Percobaan 2.6.3.2:
Org 0h
Start: Mov A, #99 ; A = 99
Mov B, #5 ; B = 5
Mul AB ; A= ( low byte ), B = ( high byte )
end
Pada instruksi tersebut apakah yang dapat anda amati pada register A dan B, dan bagaimanakah hasil dari perkalian tersebut ?
Percobaan 2.6.3.3:
Org 0h
Start: Mov A, #10 ; A = 10
Mov B, #5 ; B = 5
Div AB ; A = A/B, B = Sisa pembagian
end
Pada instruksi tersebut apakah yang dapat anda amati pada register A dan B, dan bagaimanakah hasil dari perkalian tersebut ?
Percobaan 2.6.3.4:
Org 0h
Start: Mov A, #99 ; A = 99
Mov B, #5 ; B = 5
Div AB ; A = A/ B, B = Sisa pembagian
end
Pada instruksi tersebut apakah yang dapat anda amati pada register A dan B, dan bagaimanakah hasil dari perkalian tersebut ?
Percobaan 2.6.3.5:
Org 0h
Start: Mov A, #10 ; A = 10
Mov B, #0 ; B = 0
Div AB ; A = A/B, B = Sisa Pembagian
end
Pada instruksi tersebut apakah yang dapat anda amati pada register A dan B, dan flag Over flow dan bagaimanakah hasil dari perkalian tersebut ?
No comments:
Post a Comment