Mips循环If-Else语句
我正在尝试创建一个mips程序,它将遍历3条if/if-else语句并循环它们10次。我很难理解如何使标签循环其他标签,或者是否有其他方法。我的代码如下:Mips循环If-Else语句,mips,mars-simulator,risc,Mips,Mars Simulator,Risc,我正在尝试创建一个mips程序,它将遍历3条if/if-else语句并循环它们10次。我很难理解如何使标签循环其他标签,或者是否有其他方法。我的代码如下: .data a: .word 10 b: .word 16 c: .word 16 d: .word 6 message: .asciiz "\nThe numbers are equal\n" message2: .asciiz "\nThe numbers are not equal\n
.data
a: .word 10
b: .word 16
c: .word 16
d: .word 6
message: .asciiz "\nThe numbers are equal\n"
message2: .asciiz "\nThe numbers are not equal\n"
.text
lw $s0, a
lw $s1, b
lw $s2, c
lw $s3, d
main:
beq $s0, $s1, firstEqualsStatement
beq $s0, $s1, secondEqualsStatement
j NEXT
bne $s0, $s1, doNotEqualStatement
j NEXT2
firstEqualsStatement: #if (a == b)
#{ Z = a+a;
# Z = Z + b + c + d;
#}
# print message if the numbers are equal
li $v0, 4
la $a0, message
syscall
li $v0, 1
add $a0, $s0, $s0
add $a0, $a0, $s1
add $a0, $a0, $s2
add $a0, $a0, $s3
syscall
secondEqualsStatement: # if (a == b)
#{
# Z = a;
#}
# else
#{
# Z = (a+b+c) – d;
#}
# print message if the numbers are equal
li $v0, 4
la $a0, message
syscall
li $v0, 1
add $a0, $s0, $zero
syscall
NEXT:
li $v0, 4
la $a0, message2
syscall
li $v0, 1
add $a0, $s0, $s1
add $a0, $a0, $s2
sub $a0, $a0, $s3
syscall
doNotEqualStatement: # if (a != b) {
# Z = a;
#}
# else {
# Z = (a+b+c) – d;
#}
# print message if the numbers are not equal
li $v0, 4
la $a0, message2
syscall
li $v0, 1
add $a0, $s0, $zero
NEXT2:
li $v0, 1
add $a0, $s0, $s1
add $a0, $a0, $s2
sub $a0, $a0, $s3
syscall
我希望这些技巧可以帮助你,因为MARS只是SPIM的更新版本(我的教授现在让我们在课堂上学习) 创建一个寄存器,在开始时保存count和max循环
li $t0, 0 #init count to 0
li $t1, 7 #loop set to 7
将主循环括在循环标签中,然后在j NEXT2之后,包括计数增量和b main和beq
add $t0, $t0, 1 #count++
beq $t1, $t0, exit #if(t0==t1) break
b loop
其他注释
- 在末尾退出代码之前添加“退出”标签
- 将“next”标签添加到主代码中,以便if语句在完成执行后跳回,并在if语句中包含分支语句
- 也许改变你的数据标签?(我在QTSpim中编译时遇到语法错误,因为“b”表示分支?)
- 您是想在添加($a0)时打印每个数字,还是只打印最终结果(添加到$t2直到最后一次添加/订阅)李>
- 循环似乎是多余的,因为您没有更新寄存器变量($s0-$s3)