Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions lab7/riscv1.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
.data
a: .word 10, -20, 30, -40, 50
b: .word 2, 4, -5, -8, 3
c: .space 20

.text
.globl main

main:
la s0, a
la s1, b
la s2, c
li s3, 5

loop:
beqz s3, done

lw a0, 0(s0)
lw a1, 0(s1)

jal ra, sdiv

sw a0, 0(s2)

addi s0, s0, 4
addi s1, s1, 4
addi s2, s2, 4
addi s3, s3, -1

j loop

done:
li a7, 10
ecall

sdiv:
beqz a1, sdiv_zero

li t2, 0

slt t3, a0, x0
beqz t3, sdiv_skip_neg_a
sub a0, x0, a0
xori t2, t2, 1

sdiv_skip_neg_a:
slt t3, a1, x0
beqz t3, sdiv_skip_neg_b
sub a1, x0, a1
xori t2, t2, 1

sdiv_skip_neg_b:
li t4, 0

sdiv_loop:
blt a0, a1, sdiv_done
sub a0, a0, a1
addi t4, t4, 1
j sdiv_loop

sdiv_done:
mv a0, t4

beqz t2, sdiv_ret
sub a0, x0, a0

sdiv_ret:
jr ra

sdiv_zero:
li a0, 0
jr ra