![]() |
| Operasi Aritmatika ADD Assembly |
ADD A,Rn
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
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
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
Tambahkan Akumulator A dengan sebuah konstanta dan hasilnya disimpan dalam akumulator A.
Contoh:
Add A,#05H
Tambahkan nilai Akumulator A dengan 1 dan hasilnya disimpan di Akumulator A.
Tambahkan nilai Rn (n= 0…7) dengan 1 dan hasilnya disimpan di Rn tersebut.
INC direct
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
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
Tambahkan nilai DPTR dengan 1 dan simpan hasilnya di DPTR.
Lakukan pengurangan pada nilai Akumulator A dengan 1 dan hasilnya disimpan di Akumulator A.
DEC Rn
Lakukan pengurangan pada nilai Rn (n= 0…7) dengan 1 dan hasilnya disimpan di Rn tersebut.
DEC direct
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
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
Mov A,#50H
Mov B,#0A0H
Mul AB
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
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 A
Contoh 2:
Add A,#02H
DA A
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.
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.
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,RnSiklus | 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
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,RnSiklus | 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
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
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
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 ASiklus | 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 ASiklus | 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
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 A
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 A
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.
