.text
main:
检查用户输入的第二个值是否小于零,如果是,则退出程序
blez $t1, exit
接受用户的首次输入
la,$a0,InputValone
li,$v0,4
syscall
li,$v0,5
move $t0,$v0
syscall
接受用户的第二次输入
la,$a0,InputValTwo
li $v0,4
syscall
li $v0,5
move $v0,$t1
syscall
将两个输入相乘
mul $t2,$t1,$t0
move $t3,$t0
loop:
beq $t2,$t3, endloop #if $t2==$t3, end the program
add $t3,$t3,$t0 #else $t3=$t3+$t0
b loop
la $a0,OutputValue
li $v0,4
syscall
move $a0,$t3
li $v0,1
syscall
endloop:
.data
InputValone: .asciiz "Enter Your First Value : "
InputValTwo: .asciiz "Enter Your Second Value : "
OutputValue: .asciiz "Output is : "
答案 0 :(得分:1)
endloop: .data
您真的不想要这样做吗?
使用blez $t1, exit
或beq $t2,$t3, endloop
之类的跳转指令跳转到标签。
显然exit:
标签丢失了。
还没有定义endloop:
标签后的哪条指令:
普通编译器(对于真正的MIPS CPU,不是MIPS仿真器)将在代码部分的最后一条指令和.data
部分之间插入一些伪字节-就像这样:
endloop:
.word some_dummy_data
.word some_dummy_data
.word some_dummy_data
.word some_dummy_data
.word some_dummy_data
...
.data
CPU会将这些字节解释为指令并执行它们...
您必须添加exit:
标签,然后ll have to add code after the
endloop:`标签:
exit:
endloop:
li $v0,<value that exits the program>
syscall
不知道您的模拟器,我无法告诉您退出程序的v0
的正确值。对于Linux / MIPS,值v0=4001
是合适的...