0% menganggap dokumen ini bermanfaat (0 suara)
249 tayangan37 halaman

Tugas Cpu Simulator

Program ini akan menampilkan string yang dimasukkan pada data memory sebanyak 8 kali melalui looping yang terjadi. Program memanggil subrutin L1 dan L2, dimana subrutin L1 menampilkan output ke IO console sedangkan subrutin L2 mengatur nilai register untuk pengulangan looping hingga R01 sama dengan R02.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
249 tayangan37 halaman

Tugas Cpu Simulator

Program ini akan menampilkan string yang dimasukkan pada data memory sebanyak 8 kali melalui looping yang terjadi. Program memanggil subrutin L1 dan L2, dimana subrutin L1 menampilkan output ke IO console sedangkan subrutin L2 mengatur nilai register untuk pengulangan looping hingga R01 sama dengan R02.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 37

STUDI KASUS 1

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

JMP 0 : melompat ke instruksi pada alamat 0, atau dari awal


TABEL PERUBAHAN

STEP R00 R01 R02 R03 R04 R05 PC SR SP BR Status IR MAR MDR
Flag

1 5 0 0 0 0 0 6 0 8096 0 MOV #5, 100 MOV #5,


R00 R00

2 8 8 0 0 0 0 12 0 8096 0 MOV #8, 106 MOV #8,


R01 R01

3 8 8 0 0 0 0 17 0 8096 0 ADD 112 ADD R00,


R00, R01 R01

4 8 8 0 0 0 0 20 0 8098 0 PSH R01 117 PSH R01

5 8 8 0 0 0 0 23 0 8100 0 PSH R00 120 PSH R00

6 8 8 0 0 0 0 28 0 8100 0 Z CMP 123 CMP R00,


R00, R01 R01

7 8 8 0 0 0 0 0 0 8100 0 Z JMP 0 128 JMP 0

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)

CMP R02, R01 : membandingkan nilai di register R02 dengan R01


JNE $L0 : kembali keinstruksi pada Label L0 jika ADD #1, R01 : menambah nilai 1 ke register R01 sehingga nilai
hasil perbandingan tidak sama, karena nilai R02 R01 yang sebelumnya bernilai 1 menjadi 2
dan R01 tidak sama maka instruksi Kembali ke awal
sub rutin L0 yaitu ADD #1, R01
Terjadi loop dimana program Kembali ke CAL $L1 : memanggil
fungsi pada label L1, OUT R00,0, RET, CMP R02, R01 , JNE $L0,
ADD #1, R01 dan seterusnya

Program ini akan mengalami looping sebanyak 7 kali


hingga R01 dan R02 bernilai sama, yaitu sama sama
bernilai 8
Ketika R01 dan R02 bernilai sama maka instruksi JNE $L0 tidak lagi memenuhi syarat sehingga instruksi berlanjut ke RET,
RET akan mengembalikan program ke sub instruksi sebelumnya, dalam hal ini yaitu HLT, sehingga program berhenti ketika
HLT dieksekusi. Program tersebut akan menampilkan tulisan yang sebelumnya di set pada data memory
di alamat 24 sebanyak 8x pada I/O Console.
TABEL PERUBAHAN

STEP R00 R01 R02 R03 R04 R05 PC SR SP BR Flag IR MAR MDR

1 0 0 0 0 0 0 1 0 8100 0 MSF 100 MSF


2 0 0 0 0 0 0 5 0 8102 0 PSH #8 101 PSH #8
3 0 0 0 0 0 0 10 0 8102 0 CAL $L2 105 CAL $L2
4 0 0 8 0 0 0 13 0 8100 0 POP R02 110 POP R02
5 0 0 8 0 0 0 17 0 8102 0 PSH #8 113 PSH #8
6 0 1 8 0 0 0 20 0 8100 0 POP R01 117 POP R01
7 0 0 8 0 0 0 26 0 8100 0 Z MOV #0, R01 120 MOV #0, R01
8 24 0 8 0 0 0 32 0 8100 0 MOV #24, R00 126 MOV #24, R00
9 24 1 8 0 0 0 38 8100 ADD #1, R01 132 ADD #1, R01
10 24 1 8 0 0 0 39 0 8104 100 MSF 138 MSF
11 24 1 8 0 0 0 53 0 8103 100 CAL $L1 139 CAL $L1
12 24 1 8 0 0 0 59 0 8104 100 OUT R00, 0 153 OUT R00, 0
13 24 1 8 0 0 0 43 0 8100 100 RET 159 RET
CMP R02, CMP R02,
14 24 1 8 0 0 0 48 2 8100 100 N 143
R01 R01
15 24 1 8 0 0 0 32 2 8100 100 N JNE $L0 148 JNE $L0
16 24 2 8 0 0 0 38 0 8100 100 ADD #1, R01 32 ADD #1, R01

