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 ?



Post a Comment

0 Comments