la li move syscall – SPIM


Siang ini akan ada praktikum Orkom dan kemaren gw ama beberapa temen gw mencoba duluan menggunakan SPIM. Gw mencoba menginstall PCSPIM yang diberikan oleh asisten, namun dengan ajaibnya semua program contoh berjalan dengan tidak benar, sementara di tempat temen gw berjalan dengan benar. Aneh dan benar-benar ajaib. Hal ini membuat gw menyerah hingga ditawarkan menginstall QtSpim, dan voila! code yang tadinya ga bisa jalan, bisa berjalan tanpa masalah. Ya sudahlah yang penting bisa nyoba dulu make QtSpim, toh sama-sama SPIM.

Jadi hal yang pertama gw coba adalah membuat looping dari 1 sampai n. Ada beberapa hal yang musti diketahui terlebih dahulu. $tX fungsinya seperti variable di C (X diisi angka), $vX berfungsi sebagai pemilih syscall, $a0 berkaitan dengan parameter atau return dari syscall. Jadi kalo $v0 diisi dengan 1, berarti akan dilakukan sebuah proses mengeprint sebuah integer. Dan yang akan diprint itu ada di $a0. Hal-hal yang mau dilakukan kalau mau melakukan sebuah syscall dapat dilihat di file yang dikasi asisten halaman 7.

Jadi misalnya kalau mau menulis sebuah integer, diperlukan kode seperti ini:

	.text
main:
	li $v0,1  #memberi perintah kalo ada syscall mau nulis integer
	li $a0,5  #yang mau ditulis masukin kesini
	syscall

exit:
	li $v0,10 #ini untuk exit, ibaratnya di C untuk return 0
	syscall   #sambungan yang atas

trus kalau ngebaca integer dari input user, kan di file PDF tadi butuh $v0 terisi 5. Jadi kita “li” $v0 dengan 5. li itu apa? Singkatan dari Load Imm, apa sih Imm? Ga ngerti juga gw, gw anggapnya itu sebagai sebuah konstanta integer. Jadi bukan variable, kan kadang secara ga sengaja jadi nyebut Load Integer, haha.

Untuk membaca sebuah integer, menyimpannya di sebuah variable dan menuliskannya kembali, butuh kode kira-kira seperti ini

	.text
main:
baca:
	li $v0,5	#$v0 diisi 5, berarti akan membaca sebuah integer
	syscall		#nyuruh ngelakuin perintahnya, user memasukkan angka
	move $t0,$v0	#angka yg dimasukkan user tersimpan di $v0, dicopy ke $t0

tulis:
	li $v0,1	#memberi perintah untuk ngeprint integer
	move $a0,$t0	#integer yang mau ditulis harus ada di $a0
	syscall		#melakukan perintah print integer

exit:
	li $v0,10
	syscall

Nah, kenapa make move $a0,$t0 bukan li $a0,$t0? Simpel aja, $t0 itu bukan imm tapi sebuah address, dan untuk mengisi address dengan address kita harus nge-“move”
Selanjutnya kita akan mencoba nge-print sebuah string.

	.data
kata: .asciiz "Hello World!!"

	.text
main:
	li $v0,4
	la $a0,kata
	syscall
exit:
	#asumsi udah pada tau untuk exit itu kodenya gimana

Nah, sekarang $a0 ga make move, dan juga ga make li, bingung ga tuh?? la itu singkatan dari Load Address. Address apa? address dari kata. Kata itu apa? kata itu sebuah space berupa .asciiz, jadi kalo la $a0,kata, kita mengisi $a0 dengan address dari kata.

Jadi demikian aja deh lalalilimove syscallnya.😀 Sebenarnya ini belum cukup lengkap dan masih belum siap untuk ngeloop 1 sampai n. jika belum mengerti label dan branch untuk loncat-loncat. Gw udah terlanjur ngasi judul la li move ama syscall doang (*ngeles). FYI, “main:”, “exit:”, “tulis:”, “baca:” itu adalah sebuah label, dan kalian bisa loncat kembali ke label tersebut. Caranya gimana? baca aja deh kode yang ada dikasi asisten ya :p

2 thoughts on “la li move syscall – SPIM

  1. Baru baca lagi. Trus li itu sepertinya Load Imm yang artinya Load Immutable, Immutable itu artinya ga bisa berubah. Bukan konstanta, yang ga bisa dirubah itu apa yang ditunjuk. Hemm. Gimana ya. Contoh yang Immutable yang lain itu Java String. Kalau udah ngerti itu taulah apa yang saya maksud dengan immutable.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s