0

我试图让 MIPS 生成 32 位随机整数。我正在尝试使用以下代码,但在运行程序时会出错。

addi $v0, $zero, 42
li $a1, 4294967295 #32 bit number
syscall

我正在使用火星模拟器。该程序汇编没有任何错误。执行上述系统调用时会出现问题。我真的很感激任何帮助。

4

1 回答 1

2

我认为问题在于您提供的最大数量(0xffffffff)。尝试使用(有符号的)最大正值(0x7fffffff

addi $v0, $zero, 42
li $a1, 0x7fffffff  #32 bit number (maximum 32bit signed positive number)
syscall

根据 OP 的评论,要获得 32 位数字,您可以分两步进行:首先“掷硬币”获得第 32 位,然后随机获得其他 31 位:

    addi $v0, $zero, 42
    move $a2, $zero
    li $a1, 2
    syscall
    bnez $a0, skip
    li $a2, 0x80000000
skip:
    li $a1, 0x7fffffff #31 bit number (maximum 32bit signed positive number)
    syscall
    or $a0, $a0, $a2   # Here $a0 has a 32 bit number
于 2013-03-27T18:59:09.687 回答