Skip to content

Instantly share code, notes, and snippets.

@aricneto
Created March 13, 2019 00:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aricneto/d56eab3a0fb814e75833d2d562e07455 to your computer and use it in GitHub Desktop.
Save aricneto/d56eab3a0fb814e75833d2d562e07455 to your computer and use it in GitHub Desktop.
# para consulta:
# var i -> -36(sp)
# var j -> -40(sp)
# var A[] -> (-32 a -16)(sp)
#.globl _start
_start:
# alocar espaço para array na stack
addi sp, sp, 40
# adicionar cada um dos elementos {5, 1, 4, 2, 3}
li a1, 5
sw a1, -32(sp)
li a1, 1
sw a1, -28(sp)
li a1, 4
sw a1, -24(sp)
li a1, 2
sw a1, -20(sp)
li a1, 3
sw a1, -16(sp)
j .comp_1
# if (i < 5)
.comp_1:
# i > 4
li a1, 4
bgt a0, a1, .return
# restart j
mv a0, zero
sw a0, -40(sp) # j <- zero
j .comp_2
# if (j < 4)
.comp_2:
li a1, 3
bgt a0, a1, .inc_i
j .comp_arrays
# i++
.inc_i:
lw a0, -36(sp)
addi a0, a0, 1
sw a0, -36(sp)
j .comp_1
# j++
.inc_j:
lw a0, -40(sp)
addi a0, a0, 1
sw a0, -40(sp)
j .comp_2
.comp_arrays:
lw a0, -40(sp) # a0 <- j
li a2, 4 # a2 <- 4
mul a0, a0, a2 # a0 <- j * 4
addi a0, a0, -32 # a0 <- j - offset(A[0])
add a2, sp, a0 # a2 <- offset(A[j])
lw a1, 0(a2) # LOAD: a1 <- A[j]
addi a2, a2, 4 # a2 <- offset(A[j + 1])
lw a0, 0(a2) # LOAD: a0 <- A[j + 1]
bge a0, a1, .inc_j # if a0 < a1
j .swap
.swap:
addi a2, a2, -4 # a2 <- offset(A[j])
sw a0, 0(a2) # A[j] <- A[j + 1]
addi a2, a2, 4 # a2 <- offset(A[j + 1])
sw a1, 0(a2) # A[j + 1] <- A[j]
j .inc_j
.return:
jalr x0, x1, 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment