Assembly03

advertisement
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 >
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 ketujuh2
Contoh Instruksi:
ADD
A,R0
Isi register
A = [ A ] + [ R0 ]
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 ]
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) ]
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 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 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,R0
Isi register
A = [ A ] + [ R0 ] + [ 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 ] + [ 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) ] + [ 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 + [ 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 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,R0
Isi register
A = [ A ] - [ R0 ] - [ 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 ] - [ 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) ] - [ 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 - [ 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 yang ada saat itu, apabila nilai telah
menjadi FFH maka setelah instruksi ini akan
menjadi 00H
Instruksi ini tidak akan mempengaruhi Carry
Flag
Contoh:
INC
INC
INC
INC
A
---Rn
Direct
@Ri
[A] = [A] +1
17
Contoh instruksi:
ORG 0H
MOV 7EH,#0FFH
MOV 7FH,#40H
MOV R0,#7EH
INC
@R0
INC
R0
INC
@R0
END
Catatan:
Setelah instruksi tersebut maka isi
register R0 = 7FH, isi alamat 7EH = 00H
dan alamat 7FH = 41H
18
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 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 sebagai berikut:
Instruksi
Jumlah byte
Cycle
Operasi
INC direct
2
1
INC
[ direct ] = [ direct ] + 1
21
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 satu
dari byte yang berada di register DPTR saat itu,
apabila nilai telah menjadi FFFFH maka setelah
instruksi ini akan menjadi 0000H
Instruksi ini tidak akan mempengaruhi Carry
Flag
23
Contoh Instruksi:
Jika isi data pada register DPTR
adalah 1230H
ORG
MOV
INC
INC
INC
INC
END
0H
DPTR,#1230H
DPTR
DPTR
DPTR
DPTR
; DPTR berisi 1230H
; DPTR = 1230H + 1
; DPTR = 1231H + 1
; DPTR = 1232H + 1
; DPTR = 1233H + 1
Setelah program dijalankan maka isi register DPTR adalah
[ DPTR ]
= 1230H + 1 + 1 + 1 + 1
24
= 1234H
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 yang ada saat itu, apabila nilai telah
menjadi 00H maka setelah instruksi ini akan
menjadi FFH
Instruksi ini tidak akan mempengaruhi Carry
Flag
Contoh:
DEC
DEC
DEC
DEC
A
Rn
Direct
@Ri
26
Contoh instruksi:
ORG 0H
MOV 2FH,#0FFH
MOV 30H,#40H
MOV R1,#30H
DEC @R1
DEC
R1
DEC @R1
END
Catatan:
Setelah instruksi tersebut maka isi
register R1 = 2FH, isi alamat 2FH = 0FEH
dan alamat 30H = 3FH
27
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 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 sebagai berikut:
Instruksi
Jumlah byte
Cycle
Operasi
DEC direct
2
1
DEC
[ direct ] = [ direct ] - 1
30
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 ( 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 (0FFH) flag overflow akan diset, sedangkan
Carry akan selalu di clear.
32
Contoh :
ORG
MOV
MOV
MUL
END
0H
A,#50H
B,#0A0H
AB
Hasil perkalian dari 50H atau 80 desimal
dengan 0A0H atau 160 desimal adalah 3200H
atau 12800. Nilai yang disimpan di Akumulator
(A) adalah 00H (Byte rendah) dan di Register B
adalah 32H (Byte tinggi). Sedangkan Flag
Overflow akan di set (1) karena hasil perkalian
33
lebih besar daripada 255 (0FFH).
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 ( 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
MOV
DIV
END
0H
A,#0FEH
B,#12H
AB
Hasil pembagian dari 0FEH dengan 12H adalah
0EH dengan sisanya 02H. Nilai yang disimpan
di Akumulator (A) adalah 0EH (Hasil dari
proses pembagian) dan di Register B adalah
02H (Sisa hasil proses pembagian).
36
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 )
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
0
0
1
0
1
0
0
1
1
1
38
Contoh :
• Akumulator berisi data 1011 1011B dan
register R0 berisi data 0100 1100B.
Instruksi ANL A,R0 akan menyebabkan
isi akumulator menjadi seperti berikut:
ANL A,R0
A
: 1011 1011B
R0 : 0100 1100B
------------------------------A
: 0000 1000B = 08H
39
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
0
0
1
1
1
0
1
1
1
1
40
Contoh :
• Akumulator berisi data 1111 1010B dan
register R0 berisi data 0010 1110B.
Instruksi ORL A,R0 akan menyebabkan
isi akumulator menjadi seperti berikut:
A
: 1111 1010B
R0 : 0010 1110B
ORL A,R0 ------------------------------A
: 1111 1110B = FEH
41
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
0
0
1
1
1
0
1
1
1
0
42
Contoh :
• Akumulator berisi data 1011 1011B dan
register B berisi data 1111 0101B.
Instruksi XRL A,B akan menyebabkan
isi akumulator menjadi seperti berikut:
XRL A,B
A
: 1011 1011B
B
: 1111 0101B
------------------------------A
: 0100 1110B = 4EH
43
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 1100B
Instruksi CPL A akan menyebabkan
isi akumulator menjadi seperti berikut:
CPL A
A
: 0101 1100B
-------------------------A
: 1010 0011B = A3H
45
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 1011B
Instruksi RL A akan menyebabkan isi
register A bergeser ke kiri sehingga
menjadi : 0111 0111B
2. Register A ( Akumulator ) : 0011 0011B
Instruksi RL A akan menyebabkan isi
register A bergeser ke kiri sehingga
menjadi : 0110 0110B
47
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.
MSB
LSB
48
•
Contoh:
1. Register A ( Akumulator ) : 1011 1011B
Instruksi RR A akan menyebabkan isi
register A bergeser ke kanan sehingga
menjadi : 1101 1101B
2. Register A ( Akumulator ) : 0011 0011B
Instruksi RR A akan menyebabkan isi
register A bergeser ke kanan sehingga
menjadi : 1001 1001B
49
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 1010B
sementara Carry Flag berisi : 1B
Instruksi RLC A akan menyebabkan isi
register A bergeser ke kiri dengan Carry
nya sehingga menjadi :
Register A ( Akumulator ) : 1111 0101B
sementara Carry Flag nya berisi 0B
51
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 0101B
sementara Carry Flag berisi : 0B
Instruksi RRC A akan menyebabkan isi
register A bergeser ke kanan dengan Carry
nya sehingga menjadi :
Register A ( Akumulator ) : 0101 0010B
sementara Carry Flag nya berisi 1B
53
Download