我试图让 MIPS 生成 32 位随机整数。我正在尝试使用以下代码,但在运行程序时会出错。
addi $v0, $zero, 42
li $a1, 4294967295 #32 bit number
syscall
我正在使用火星模拟器。该程序汇编没有任何错误。执行上述系统调用时会出现问题。我真的很感激任何帮助。
我认为问题在于您提供的最大数量(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