Operasi Aritmatika ADD Assembly

Operasi Aritmatika ADD Assembly
Operasi Aritmatika ADD Assembly

ADD A,Rn
Siklus
 Jumlah Byte
Instruksi
1
1
ADD   A,Rn
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A dengan Rn di mana n = 0…7 dan simpan hasil di Akumulator A.

Contoh:
  Add  A,R7 

Artinya:
Isi dari R7 akan ditambahkan dengan akumulator A dan hasilnya disimpan di Akumulator A.

ADD A,direct
Siklus
 Jumlah Byte
Instruksi
1
2
ADD   A,direct
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A dengan data di alamat memori tertentu secara langsung.

Contoh:
  Add  A,00H 

Artinya:
Isi dari Akumulator A akan ditambahkan dengan isi dari memori RAM Internal di alamat 00H.

ADD A,@Ri
Siklus
 Jumlah Byte
Instruksi
1
1
ADD   A,@Ri
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A dengan data yang berada di alamat Ri (ditunjuk oleh Ri) dan hasilnya disimpan di Akumulator A. Ri adalah Register Index di mana pada MCS51 adalah berupa R0 atau R1.

Contoh:
  Add  A,@R0 

Artinya:
Isi dari Akumulator A akan ditambahkan dengan isi dari memori RAM Internal yang ditunjuk oleh R0. Apabila R0 berisi 05H maka, isi dari alamat 05H akan dijumlahkan dengan Akumulator A dan hasilnya disimpan di Akumulator A.

ADD A,#data
Siklus
 Jumlah Byte
Instruksi
1
2
ADD   A,#data
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A dengan sebuah konstanta dan hasilnya disimpan dalam akumulator A.

Contoh:
  Add  A,#05H 

Isi Akumulator A ditambah dengan data 05H dan hasilnya disimpan dalam Akumulator A.

ADDC

ADDC A,Rn
Siklus
 Jumlah Byte
Instruksi
1
1
ADDC   A,Rn
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A dengan Rn di mana n = 0…7 dan simpan hasil di Akumulator A 

Contoh: 
   Addc A,R7

Isi dari R7 akan ditambahkan dengan akumulator A beserta carry flag dan hasilnya disimpan di Akumulator A. Apabila carry flag set maka hasil yang tersimpan di Akumulator A adalah A + R7 + 1.

ADDC A,direct
Siklus
 Jumlah Byte
Instruksi
1
2
ADDC   A,direct
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A dan carry flag dengan data di alamat memori tertentu secara langsung.

Contoh: 
  Addc A,00H 

Isi dari Akumulator A akan ditambahkan dengan isi dari memori RAM Internal di alamat 00H beserta carry flag dan hasilnya disimpan di Akumulator A, Apabila carry flag set maka hasil yang tersimpan di Akumulator A adalah A + isi alamat 00H + 1.

Siklus
 Jumlah Byte
Instruksi
1
1
ADDC   A,@Ri
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A beserta carry flag dengan data yang berada di alamat Ri (ditunjuk oleh Ri) dan hasilnya disimpan di Akumulator A. Ri adalah Register Index di mana pada MCS51 adalah berupa R0 atau R1.

Contoh:
Add  A,@R0

Isi dari Akumulator A beserta carry flag akan ditambahkan dengan isi dari memori RAM Internal yang ditunjuk oleh R0. Apabila R0 berisi 05H maka, isi dari alamat 05H akan dijumlahkan dengan Akumulator A beserta carry flag dan hasilnya disimpan di Akumulator A.

Siklus
 Jumlah Byte
Instruksi
1
2
ADDC   A,#data
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Tambahkan Akumulator A beserta carry flag dengan sebuah konstanta dan hasilnya disimpan dalam akumulator A.

Contoh: 
  Addc A,#05H 

Isi Akumulator A beserta carry flag ditambah dengan data 05H dan hasilnya disimpan dalam Akumulator A. Apabila carry flag set maka hasil di Akumulator A adalah A + 5H + 1.

SUBB

SUBB A,Rn
Siklus
 Jumlah Byte
Instruksi
1
1
SUBB A,Rn
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Lakukan pengurangan data di Akumulator A dengan Rn (n = 0…7) dan simpan hasilnya di Akumulator A.

Contoh: 
  Subb A,R0
Data di akumulator A beserta carry flagnya dikurangi dengan isi R0 dan hasilnya disimpan di Akumulator A.

