Ini bakal panjang dan membosankan, sumpah. Jika tidak tertarik atau berkepentingan saya harap tidak memaksakan diri membacanya.
Program ini mempunyai kemampuan mengurutkan masukan baik berupa integer, real maupun karakter. Proses pengurutan dapat dilakukan dengan insertion sort maupun minimum sort.
#########################################################################
# author : Kuncoro Dwi Atmojo nama program: >>> SuperSorter <<< #
##########################################################################
#>>>>>>>>>>>>>>>> main program <<<<<<<<<<<<<<<<<<<<<<<<#
#>>>> program meminta masukan N bilangan/karakter <<<<<#
#>>>>>>>> program mengurutkan bilangan/karakter <<<<<<<#
#>>>>>>>>>> tersebut dengan insertion sort/minimum sort <<<<<<<<<<<<#
############# penggunaan register #######################################################
#$s1 :nilai N, jumlah input #
#$s0 :counter untuk pengisian N bilangan/karakter #
#$s2 :pilihan integer, pecahan atau karakter #
#$s3 :counter untuk menampilkan isi array yang terurut #
#$t1 :index untuk menggeser nilai yang lebih besar dari masukan baru #
#$t3 :index dari masukan baru, selalu bertambah setiap ada masukan #
#$t4 :nilai masukan pengguna #
#$t5 :index dari nilai yang dibandingkan dengan masukkan baru #
#$t6 :nilai dalam array yang akan dibandingkan, nilai dari array dengan indeks $t5 #
#$t7 :index array yang akan ditampilkan #
#$t8 :temp karakter yang akan diprint #
#$f2 :masukan baru berupa pecahan #
#$f4 :pecahan yang akan dibandingkan dengan masukan baru #
############### kamus ###########################################################
.data
arrint: .word 0:300
arrfloat: .space 2048
arrchar: .space 1024
############## algoritma #################
.text
.globl main
main: # main program
jal inisial # menanyakan jenis masukkan, metode sorting yang dipakai, jumlah N
beq $t0,98, main_minsort # jika memilih metode minimum sort (b), selanjutnya ke main_minsort
main_insort: # main untuk insertion sort
li $s0, 1
li $t3, 0 # index masukan, jika char maka t3 +1, int maka t3+4, double maka t3+8
muter:
jal input # minta masukan
jal insort # langsung mengurutkan setiap masukan
addi $s0,1
ble $s0, $s1, muter # terus minta masukan hingga s0 sama dengan N
jal tampilkan # menampilkan hasilnya ke layar
j keluar # keluar program
main_minsort: # main untuk minimum sort
li $s0, 1
li $t3, 0 # index masukan, jika char maka t3 +1, int maka t3+4, double maka t3+8
jal input_minsort # meminta masukan, memasukkan ke dalam array tanpa mengurutkannya
addi $s0,1
ble $s0, $s1, input_minsort # terus minta masukan hingga s0 sama dengan N
jal minsort # mengurutkan isi array dengan metode minimum sort
jal tampilkan # menampilkan hasil urutan ke layar
j keluar # keluar dari program
#>>>>>> end of main program <<<<<<#
#>>>>>> inisial <<<<<<<<<#
.data
str0: .asciiz “ ~~~ program mengurutkan N masukan ~~~\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n”
str1: .asciiz “\n N:”
str7: .asciiz “anda ingin memasukkan integer, pecahan atau karakter(i/p/k)? “
str8: .asciiz “\n pilih metode pengurutan:\n a. insertion sort\n b. minimum sort\n”
str9: .asciiz “(a/b)?”
pilihan: .space 8
.text
inisial:
la $a0, str0 # menampilkan tulisan
li $v0, 4 # ‘~~~ program mengurutkan…’
syscall
pilihinput: # >>>> memilih jenis input <<<<
la $a0, str7 # menampilkan tulisan
li $v0,4 # ‘anda ingin memasukkan integer…’
syscall
li $v0,8 # meminta masukan
la $a0,pilihan # menyimpannya di ‘pilihan’
li $a1, 8
syscall
lb $t2,($a0) # meload pilihan ke $t2
beq $t2,105, pilihmetode # jika masukan sudah benar, pilih metode
beq $t2,112, pilihmetode # masukan yang benar ‘i’, ‘p’, atau ‘k’
beq $t2,107, pilihmetode
b pilihinput # jika masukan salah, minta masukan lagi
pilihmetode: # >>> memilih metode sorting yang digunakan <<<
la $a0, str8 # menamppilkan tulisan
li $v0,4 # ‘pilih metode…’
syscall
masukanpilihan:
la $a0, str9 # menampilkan tulisan ‘(a/b)?’
li $v0,4
syscall
li $v0,8 # meminta masukan
la $a0,pilihan # menyimpannya di ‘pilihan’
li $a1, 8
syscall
lb $t0,($a0) # meload masukan jenis metode ke $t0
beq $t0,97, masukkanN # jika pilihan benar (a/b)
beq $t0,98, masukkanN # branch ke masukkanN
b masukanpilihan # jika salah minta masukan lagi
masukkanN: # >>> meminta masukan N jumlah input <<<
la $a0, str1 # menampilkan tulisan
li $v0, 4 # ‘N: ‘
syscall
li $v0,5 # meminta masukan, menyimpan di $v0
syscall
move $s1,$v0 # memindah masukan ke $s1
blez $s1, keluar # jika N kurang dari 1, keluar
jr $ra # kembali ke register $ra (setelah jal inisial)
#>>>>>>>> end of inisial <<<<<<<<<<<<#
#>>>>>>>> input <<<<<<<<<<<<<<<<<<<#
.data
str3: .asciiz “<> masukan ke-”
str4: .asciiz “: “
.text
input: # >>> meminta input bilangan/karakter yang ingin diurutkan <<<
la $a0, str3 # menampilkan tulisan ‘masukan ke-’
li $v0, 4
syscall
move $a0, $s0 # menampilkan counter masukan
li $v0, 1
syscall
la $a0, str4 # menampilkan ‘: ‘
li $v0, 4
syscall
beq $t2,105, input.ins.int # branch sesuai pilihan jenis input
beq $t2,112, input.ins.float # i (105), p(112), atau k(107)
beq $t2,107, input.ins.char
input.ins.int:
li $v0,5 # meminta masukan integer, menyimpan di $v0
syscall
jr $ra # kembali ke langkah setelah input
input.ins.float:
li $v0,7 # meminta masukan pecahan (double), menyimpak di $f0
syscall
jr $ra # kembali ke langkah setelah input
input.ins.char:
li $v0,8 # meminta masukan karakter
la $a0, arrchar($t3) # menyimpan di arrchar($t3)
li $a1,1024
syscall
jr $ra # kembali ke langkah setelah input
#>>>>>> end of input <<<<<<<<<<#
Read more…
Recent Comments