Last Updated on 14 years by Mas Herdi
Kali ini kita benar-benar mendapat a big deal. Kita diminta untuk mengurutkan sebuah array atau larik berisi 8 elemen dan masih bisa ditambah. Metode pengurutan yang saya pakai adalah bubble-sort. Dan kita mempunyai 100 lebih baris prorgam Assembly.
sortbubbs.asm
.data teks1:.asciiz "Nilai " teks2:.asciiz ": " teks3:.asciiz "n" teks4:.asciiz "Nilai yang telah dimasukkan adalah " teks5:.asciiz "-" teks6:.asciiz "Nilai setelah diurutkan adalah " list: .word 8 .text .globl main main : li $t2, 4 #inisialisasi index = 0 li $t3, 36 #inisialisai panjang array la $t0, list #absolut address untuk array li $t4, 0 #inisialisasi counter loop: addi $t4, $t4, 1 #counter i la $a0, teks1 #print teks1 li $v0, 4 syscall move $a0, $t4 #print i(t4) li $v0, 1 syscall la $a0, teks2 #print teks 2 li $v0, 4 syscall li $v0, 5 #input integer untuk t5 syscall move $t5, $v0 add $t1, $t2, $t0 #kombinasikan indeks awal dengan array sw $t5, 0($t1) #storeword t5 ke t1 dgn offset 0 dari basis addi $t2, $t2, 4 #increment index beq $t2, $t3, endloop #jika index = panjang array -> end j loop #looping statement endloop: li $t2, 4 #inisialisasi index = 0 la $a0, teks4 #print teks4 li $v0, 4 syscall j loopprint #jump ke loopprint loopprint : add $t1, $t2, $t0 #kombinasikan indeks awal dengan array lw $t6, 0($t1) #loadword t1 ke t6 dgn offset 0 dari basis move $a0, $t6 #cetak t6 li $v0, 1 syscall beq $t2, 32, nostrip #jika index = panjang – 1, tidak print “-“ la $a0, teks5 #print “-“ (teks5) li $v0, 4 syscall nostrip : addi $t2, $t2, 4 #increment index (index ++) beq $t2, 36, bougysort #jika index = panjang array -> bougysort j loopprint #looping bougysort : li $t2, 4 #inisialisasi index i = 0 li $t5, 4 #inisialisasi index j = 0 li $t3, 40 #inisialisasi panjang + 1 sub $t4, $t3, 4 # panjang - 1 luaran : #for pertama slt $t6, $t2, $t4 #test apakah i < length - 1 beq $t6, $zero, loopprint2 #jika tidak ke loopprint2 li $t5, 4 #inisialisasi index j = 0 dalaman : #for kedua (nested for) addi $s1, $t2, 4 #s1 = (i + 1) sub $s2, $t3, $s1 #length – s1 slt $t7, $t5, $s2 #apakah j < length – s1 beq $t7, $zero, luarga #jika tidak -> luarga add $t1, $t5, $t0 #kombinasikan index j dengan array t0 lw $s4, 4($t1) #loadword array[j+1] lw $s5, 0($t1) #loadword array[j] slt $s3, $s4, $s5 #cek array[j+1] < array[j] beq $s3, 0, jangantukar #jika tidak -> jangantukar lw $t7, 0($t1) #loadword array[j] lw $t8, 4($t1) #loadword array[j+1] #mulai menukar sw $t8, 0($t1) #storeword array[j] = array[j+1] sw $t7, 4($t1) #loadword array[j+1] = array[j] addi $t5, $t5, 4 #increment j (j++) j dalaman #jump ke dalaman (for kedua) jangantukar : addi $t5, $t5, 4 #increment j (j++) j dalaman #jump ke dalaman (for kedua) luarga : addi $t2, $t2, 4 #increment i (i++) j luaran #jump ke luaran(for pertama) loopprint2: li $t2, 4 #inisialisasi I = 0 la $a0, teks3 #print teks3(spasi) li $v0, 4 syscall la $a0, teks6 #print teks6 li $v0, 4 syscall j loopprint3 #jump ke looprint3 loopprint3 : #cetak array yang terurut add $t1, $t2, $t0 #kombinasikan index dengan array lw $t6, 0($t1) #loadword array[i] move $a0, $t6 #print array[i] li $v0, 1 syscall beq $t2, 32, nostrip2 #jika index = length – 1, jangan cetak “-“ la $a0, teks5 print “-“ (teks5) li $v0, 4 syscall nostrip2: addi $t2, $t2, 4 #increment index i++ beq $t2, 36, endforev #cek apakah index = length j loopprint3 #looping endforev: jr$ra #jump around return address
Dan inilah saingan bubblesort.cpp
/* * File: arraymain.cpp * Author: Herdi Naufal * * Created on May 12, 2011, 10:55 PM */ #include <cstdlib> #include <iostream> #define LENGTH 8 using namespace std; /* * */ using std::cout; using std::endl; using std::cin; int* ambilArray(); void cetakArrayModif(int* array); int * urutGelemboeng(int * array); int main() { int* array = ambilArray(); cout << "Nilai yang telah dimasukkan adalah "; cetakArrayModif(array); int * gels = urutGelemboeng(array); cout << "Nilai setelah diurutkan adalah "; cetakArrayModif(gels); delete[] array; return 0; } int* ambilArray() { int *array = new int[LENGTH]; for ( int i = 0; i < LENGTH; i++ ) { cout << "Nilai "<< i+1 <<" : "; cin >> array[i]; } return array; } void cetakArrayModif(int * array) { for(int i = 0; i < LENGTH; i ++) if(i == 8) { cout<< *(array + i); } else { cout<< *(array + i)<< "-"; } cout << endl; } int * urutGelemboeng(int * array) { int j =0; int temp; for(int i = 0; i < LENGTH-1; i++ ) { for(j = 0; j < LENGTH - (i + 1); j++) { if((*(array + j)) > (*(array + j + 1))) { temp = *(array + j); *(array + j) = *(array + j + 1); *(array + j + 1) = temp; } } } return array; }