分区算法问题

时间:2017-03-09 22:17:16

标签: algorithm mips

我目前正在尝试编写一个函数来在MIPS中划分整数。我应该使用这个流程图使用除法算法:

Division Algorithm Flowchart

这是我创建的代码:

.data

.text 

main:

addi $a0, $0, 7
addi $a1, $0, 4
jal divide
addi $a0, $v1, 0
addi $v0, $0, 1
syscall

addi $v0, $0, 10
syscall

divide: # $a0/$s0 = Dividend-Remainder / $a1/$s1 = Divisor / $v1 =      Quotient
# Initialize
addi $s0, $a0, 0
addi $s1, $a1, 0
addi $t0, $0, 0 # Counter = $t0
addi $t1, $0, 33 # Number of loops = $t1

# Start of loop
start:
# Step 1 : Subtract the divisor register from the remainder register     and place in remainder register
sub $s0, $s0, $s1
# Step 2 : Test the remainder register. If < 0 go to part B, otherwise go to part A
addi $t3, $0, 0
slt $t2, $t3, $s0
beq $t2, $zero, partB
# Step 2A : Shift quotient register to the left, and make least significant bit 1
sll $v1, $v1, 1
ori $v1, $v1, 1
j after # Skip step 2B
# Step 2B : Add divisor to remainder and place sum in remainder register 
partB:
add $s0, $s1, $s0
# Shift quotient register to left and make least significant bit 0
sll $v1, $v1, 1
after:
# Step 3 : Shift divisor right 1 bit
srl $s1, $s1, 1
# Increment counter
addi $t0, $t0, 1
# Test loop
bne $t0, $t1, start
jr $ra 

我一直试图抓住我的错误,但到目前为止我一直无法找到它。当我运行代码时,输​​出为-1073741825。

有人可以检查我的逻辑并告诉我我做错了什么吗?

0 个答案:

没有答案