我刚完成一项任务,发现我使用的是“伪指令”,我不允许在此作业中使用。
我试图找出如何将其转换为“真正的”代码,但我不知道从哪里开始......
如果有人可以指导我,我会很高兴:
有两个功能:
第一个获得两个正数,并在彼此分开时返回余数(如果没有提醒则返回-1)
第二个获取一个数组和一个数字,并使用第一个函数返回数组中没有余数的数字。
最后 - 在主要部分 - 检查数组中的所有数字是否被划分为没有余数 - 如果是 - 将所有数字重置为零。
这是我的代码:
.data
arr: .word 85, 36, 94, 45, 29, 85, 12, 89, 20, 0
.text
main:
lui $s0, 0x1001
add $a0, $s0, $zero
# call count_multiple with the value we want to divide in a1
add $a1, $zero, 5
jal count_multiple
beq $v1, $t5, resetArray # if every value in the array dividing by 5 - reset the array to zero
# printing the returned value (the number of values that divided in a1)
li $v0,1
addi $a0, $v1, 0
syscall
# the program is done - close
li $v0, 10
syscall
remainder:
addi $v1, $zero, 0 #reset v1
loop:
slt $t0, $a0, $a1 # if(a0<a1) t0=1 else t0=0
bne $t0, $zero, exitloop # if(t0!=0) exitloop
sub $a0, $a0, $a1 # else a0=a0-a1
j loop # keep looping
exitloop:
beq $a0, $zero, ifzero # if(a0=0) jump to ifzero
add $v1, $a0, $zero # else v1=a0=remainder (v1 is the returned value)
jr $ra # jump back to the program
ifzero:
addi $v1, $v1, -1 # v1 = -1 if the remainder is 0
jr $ra # jump back to the program
count_multiple:
addi $sp, $sp, 4
sw $ra, 0($sp)
while:
lw $s0, arr($t6) # load to s0 array value in index t6
beq $s0, 0, exitwhile # exit when you get 0
addi $t5, $t5, 1 # t5 counting the numbers in the array
add $a0, $zero, $s0 # a0 = t1, a0 is the number we want to check in "remainder" method
jal remainder # call remainder
addi $t6, $t6, 4 # t6=t6+4 (index++)
addi $t3, $zero, -1 # t3=-1
bne $t3, $v1, while # if v1 (return from remainder method) !=t3(-1) -> go back to while loop
addi $t4, $t4, 1 # else - t4 = counter = ++
j while # go back to while loop
exitwhile:
add $v1, $zero, $t4 # v1=v1+counter
lw $ra, 0($sp)
jr $ra # return v1
resetArray:
addi $sp, $sp, 4
sw $ra, 0($sp)
addi $t6, $zero, 0 # reset index t6
resetLoop:
lw $s0, arr($t6) # load to s0 array value in index t6
beq $s0, 0, exitResetLoop # exit when you get 0
sw $zero, arr($t6) # reset the value to 0
addi $t6, $t6, 4
j resetLoop
exitResetLoop:
我也希望将数组初始化转换为:
arr: .word 85, 36, 94, 45, 29, 85, 12, 89, 20, 0
我该怎么做?