SUBB A,direct
Siklus
Jumlah Byte
Instruksi
1
2
SUBB A,direct
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Lakukan pengurangan data di Akumulator A dengan data di memori tertentu yang ditunjuk secara langsung.

Contoh: 
  Subb A,00H

Data di Akumulator A beserta carry flagnya dikurangi dengan data di alamat 00H dari RAM Internal dan hasilnya disimpan di Akumulator A.

SUBB A,@Ri
Siklus
Jumlah Byte
Instruksi
1
1
SUBB A,@Ri
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Lakukan pengurangan data di Akumulator A beserta carry flag dengan data yang ditunjuk oleh Ri (Register Index) di mana Ri dapat berupa R0 atau R1.

Contoh: 
  SUBB A,@R0

Data di Akumulator A beserta carry flagnya dikurangi dengan data yang ditunjuk oleh R0 dan hasilnya disimpan di Akumulator A.

SUBB A,#data
Siklus
 Jumlah Byte


Instruksi

1
2


SUBB A,#data

Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X



X

X

Lakukan pengurangan data di Akumulator A beserta carry flag dengan sebuah konstanta dan hasilnya disimpan di Akumulator A.

Contoh: 
  SUBB A,#05H 

Data di Akumulator A beserta carry flag dikurangi dengan data 05H dan hasilnya disimpan di Akumulator A.

INC

INC A 
Siklus
 Jumlah Byte


Instruksi

1
1


INC A

Flag
C
AC
F0
RS1
RS0
OV
P
  


Tambahkan nilai Akumulator  A dengan 1 dan hasilnya disimpan di Akumulator A.
Siklus
 Jumlah Byte


Instruksi

1
1


INC Rn

Flag
C
AC
F0
RS1
RS0
OV
P
  

Tambahkan nilai Rn (n= 0…7) dengan 1 dan hasilnya disimpan di Rn tersebut.

INC direct
Siklus
 Jumlah Byte
Instruksi
1
2
INC direct
Flag
C
AC
F0
RS1
RS0
OV
P
  

Tambahkan data yang di RAM Internal yang alamatnya ditunjuk secara langsung dengan 1 dan hasilnya disimpan di alamat tersebut.

Contoh:
  Inc  00H

Data di alamat 00H ditambah dengan 1 dan hasilnya disimpan di alamat  00H.

INC @Ri
Siklus
 Jumlah Byte


Instruksi

1
1


INC @Ri

Flag
C
AC
F0
RS1
RS0
OV
P
  

Tambahkan data yang alamatnya ditunjuk oleh Ri (Register Index) dengan 1 dan simpan hasilnya di alamat tersebut.

Contoh:
  Inc  @R1 

Data di alamat yang ditunjuk oleh R1 dan hasilnya disimpan di alamat tersebut, apabila R1 berisi 10H maka data di alamat 10H ditambah dengan 1 dan simpan kembali di alamat 10H.

INC DPTR
Siklus
 Jumlah Byte


Instruksi

2
1


INC DPTR

Flag
C
AC
F0
RS1
RS0
OV
P
  

Tambahkan nilai DPTR dengan 1 dan simpan hasilnya di DPTR.

DEC

DEC A
Siklus
 Jumlah Byte


Instruksi

1
1


DEC A

Flag
C
AC
F0
RS1
RS0
OV
P
  

Lakukan pengurangan pada nilai Akumulator  A dengan 1 dan hasilnya disimpan di Akumulator A.

DEC Rn
Siklus
 Jumlah Byte


Instruksi

1
1


DEC Rn

Flag
C
AC
F0
RS1
RS0
OV
P
  

Lakukan pengurangan pada nilai Rn (n= 0…7) dengan 1 dan hasilnya disimpan di Rn tersebut.

DEC direct
Siklus
 Jumlah Byte


Instruksi

1
2


DEC direct

Flag
C
AC
F0
RS1
RS0
OV
P
  

Lakukan pengurangan pada data yang di RAM Internal yang alamatnya ditunjuk secara langsung dengan 1 dan hasilnya disimpan di alamat tersebut.

Contoh:
  Dec  00H 

Data di alamat 00H dikurangi dengan 1 dan hasilnya disimpan di alamat  00H.

DEC @Ri
Siklus
 Jumlah Byte


Instruksi

1
1


DEC @Ri

Flag
C
AC
F0
RS1
RS0
OV
P
  

