2 3 2 Instruksi Operasi Aritmatika Instruksi Aritmatika

  • Slides: 53
Download presentation
2. 3. 2. Instruksi Operasi Aritmatika • Instruksi Aritmatika ini digunakan untuk melakukan proses

2. 3. 2. Instruksi Operasi Aritmatika • Instruksi Aritmatika ini digunakan untuk melakukan proses aritmatika (perhitungan) yang meliputi antara lain: - Penjumlahan - Perkalian - Pengurangan - Pembagian - Penjumlahan satu kali - Pengurangan satu kali 1

a. INSTRUKSI PENJUMLAHAN a. 1. Instruksi Penjumlahan Tanpa Carry ADD A, < src_byte >

a. INSTRUKSI PENJUMLAHAN a. 1. Instruksi Penjumlahan Tanpa Carry ADD A, < src_byte > Fungsi : Penjumlahan Tanpa Carry Penjelasan: Instruksi ini akan melakukan penjumlahan isi register A dengan satu byte Source_byte dimana setelah proses penjumlahan hasilnya akan disimpan di register A. Instruksi ini akan mempengaruhi Carry Flag = 1 jika terdapat Carry pada bit ketiga atau bit ketujuh 2

Contoh Instruksi: ADD A, R 0 Isi register A = [ A ] +

