Anda di halaman 1dari 7

PRAKTIKUM ORGANISASI MESIN DAN BAHASA

ASSEMBLY

Judul : Atmel Studio Instruksi


Aritmetika, Instruksi Logika, dan Program
Percobaan : Praktikum 7
Nama : Kevin Rafi Kurniawan
NRP : 2210191011
Dosen : Reni Soelistijorini
Tanggal : 22 Desember 2020

qPRAKTIKUM 1
PRAKTIKUM 7

1. Tulis program yg menyelesaikan permasalahan berikut. Bagaimana penunjukan flag


V nya?
Berikan analisa!

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

Status register flag setelah melakukan instruksi NEG R16

Status register flag setelah melakukan instruksi NEG R17

Register R16 dan R17 setelah dilakukan instruksi dua baris NEG

Status register flag setelah mengeksekusi baris terakhir

Nilai akhir dari register R16 dan R17

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)

LDI R16, 127


LDI R17, 127
NEG R16
ADD R16, R17
Nilai R16 dan R17 setelah melakukan alokasi memori GPR

Status register flag setelah melakukan NEG R16

Nilai register dari R16 dan R17 setelah dilakukan NEG R16

Nilai status register flag setelah dilakukan eksekusi baris terakhir

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:

Register R17 dan R20 setelah proses LDI

R17 dan R20 setelah proses ADD

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

4. Buat program yg mengkonversikan bilangan packed BCD 0x87 ke ASCII.


Tempatkan kode ASCII dalam R20 dan R21

Code Program:
LDI R20, 0x87

MOV R21, R20


ANDI R21, 0x0F
ORI R21, 0x30

MOV R22, R20


SWAP R22
ANDI R22, 0x0F
ORI R22, 0x30

HERE : JMP HERE

Hasil output:
Nilai R20 dicopy pada R21

Nibble atas R21 akan diubah menjadi 0 melalui ANDI

Nibble atas R21 akan diubah menjadi 3 melalui ORI

Nilai R20 dicopy pada R22

Nilai R22 akan dilakukan SWAP untuk menukar nibble atas dan bawah

Nibble atas R22 diubah menjadi 0 melalui ANDI

Nibble atas R22 akan diubah menjadi 3 melalui ORI

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.

Anda mungkin juga menyukai