猜猜MIPS中的数字

问题描述 投票:0回答:1

我的目标是让电脑找到秘密号码,而用户应该告诉电脑它是高还是低? 当它总是高或总是低时,它可以工作,但当我必须输入两个时,它就不行了。谁知道有什么解决办法?

.data

prompt: .asciiz "Enter the Secret Number"
prompt2: .asciiz "\n Computer guess is: "

higherLowerorCorrect: .asciiz "\n Number is higher(h) lower(l) or correct/exit(2):" 

.text

li $v0, 4
la $a0, prompt
syscall

li $v0, 5
syscall

move $t2, $v0

li $t7, 101
li $t6, 0
li $t5, 0

loop:

move $a1, $t7
li $v0, 42
syscall


add $a0, $a0, $t6
move $t5, $a0

li $v0, 4
la $a0, prompt2
syscall

move $a0, $t5
li $v0,1
syscall

li $v0, 4
la $a0, higherLowerorCorrect #  
syscall

li $v0, 12 
syscall

beq $v0, 'l', setHigherBound ####

beq $v0, 'h', setLowerBound ####

beq $v0, 'x', exit ####


setHigherBound:
move $t7, $t5
j loop

setLowerBound:
add $t7,$t7,$t6
sub $t7, $t7, $t5
move $t6, $t5
j loop


exit:
output:
assembly mips mars
1个回答
1
投票

你计算允许计算机猜测的数字的方法在我看来有点破绽。

考虑以下情况。

  1. 秘密号码是5,LB是0(含),UB是101(不含)。
    • 计算机被允许猜测的数字是[0,100]。
  2. 计算机猜到的是3,太低了。UB = (101+0 -3) == 98, LB = 3.
    • 糟了!现在让计算机猜数字[0,100]。计算机现在被允许猜数字[3,100],即使你已经确定任何<= 3都太低了。
  3. 计算机猜的是10,这太高了。UB = 10.
    • 糟糕! 计算机现在可以猜数字[3,12],即使你已经确定任何<=3都太低,任何>=10都太高。

我建议你把你的 setLowerBound 代码到。

setLowerBound:
addiu $t6, $t5, 1    # LB is inclusive, so set it to guess+1
j loop

和随机数的生成。

sub $a1, $t7, $t6
li $v0, 42
syscall
add $a0, $a0, $t6   # $a0 = rand(UB - LB) + LB
© www.soinside.com 2019 - 2024. All rights reserved.