Contoh Instruksi: ADD A, R 0 Isi register A = [ A ] + [ R 0 ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADD A, Rn 1 1 ADD [ A ] = [ A ] + [ Rn ] 3

ADD A, direct Isi register A = [ A ] + [ direct ]

ADD A, direct Isi register A = [ A ] + [ direct ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADD A, direct 2 1 ADD [ A ] = [ A ] + [ direct ] 4

ADD A, @Ri Isi register A = [ A ] + [ (Ri) ]

ADD A, @Ri Isi register A = [ A ] + [ (Ri) ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADD A, @Ri 1 1 ADD [ A ] = [ A ] + [ (Ri) ] 5

ADD A, #data Isi register A = [ A ] + #data List instruksi

ADD A, #data Isi register A = [ A ] + #data List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADD A, #data 1 1 ADD [ A ] = [ A ] + #data 6

a. 2. Instruksi Penjumlahan Dengan Carry ADDC A, < src_byte > Fungsi : Penjumlahan

a. 2. Instruksi Penjumlahan Dengan Carry ADDC A, < src_byte > Fungsi : Penjumlahan Dengan Carry Penjelasan: Instruksi ini akan melakukan penjumlahan isi register A dengan satu byte Source_byte dan ditambahkan lagi Carry pada saat itu dimana setelah proses penjumlahan hasilnya akan disimpan di register A. Instruksi ini akan mempengaruhi Carry Flag = 1 jika terdapat Carry pada bit ketiga atau bit ketujuh 7

Contoh Instruksi: ADDC A, R 0 Isi register A = [ A ] +

Contoh Instruksi: ADDC A, R 0 Isi register A = [ A ] + [ R 0 ] + [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADDC A, Rn 1 1 ADDC [ A ] = [ A ] + [ Rn ] + [ Carry ] 8

ADDC A, direct Isi register A = [ A ] + [ direct ]

ADDC A, direct Isi register A = [ A ] + [ direct ] + [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADDC A, direct 2 1 ADDC [ A ] = [ A ] + [ direct ] + [ Carry ] 9

ADDC A, @Ri Isi register A = [ A ] + [ (Ri) ]

ADDC A, @Ri Isi register A = [ A ] + [ (Ri) ] + [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADDC A, @Ri 1 1 ADDC [ A ] = [ A ] + [ (Ri) ] + [ Carry ] 10

ADDC A, #data Isi register A = [ A ] + #data + [

ADDC A, #data Isi register A = [ A ] + #data + [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi ADDC A, #data 2 1 ADDC [ A ] = [ A ] + #data + [ Carry ] 11

b. Instruksi Pengurangan Dengan Borrow SUBB A, < src_byte > Fungsi : Penjumlahan Dengan

b. Instruksi Pengurangan Dengan Borrow SUBB A, < src_byte > Fungsi : Penjumlahan Dengan Borrow ( Carry Minus) Penjelasan: Instruksi ini akan melakukan pengurangan isi register A dengan satu byte Source_byte dan dikurangi lagi dengan Carry pada saat itu dimana setelah proses penjumlahan hasilnya akan disimpan di register A. Instruksi ini akan mempengaruhi Carry Flag = 1 jika terdapat Carry pada bit ketiga atau bit ketujuh 12

Contoh Instruksi: SUBB A, R 0 Isi register A = [ A ] -

Contoh Instruksi: SUBB A, R 0 Isi register A = [ A ] - [ R 0 ] - [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi SUBB A, Rn 1 1 SUBB [ A ] = [ A ] - [ Rn ] - [ Carry ] 13

SUBB A, direct Isi register A = [ A ] - [ direct ]

SUBB A, direct Isi register A = [ A ] - [ direct ] - [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi SUBB A, direct 2 1 SUBB [ A ] = [ A ] - [ direct ] - [ Carry ] 14

SUBB A, @Ri Isi register A = [ A ] - [ (Ri) ]

SUBB A, @Ri Isi register A = [ A ] - [ (Ri) ] - [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi SUBB A, @Ri 1 1 SUBB [ A ] = [ A ] - [ (Ri) ] - [ Carry ] 15

SUBB A, #data Isi register A = [ A ] - #data - [

SUBB A, #data Isi register A = [ A ] - #data - [ Carry ] List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi SUBB A, #data 1 1 SUBB [ A ] = [ A ] - #data - [ Carry ] 16

c. Instruksi Penambahan Satu INC <Byte> Instruksi ini akan melakukan penambahan satu dari byte

c. Instruksi Penambahan Satu INC <Byte> Instruksi ini akan melakukan penambahan satu dari byte yang ada saat itu, apabila nilai telah menjadi FFH maka setelah instruksi ini akan menjadi 00 H Instruksi ini tidak akan mempengaruhi Carry Flag Contoh: INC INC A ---Rn Direct @Ri [A] = [A] +1 17

Contoh instruksi: ORG 0 H MOV 7 EH, #0 FFH MOV 7 FH, #40

Contoh instruksi: ORG 0 H MOV 7 EH, #0 FFH MOV 7 FH, #40 H MOV R 0, #7 EH INC @R 0 END Catatan: Setelah instruksi tersebut maka isi register R 0 = 7 FH, isi alamat 7 EH = 00 H dan alamat 7 FH = 41 H 18

INC A Isi register A=[A]+1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle

INC A Isi register A=[A]+1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi INC A 1 1 INC [A]=[A]+1 19

INC Rn Isi register Rn = [ Rn ] + 1 List instruksi adalah

INC Rn Isi register Rn = [ Rn ] + 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi INC Rn 1 1 INC [ Rn ] = [ Rn ] + 1 20

INC direct Isi register direct = [ direct ] + 1 List instruksi adalah

INC direct Isi register direct = [ direct ] + 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi INC direct 2 1 INC [ direct ] = [ direct ] + 1 21

INC @Ri [ (Ri) ] = [ (Ri) ] + 1 List instruksi adalah

INC @Ri [ (Ri) ] = [ (Ri) ] + 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi INC @Ri 1 1 INC [ (Ri) ] = [ (Ri) ] + 1 22

d. Instruksi Penambahan Satu pada Register DPTR INC DPTR Instruksi ini akan melakukan penambahan

d. Instruksi Penambahan Satu pada Register DPTR INC DPTR Instruksi ini akan melakukan penambahan satu dari byte yang berada di register DPTR saat itu, apabila nilai telah menjadi FFFFH maka setelah instruksi ini akan menjadi 0000 H Instruksi ini tidak akan mempengaruhi Carry Flag 23

Contoh Instruksi: Jika isi data pada register DPTR adalah 1230 H ORG MOV INC

Contoh Instruksi: Jika isi data pada register DPTR adalah 1230 H ORG MOV INC INC END 0 H DPTR, #1230 H DPTR ; DPTR berisi 1230 H ; DPTR = 1230 H + 1 ; DPTR = 1231 H + 1 ; DPTR = 1232 H + 1 ; DPTR = 1233 H + 1 Setelah program dijalankan maka isi register DPTR adalah [ DPTR ] = 1230 H + 1 + 1 24 = 1234 H

INC DPTR Isi register DPTR = [ DPTR ] + 1 List instruksi adalah

INC DPTR Isi register DPTR = [ DPTR ] + 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi INC DPTR 1 2 INC [ DPTR ] = [ DPTR ] + 1 25

e. Instruksi Pengurangan Satu DEC <Byte> Instruksi ini akan melakukan pengurangan satu dari byte

e. Instruksi Pengurangan Satu DEC <Byte> Instruksi ini akan melakukan pengurangan satu dari byte yang ada saat itu, apabila nilai telah menjadi 00 H maka setelah instruksi ini akan menjadi FFH Instruksi ini tidak akan mempengaruhi Carry Flag Contoh: DEC DEC A Rn Direct @Ri 26

Contoh instruksi: ORG 0 H MOV 2 FH, #0 FFH MOV 30 H, #40

Contoh instruksi: ORG 0 H MOV 2 FH, #0 FFH MOV 30 H, #40 H MOV R 1, #30 H DEC @R 1 END Catatan: Setelah instruksi tersebut maka isi register R 1 = 2 FH, isi alamat 2 FH = 0 FEH dan alamat 30 H = 3 FH 27

DEC Isi register A A=[A]-1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle

DEC Isi register A A=[A]-1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi DEC A 1 1 DEC [A]=[A]-1 28

DEC Isi register Rn Rn = [ Rn ] - 1 List instruksi adalah

DEC Isi register Rn Rn = [ Rn ] - 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi DEC Rn 1 1 DEC [ Rn ] = [ Rn ] - 1 29

DEC direct Isi register direct = [ direct ] - 1 List instruksi adalah

DEC direct Isi register direct = [ direct ] - 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi DEC direct 2 1 DEC [ direct ] = [ direct ] - 1 30

DEC @Ri [ (Ri) ] = [ (Ri) ] - 1 List instruksi adalah

DEC @Ri [ (Ri) ] = [ (Ri) ] - 1 List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi DEC @Ri 1 1 DEC [ (Ri) ] = [ (Ri) ] - 1 31

f. Instruksi Perkalian MUL AB Instruksi ini akan melakukan perkalian antara isi akumulator (

f. Instruksi Perkalian MUL AB Instruksi ini akan melakukan perkalian antara isi akumulator ( A ) dan isi Register B, hasil dari perkalian disimpan di Akumulator ( A ) untuk byte yang rendah dan di Register B untk byte yang tinggi. Jika hasil perkalian lebih dari 255 (0 FFH) flag overflow akan diset, sedangkan Carry akan selalu di clear. 32

Contoh : ORG MOV MUL END 0 H A, #50 H B, #0 A

Contoh : ORG MOV MUL END 0 H A, #50 H B, #0 A 0 H AB Hasil perkalian dari 50 H atau 80 desimal dengan 0 A 0 H atau 160 desimal adalah 3200 H atau 12800. Nilai yang disimpan di Akumulator (A) adalah 00 H (Byte rendah) dan di Register B adalah 32 H (Byte tinggi). Sedangkan Flag Overflow akan di set (1) karena hasil perkalian 33 lebih besar daripada 255 (0 FFH).

MUL AB List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi MUL AB

MUL AB List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi MUL AB 1 4 MUL [ A ] = Hasil perkalian Byte rendah [ B ] = Hasil perkalian Byte tinggi 34

g. Instruksi Pembagian DIV AB Instruksi ini akan melakukan pembagian antara isi akumulator (

g. Instruksi Pembagian DIV AB Instruksi ini akan melakukan pembagian antara isi akumulator ( A ) dan isi Register B, hasil dari pembagian akan disimpan di Akumulator ( A ) dan apabila ada sisa hasil pembagian akan disimpan di Register B. Flag overflow dan Carry akan selalu di clear. 35

Contoh : ORG MOV DIV END 0 H A, #0 FEH B, #12 H

Contoh : ORG MOV DIV END 0 H A, #0 FEH B, #12 H AB Hasil pembagian dari 0 FEH dengan 12 H adalah 0 EH dengan sisanya 02 H. Nilai yang disimpan di Akumulator (A) adalah 0 EH (Hasil dari proses pembagian) dan di Register B adalah 02 H (Sisa hasil proses pembagian). 36

DIV AB List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi DIV AB

DIV AB List instruksi adalah sebagai berikut: Instruksi Jumlah byte Cycle Operasi DIV AB 1 4 DIV [ A ] = Hasil dari Pembagian [ B ] = Sisa hasil pembagian 37

2. 3. 3. INSTRUKSI LOGIKA - Instruksi ini selalu melibatkan register ACCUMULATOR ( A

2. 3. 3. INSTRUKSI LOGIKA - Instruksi ini selalu melibatkan register ACCUMULATOR ( A ) a. Logika AND ( ANL ) Instruksi ini melakukan proses logika AND antara suatu register dengan register, register dengan data dll Tabel kebenaran logika AND #1 #2 Hasil 0 0 1 1 1 38

Contoh : • Akumulator berisi data 1011 B dan register R 0 berisi data

Contoh : • Akumulator berisi data 1011 B dan register R 0 berisi data 0100 1100 B. Instruksi ANL A, R 0 akan menyebabkan isi akumulator menjadi seperti berikut: ANL A, R 0 A : 1011 B R 0 : 0100 1100 B ---------------A : 0000 1000 B = 08 H 39

b. Logika OR ( ORL ) Instruksi ini melakukan proses logika OR antara suatu

b. Logika OR ( ORL ) Instruksi ini melakukan proses logika OR antara suatu register dengan register, register dengan data dll Tabel kebenaran logika OR #1 #2 Hasil 0 0 1 1 1 0 1 1 40

Contoh : • Akumulator berisi data 1111 1010 B dan register R 0 berisi

Contoh : • Akumulator berisi data 1111 1010 B dan register R 0 berisi data 0010 1110 B. Instruksi ORL A, R 0 akan menyebabkan isi akumulator menjadi seperti berikut: A : 1111 1010 B R 0 : 0010 1110 B ORL A, R 0 ---------------A : 1111 1110 B = FEH 41

c. Logika EXOR ( XRL ) Instruksi ini melakukan proses logika Exclusive-OR (EXOR) antara

c. Logika EXOR ( XRL ) Instruksi ini melakukan proses logika Exclusive-OR (EXOR) antara suatu register dengan register, register dengan data dll Tabel kebenaran logika Exclusive-OR #1 #2 Hasil 0 0 1 1 1 0 42

Contoh : • Akumulator berisi data 1011 B dan register B berisi data 1111

Contoh : • Akumulator berisi data 1011 B dan register B berisi data 1111 0101 B. Instruksi XRL A, B akan menyebabkan isi akumulator menjadi seperti berikut: XRL A, B A : 1011 B B : 1111 0101 B ---------------A : 0100 1110 B = 4 EH 43

d. Logika NOT ( Komplemen - CPL ) Instruksi ini melakukan proses logika NOT

d. Logika NOT ( Komplemen - CPL ) Instruksi ini melakukan proses logika NOT (Komplemen) pada suatu register, carry flag, atau isi suatu alamat bit ( RAM ), dll Tabel kebenaran logika NOT #1 Hasil 0 1 1 0 44

Contoh : • Akumulator berisi data 0101 1100 B Instruksi CPL A akan menyebabkan

Contoh : • Akumulator berisi data 0101 1100 B Instruksi CPL A akan menyebabkan isi akumulator menjadi seperti berikut: CPL A A : 0101 1100 B -------------A : 1010 0011 B = A 3 H 45

2. 3. 4. Instruksi Perperputaran ( Rotate ) a. Pergeseran ke KIRI ( RL

2. 3. 4. Instruksi Perperputaran ( Rotate ) a. Pergeseran ke KIRI ( RL : Rotate Left ) Instruksi ini akan menggeser isi akumulator satu bit ke kiri (memutar setiap bit dalam akumulator satu posisi ke kiri). Bagian MSB akan mengisi bagian LSB. MSB LSB 46

 • Contoh: 1. Register A ( Akumulator ) : 1011 B Instruksi RL

• Contoh: 1. Register A ( Akumulator ) : 1011 B Instruksi RL A akan menyebabkan isi register A bergeser ke kiri sehingga menjadi : 0111 B 2. Register A ( Akumulator ) : 0011 B Instruksi RL A akan menyebabkan isi register A bergeser ke kiri sehingga menjadi : 0110 B 47

b. Perputaran ke KANAN ( RR : Rotate Right ) Instruksi ini akan menggeser

b. Perputaran ke KANAN ( RR : Rotate Right ) Instruksi ini akan menggeser isi akumulator satu bit ke kanan (memutar setiap bit dalam akumulator satu posisi ke kanan). Bagian LSB akan mengisi bagian MSB LSB 48

 • Contoh: 1. Register A ( Akumulator ) : 1011 B Instruksi RR

• Contoh: 1. Register A ( Akumulator ) : 1011 B Instruksi RR A akan menyebabkan isi register A bergeser ke kanan sehingga menjadi : 1101 B 2. Register A ( Akumulator ) : 0011 B Instruksi RR A akan menyebabkan isi register A bergeser ke kanan sehingga menjadi : 1001 B 49

c. Perputaran ke KIRI dengan CARRY ( RLC : Rotate Left with Carry )

c. Perputaran ke KIRI dengan CARRY ( RLC : Rotate Left with Carry ) Instruksi ini akan menggeser isi akumulator satu bit ke kiri (memutar setiap bit dalam akumulator satu posisi ke kiri) dengan ikut menyertakan isi dari Carry Flag. Isi Carry Flag akan mengisi bagian LSB, sementara isi bagian MSB akan mengisi bagian Carry Flag. MSB LSB Carry 50

 • Contoh: Register A ( Akumulator ) : 0111 1010 B sementara Carry

• Contoh: Register A ( Akumulator ) : 0111 1010 B sementara Carry Flag berisi : 1 B Instruksi RLC A akan menyebabkan isi register A bergeser ke kiri dengan Carry nya sehingga menjadi : Register A ( Akumulator ) : 1111 0101 B sementara Carry Flag nya berisi 0 B 51

d. Pergeseran ke KANAN dengan CARRY ( RRC : Rotate Right with Carry )

d. Pergeseran ke KANAN dengan CARRY ( RRC : Rotate Right with Carry ) Instruksi ini akan menggeser isi akumulator satu bit ke KANAN (memutar setiap bit dalam akumulator satu posisi ke KANAN) dengan ikut menyertakan isi dari Carry Flag. Isi Carry Flag akan mengisi bagian MSB, sementara isi bagian LSB akan mengisi bagian Carry Flag. MSB LSB Carry 52

 • Contoh: Register A ( Akumulator ) : 1010 0101 B sementara Carry

• Contoh: Register A ( Akumulator ) : 1010 0101 B sementara Carry Flag berisi : 0 B Instruksi RRC A akan menyebabkan isi register A bergeser ke kanan dengan Carry nya sehingga menjadi : Register A ( Akumulator ) : 0101 0010 B sementara Carry Flag nya berisi 1 B 53