我在 64 位 Windows 7 上运行 QtSpim 9.1.7。在Simulator / Settings / MIPS下,我勾选了所有选项(“Bare Machine”、“Accept Pseudo Instructions”、“Enable Delayed Branches”、“Enabled Delayed Loads”、“启用映射 IO”、“加载异常处理程序”)。
如果我使用以下方式存储硬编码值,我可以运行基本代码以在 QtSpim 中添加值ori
:ori $t0,$0,4
现在我想从内存中加载和存储数据,但lw
不工作。
.text
.globl main
main:
lw $t0,num1
.data
num1: .word 4
当我重新初始化并加载上述文件时,我收到以下错误消息:“Immediate value is too large for field:”
如果我然后尝试单步执行代码,我会到达 [00400024] 行。越过那条线,我收到以下错误消息:“PC=0x00400024 发生异常”/“数据/堆栈读取中的错误地址:0x00000000”
作为参考,我的代码被解析为:
User Text Segment [00400000]..[00440000]
[00400000] 8fa40000 lw $4, 0($29) ; 183: lw $a0 0($sp) # argc
[00400004] 27a50004 addiu $5, $29, 4 ; 184: addiu $a1 $sp 4 # argv
[00400008] 24a60004 addiu $6, $5, 4 ; 185: addiu $a2 $a1 4 # envp
[0040000c] 00041080 sll $2, $4, 2 ; 186: sll $v0 $a0 2
[00400010] 00c23021 addu $6, $6, $2 ; 187: addu $a2 $a2 $v0
[00400014] 0c100009 jal 0x00400024 [main] ; 188: jal main
[00400018] 00000000 nop ; 189: nop
[0040001c] 3402000a ori $2, $0, 10 ; 191: li $v0 10
[00400020] 0000000c syscall ; 192: syscall # syscall 10 (exit)
[00400024] 8c080000 lw $8, 0($0) [num1] ; 4: lw $t0,num1
我首先想到0($0)
的肯定不是num1
. 我的数据声明不正确吗?如果是这样,我做错了什么?
我不知道它是否相关,但我得到以下la
和li
命令的语法错误(当我试图找到替代方法时lw
):
la $a0,num1
li $t0,4