ASSEMBLY
qPRAKTIKUM 1
PRAKTIKUM 7
a. (-123) + (-127)
Code Program
LDI R16, 123
LDI R17, 127
NEG R16
NEG R17
ADD R16, R17
Hasil Output:
Nilai register awal pada saat memasukkan 123 dan 127 decimal ke register
Register R16 dan R17 setelah dilakukan instruksi dua baris NEG
Analisa:
Pada flag terakhir setelah baris ADD dilaksanakan akan menghasilkan flag S, V, dan
C bernilai 1. Flag S akan bernilai 1 karena terjadi overflow dan bit pada R16 0001 0110
D7 bernilai 0 sehingga S akan berlawanan dengan D7. Flag V bernilai 1 berarti terjadi
overflow. Penjumlahan akan menghasilkan 0x106. Sehingga C =1
b. (-127) + (+127)
Nilai register dari R16 dan R17 setelah dilakukan NEG R16
Nilai register R16 dan R17 setelah melakukan ADD R16, R17 pada baris terakhir
Analisa:
Hasil penjumlahan menghasilkan nilai 0x100. Namun, karena R16 memiliki negative
flag N. Hasil pada R16 menjadi 0x00. Flag H dikarenakan dari penjumlahan 0x81
dengan 0x7F tedapat carry dari D3-D4. Flag Z bernilai 1 karena hasil penjumlahan
bernilai 0x00. Dan cary flag C bernilai 1 karena R16 memiliki carry
2. Buat program untuk menambahkan 25 ke tanggal lahir anda dan simpan hasilnya di
R20.
Code Program:
LDI R20, 3
LDI R17, 25
ADD R20, R17
Hasil Output:
Analisa:
Tanggal lahir saya 3 Februari 2001 Sehingga program dibuat untuk menambahkan 25
ke 3. ADD digunakan untuk menjumlahkan R17 dan 20 yang telah diisi dengan nilai
tersebut. Sehingga hasil dari 0x19 (25) dan 0x03 (3) menghasilkan 0x1C (28)
3. Buat program untuk menemukan jumlah bilangan nol pada suatu data 8 bit.
Analisalah!
Code Program :
LDI R16, 8
LDI R17, 16
LDI R18, 0
AGAIN:
ROR R17
BRCC ZERO
CLC
JMP NEXT
ZERO:
INC R18
NEXT:
DEC R16
BRNE AGAIN
Hasil Output :
R16 digunakan sebagai counter untuk melakukan perulangan selama 8 kali.
R17 merupakan nilai input 8-bit yang akan dihitung jumlah bit 0 nya.
R18 merupakan jumlah bit 0 yang ada dalam bit R17
Nilai awal register R16, R17 & R18 ketika diinialiasasi dengan LDI
Nilai register R16, R17 & R18 ketika dilakukan perulangan pertama, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan kedua, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan ketiga, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan keempat, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan kelima, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan keenam, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan ketujuh, R16 sebagai
counter akan berkurang 1
Nilai register R16, R17 & R18 ketika dilakukan perulangan kedelapan, R16 sebagai
counter akan berkurang 1. Karena R16 bernilai 0 maka program selesai
Analisa:
Pada program diatas diawal program akan diinisialisasi R16 sebagai banyak perulangan,
R17 sebagai nilai input yang dihitung bit 0 nya. R18 sebagai penampung banyaknya bit
0 pada R17. Pada saat program berjalan apabila flag C bernilai 1, PC akan menunjuk
pada label ZERO dan akan menaikkan register R18. Apabila tidak, akan dihapus cary
flagnya dan dilakukan perotasian ke kanan. Hal tersebut dilakukan sebanyak 8 kali
Code Program:
LDI R20, 0x87
Hasil output:
Nilai R20 dicopy pada R21
Nilai R22 akan dilakukan SWAP untuk menukar nibble atas dan bawah
Analisa:
Pada program diatas untuk mengubah suatu nilai packed BCD ke ASCII dilakukan
pemecahan antara high dan low nibblenya. Setelah pemecahan akan dibentuk nilai baru
dengan nilai pemecahan tersebut menjadi lower nibbble dan pada high nibble akan
diubah menjadi 3.
Kesimpulan:
Pada percobaan ini dilakukan instruksi aritmatika dan logika pada AVR ATmega16
dalam software Atmel Studio.
Pada program pertama untuk menghasilkan nilai negatif dapat dilakukan dengan
instruksi NEG. Pada instruksi tersebut akan membuat flag N = 1 , C = 1 dan flag lainnya
tergantung pada bilangan yang dinegatifkan. flag V merupakan tanda suatu operasi
terjadi overflow dan S akan berlawanan dengan D7 apabila terjadi overflow. Jika tidak
akan bernilai sama dengan D7. Flag Z akan bernilai 1 apabila suatu operasi
menghasilkan nilai 0.
Pada program 3 untuk membuat sebuah penghitung bit 0 suatu nilai dilakukan
perulangan sebanyak 8 kali untuk merotasi bilangan dan menghapus carry setelah
melakukan perulangan Jika terdapat flag C melalui BRCC akan menambahkan hasil
sebanyak 1.
Pada program 4 dilakukan pengubahan bentuk Packed BCD menjadi ASCII dengan
cara memecah high dan low nibble lalu dibentuk nilai baru dengan high nible bernilai
3 dan lower nibble dari pemecahan nilai tersebut.