Lakukan pengurangan pada data yang alamatnya ditunjuk oleh Ri (Register Index) dengan 1 dan simpan hasilnya di alamat tersebut.

Contoh:
  DEC  @R1 

Data di alamat yang ditunjuk oleh R1 dan hasilnya disimpan di alamat tersebut, apabila R1 berisi 10H maka data di alamat 10H dikurangi dengan 1 dan simpan kembali di alamat 10H.

MUL AB
Siklus
 Jumlah Byte
Instruksi
4
1
MUL AB
Flag
C
AC
F0
RS1
RS0
OV
P
  
X

Mov  A,#50H 
  Mov  B,#0A0H 
  Mul  AB 

Hasil perkalian dari 50H atau 80 desimal dengan 0A0H atau 160 desimal adalah 3200H atau 12800, maka nilai yang disimpan di Akumulator A adalah 00H dan di Register B adalah 32H. Sedangkan Flag Overflow akan set karena hasil dari perkalian lebih besar daripada 255 atau (0FFH).

DIV AB
Siklus
 Jumlah Byte
Instruksi
4
1
DIV AB
Flag
C
AC
F0
RS1
RS0
OV
P
  
X

Lakukan pembagian antara Akumulator A dan Register B, hasil dari pembagian akan disimpan di akumulator A dan sisa pembagian disimpan di Register B. Flag Overflow dan Carry akan selalu clear
Flag Overflow akan set apabila isi dari Register B adalah 00 di mana hal ini menandakan bahwa proses pembagian tidak mungkin dilakukan karena hasil pembagian antara suatu bilangan dengan 0 adalah tidak berhingga.

Contoh:
  Mov  A,#0FB 
  Mov  B,#12H 
  Div  AB

Hasil dari pembagian ini adalah 0DH dengan sisa 11H, maka 0DH akan tersimpan di Akumulator A sebagai hasil bagi dan 11H tersimpan di Register B sebagai sisa bagi.

DA A
Siklus
 Jumlah Byte
Instruksi
1
1
DA A
Flag
C
AC
F0
RS1
RS0
OV
P
  
X
X

Mengubah data di Akumulator A menjadi bentuk BCD. Instruksi ini akan mengubah sebuah 8 bit data pada Akumulator A dalam bentuk hexa menjadi 2 digit di mana digit pertama pada nibble atas berupa bit 7…4 dari Akumulator A dan digit kedua adalah nibble bawah berupa bit 3…0 dari Akumulator A. Pada dasarnya instruksi ini akan menambahkan 6 apabila nibble rendah berada di atas 9 atau bit AC set dan menambahkan 6 apabila nibble tinggi berada di atas 9 atau bit Carry Set. Instruksi ini biasa digunakan sesudah instruksi ADD.

Contoh 1:
  Add  A,#88H 
  DA 

Nilai akumulator A sebelumnya adalah 99H, hasil penjumlahan 99H dan 88H adalah 21H dengan bit AC set dan Carry set karena hasil penjumlahan 9 dan 8 baik di nibble tinggi maupun nibble rendah adalah lebih besar dari 9. Karena bit AC set dan bit carry set maka hasil penjumlahan kedua nibble tersebut masing-masing ditambah 6 dan menghasilkan 87H dengan carry flag set.

Contoh 2:
  Add  A,#02H 
  DA 

Nilai Akumulator A sebelumnya adalah 79H, hasil penjumlahan dengan 02H adalah 7BH dengan bit AC set karena hasil penjumlahan pada nibble rendah lebih besar dari 9 dan setelah melewati instruksi DA A, maka 7BH akan ditambah dengan 6H sehingga menjadi 81H.

Intinya, apabila kondisi: 
  • Bit AC set, Bit Carry clear = Akumulator A ditambah 06H 
  • Bit AC clear, Bit Carry clear = Akumulator A ditambah 00H -  Bit AC clear, Bit Carry set = Akumulator A ditambah 60H 
  • Bit AC set, Bit Carry set = Akumulator A ditambah 66H 

Instruksi DA A memang bukan sebuah instruksi yang mengubah bilangan heksa menjadi bentuk desimal dengan mudah, namun instruksi ini berfungsi untuk membuat operasi penjumlahan secara BCD sehingga hasil penjumlahan dari 79H dan 02H bukan menjadi 7BH melainkan menjadi 81H. 

Posting Komentar

Lebih baru Lebih lama

نموذج الاتصال