Tugas Cpu Simulator
Tugas Cpu Simulator
Buat sebuah program baru menggunakan base address 100, lalu masukkan set instruksi
dengan urutan sebagai berikut:
MOV #5, R00
MOV #8, R00 ADD R00, R01 PSH R01
PSH R00
CMP R00, R01 JMP 0
POP R02 POP R03
CMP R04, R05 JEQ 0
Jalankan program di atas dengan cara mengeksekusi tiap-tiap set instruksi ! (klik tombol
Step untuk setiap set instruksi pada Program Control Tab seperti pada gambar 1 di atas)
Amati apa yang terjadi setiap Step-nya pada setiap register yang ada pada CPU-OS
simulator baik itu general purpose register maupun special CPU register lalu berikan
kesimpulan anda !
MOV #5, R00 MOV #8, R00
MOV #5, R00 : memberikan nilai “5” ke register R00 MOV #8, R00 : memberi nilai “8” ke register R00
ADD R00, R01 PSH R01
ADD R00, R01: menambahkan nilai dari R00 ke R01 PSH R01 : mendorong nilai dari R01 ke puncak stack
PSH R00
CMP R00, R01
PSH R00 : mendorong nilai dari R00 ke puncak CMP R00, R01 : membandingkan nilai dari R00 dengan R01
stack
JMP 0
STEP R00 R01 R02 R03 R04 R05 PC SR SP BR Status IR MAR MDR
Flag
program ini memiliki error, karena adanya masalah pada instruksi JMP 0, dimana saat JMP 0 di eksekusi
program akan mengulang ke Addres 0 yang mengakibatkan Program akan mengulang terus, sehingga
instruksi selanjutnya tidak dapat di eksekusi.
STUDI KASUS 2
Buat sebuah program baru menggunakan base address 100. Buka layar tampilan Program Data Memory seperti pada gambar
9 di atas, masukkan data String pada baris alamat yang dimulai dari Ladd 24 dengan nama anda, lalu masukkan set instruksi
dengan urutan sebagai berikut:
(catatan: simbol L0, L1, dan L2 adalah simbol label pada set instruksi yang biasanya digunakan untuk mempermudah proses
pemanggilan subrutin. Label dapat dibuat dengan cara mengklik tombol Add New pada Instruction Tab seperti pada
gambar 1 di atas, lalu mengklik tombol New Label pada tampilan berikutnya dan mengisi nama label yang diinginkan.
Sedangkan untuk simbol @ adalah menandakan bahwa mode pengalamatan yang digunakan adalah mode pengalamatan
indirect. Mode pengalamatan indirect ini dapat digunakan dengan mengklik pilihan direct atau indirect yang ada pada
tampilan saat kita ingin memasukkan sebuah set instruksi seperti saat setelah kita mengklik tombol Add New pada Intruction
Tab pada gambar 1 di atas.)
MSF PSH #8 CAL $L2 HLT
L2:
POP R02 PSH #1 POP R01
MOV #0, R01
MOV #24, R00 L0:
ADD #1, R01 MSF
CAL $L1
CMP R02,R01 JNE $L0
RET L1:
OUT @R00, 0 RET
Jalankan program di atas dengan cara mengatur lebih dahulu kecepatan simulator sedemikian rupa sehingga simulasi mudah
diamati lalu klik tombol Run pada Program Control Tab seperti yang ada pada gambar 1 di atas !
Amati apa yang terjadi pada setiap register yang ada pada CPU-OS simulator baik itu general purpose register maupun special
CPU register, amati juga tampilan yang ada pada IO Console seperti pada gambar 10 di atas, lalu berikan kesimpulan anda !
MSF (Mark stack frame) : memanggil subroutine
PSH #8 : mendorong nilai 8 ke puncak stack
CAL $L2 : memanggil fungsi pada label L2
HLT : instruksi terakhir dari program yang berfungsi untuk menghentikan program
L2: : Label L2
POP R02 : mengeluarkan nilai stack dan dimasukkan ke register R02
PSH #1 : mendorong nilai 1 ke puncak stack
POP R01 : mengeluarkan nilai stack dan dimasukkan ke register R01
MOV #0, R01 : menambahkankan nilai 0 ke register R01
MOV #24, R00 : menambahkankan nilai 24 ke register R00
L0: : Label L0
ADD #1, R01 : menambah nilai 1 ke register R01
MSF : memanggil subroutine atau fungsi
CAL $L1 : memanggil fungsi pada label L1
CMP R02, R01 : membandingkan nilai di register R02 dengan R01
JNE $L0 : kembali keinstruksi pada Label L0 jika hasil perbandingan tidak sama
RET : kembali pada instruksi yang terakhir berjalan
L1: : Label L1
OUT @R00, 0 : menampilkan output dari register R00 ke IO device
RET : kembali pada instruksi yang terakhir berjalan
Buka layar tampilan Program Data Memory ,
masukkan data String pada baris alamat yang
dimulai dari Ladd 24 dengan nama anda
MSF (Mark stack frame) : memanggil subroutine PSH #8 : mendorong nilai 8 ke puncak stack
CAL $L2 : memanggil fungsi pada label L2 sehingga perintah POP R02 : mengeluarkan nilai stack 8 dan dimasukkan ke
HLT dilewatkan langsung ke perintah POP RO2 register R02
PSH #1 : memasukan dan mendorong nilai 1 POP R01 : mengeluarkan nilai stack dan dimasukkan ke register
ke puncak stack R01
MOV #0, R01 : menambahkankan nilai 0 ke register R01 MOV #24, R00 : menambahkankan nilai 24 ke register R00
sehingga r01 yang tadinya bernilai 1 menjadi 0 lagi Sehingga R00 yang sebelumnya bernilai 0 menjadi 24
ADD #1, R01 : menambah nilai 1 ke register R01 CAL $L1 : memanggil fungsi pada label L1 sehingga instruksi
dibawahnya langsung dilewatkan
MSF : memanggil subroutine atau fungsi OUT @R00, 0 : menampilkan output dari register R00 ke
Console IO Device
RET : kembali pada instruksi yang terakhir berjalan (keluar dari subrutin L1)
STEP R00 R01 R02 R03 R04 R05 PC SR SP BR Flag IR MAR MDR
STB R01, @R02 : menyimpan bit dari register R01 ke alamat register R02 yang ditunjukan dengan
angka 0 pada Data Memory LAdd 16
ADD #1, R01 : menambahkan nilai 1 pada register R01 dari 48 menjadi 49
ADD #1, R02 : menambahkan nilai 1 pada register R02, dari 20 menjadi 21
JNE $L0 : loncat ke label L0 jika nilai belum sama,
CMP #57, R01 : membandingkan nilai 57 dengan nilai
Karena R01 tidak memenuhi syarat yaitu harus sama
di register R01, dimana nilai R01 adalah 49
dengan #57 , maka instruksi Kembali ke label L0
Jika syarat terpenuhi maka program akan mengabaikan program JNE $L0 dan dilanjutkan ke SUB #1, R02
MOV #20, R03 : memberi nilai 20 ke register R03