【发布时间】:2021-01-16 17:10:35
【问题描述】:
我的代码能够正确编译,它确实找到了最小的正整数,但它似乎无法正确检测到负号。我想也许我需要使用签名命令,但我找不到可能需要更改的命令。有什么想法吗?
.data
prompt1: .asciiz "Enter an integer: "
prompt2: .asciiz "Enter an integer: "
prompt3: .asciiz "Enter an integer: "
smallest: .asciiz "\nThe smallest integer is: "
.text
li $v0, 4
la $a0, prompt1
syscall
li $v0, 5
syscall
move $t0,$v0
li $v0, 4
la $a0, prompt2
syscall
li $v0, 5
syscall
move $t1,$v0
li $v0, 4
la $a0, prompt3
syscall
li $v0, 5
syscall
move $t2,$v0
blt $t1, $t0, Num1
move $t1, $t0
Num1:
blt $t2, $t1, Num2
move $t2, $t1
Num2:
li $v0, 4
la $a0, smallest
syscall
li $v0, 1
move $a0, $t1
syscall
li $v0, 10
syscall
【问题讨论】:
-
blt是有符号比较。bltu将是未签名的。您确定您的输入系统调用处理签名输入吗?检查 MARS 文档,并使用调试器单步执行并查看寄存器值,以确保寄存器中的数字是您输入的。如果不是,那就是输入问题。 -
问题不是 neg/pos,而是更根本的问题:第三个最小的数字没有得到正确处理。尝试输入
765,程序说6是最小的。
标签: assembly input integer mips negative-number