diff --git a/lab7/riscv1.asm b/lab7/riscv1.asm new file mode 100644 index 0000000..95f5893 --- /dev/null +++ b/lab7/riscv1.asm @@ -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 \ No newline at end of file