17 24 2 8 0 0 0 39 0 8104 100 MSF 138 MSF


18 24 2 8 0 0 0 53 0 8103 100 CAL $L1 139 CAL $L1
19 24 2 8 0 0 0 59 0 8104 100 OUT R00, 0 153 OUT R00, 0
20 24 2 8 0 0 0 43 0 8100 100 RET 159 RET
--- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
86 24 8 8 0 0 0 10 1 8096 100 Z HLT 109 HLT
STUDI KASUS 3
Buat sebuah program baru menggunakan base address 100, lalu masukkan set instruksi dengan urutan sebagai
berikut:
MOV #48, R01
MOV #20, R02 L0:
STB R01, @R02 ADD #1, R01
ADD #1, R02
CMP #57, R01 JNE $L0
SUB #1, R02
MOV #20, R03
MOV #80, R04 L1:
LDB @R03, R05 ADD #1, R03 STB R05, @R04 ADD #1, R04
CMP #29, R03 JNE $L1
SUB #1, R04 HLT
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 nilai data yang ada pada Program Data Memory seperti pada gambar 9
di atas, lalu berikan kesimpulan anda !
MOV #48, R01 : menambahkan nilai 48 ke register R01
MOV #20, R02 : menambahkan nilai 20 ke register R02
L0: : label L0
STB R01, @R02 : menyimpan bit dari register R01 ke alamat register R02
ADD #1, R01 : menambahkan nilai 1 pada register R01
ADD #1, R02 : menambahkan nilai 1 pada register R02
CMP #57, R01 : membandingkan nilai 57 dengan nilai di register R01
JNE $L0 : loncat ke label L0 jika nilai belum sama
SUB #1, R02 : mengurangi isi dari register R02 dengan 1
MOV #20, R03 : memberi nilai 20 ke register R03
MOV #80, R04 : memberi nilai 80 ke register R04
L1: : label L1
LDB @R03, R05 : mengambil data bit dari alamat register R03 dan
dimasukkan ke R05
ADD #1, R04 : menambah nilai 1 ke register R04
CMP #29, R03 : membandingkan nilai di register R03 dengan 29
JNE $L1 : loncat ke label L1 jika nilai belum sama
SUB #1, R04 : mengurangi nilai register R04 dengan nilai 1
HLT : menghentikan program
MOV #48, R01 : menambahkan nilai 48 ke register R01 MOV #20, R02 : menambahkan nilai 20 ke register R02

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

Perintah akan Kembali ke Label yang dimulai oleh


program L0 STB R01, @R02 : menyimpan Kembali bit
dari register R01 ke alamat register R02 dengan angka 1
Program akan terus melakukan Looping hingga kondisi CMP #57, R01 terpenuhi

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

SUB #1, R02 : mengurangi isi dari register R02


dengan 1 dari 29 menjadi 8

MOV #80, R04 : memberi nilai 80 ke register R04


LDB @R03, R05 : mengambil data bit dari alamat ADD #1, R03 : menambah nilai 1 ke register R03
register R03 sebesar 48 dan dimasukkan ke R05 yang sebelumnya 20 menjadi 21

STB R05, @R04 : menyimpan bit R05


ke alamat register R04, yang
ditunjukan dengan angka 0 pada Data
Memory LAdd 0080
ADD #1, R04 : menambah nilai 1 ke
register R04 dari nilai 80 menjadi 81 CMP #29, R03 : membandingkan nilai di register R03
dengan 29, dimana disini Nilai R03 sebesar 21

JNE $L1 : loncat ke label L1 jika nilai belum sama,


Karena R01 tidak memenuhi syarat yaitu harus sama
dengan #29 , maka instruksi Kembali ke label L1
ADD #1, R03 : proses akan Kembali menambahkan nilai 1 ke register R03 yang sebelumnya 21 menjadi 22

STB R05, @R04 : akan Kembali


menyimpan bit R05 ke alamat
register R04, yang ditunjukan
dengan angka 1 pada Data
Memory LAdd 0080
Program ini akan mengalami looping hingga R01 dan R02 bernilai sama, yaitu sama sama bernilai
29, jika syarat terpenuhi maka program JNE $L1 akan diabaikan dan dilanjutkan dengan program
selanjutnya Yaitu SUB #1, R04 dan berakhir diHLT
Data Memory akan menampilkan angka berderet

Anda mungkin juga menyukai