Fav*_*las 1 mips mars-simulator
我正在使用MARS MIPS模拟器并使用Digital Lab Sim.
我的代码的目的是在Digital Lab Sim上以十六进制显示数字0到15.
我收到了这个错误
Runtime exception at 0x00400024: store address not aligned on word boundary 0xffff0011
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码:
.data
digitos: .word 0x3F,0x6,0x5B,0x4F,0x66,0x6D,0x7D,0x7,0x7F,0x67,0x77,0x7F,0x39,0x3F,0x79,0x71
contador: .word 16
.text
main:
la $t0,0xFFFF0011
la $a0,contador
lw $t1,0($a0)
li $t9,0
la $t2, digitos
loop:
lw $t3,0($t2)
sw $t3, 0($t0)
addi $t9,$t9,1
addi $t2,$t2,4
blt $t9,$t1,loop
Run Code Online (Sandbox Code Playgroud)
该指令la $t0,0xFFFF0011是由错误负责的指令.0xFFFF0011控制左侧LED,0xFFFF0010控制右侧LED.
这是有趣的部分.如果我使用0xFFFF0010代码按预期工作,但如果我使用0xFFFF0011它不起作用.
我究竟做错了什么?
你确定错误发生在那条线上吗?我认为错误实际上发生在这里:
sw $t3, 0($t0)
Run Code Online (Sandbox Code Playgroud)
问题是你试图将一个单词(因为你正在使用sw)存储到一个非字对齐的地址.0xFFFF0011不是字对齐的.0xFFFF0010工作原因是因为它是字对齐的.
一个字长4个字节,因此有效的字对齐地址为0xFFFF0010,0xFFFF0014,0xFFFF0018等.其间的任何内容都不是字对齐的.
您应该能够通过将其更改sw为sb:
sb $t3, 0($t0)
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为存储一个字节不需要字对齐的地址.
编辑:为了澄清,单词对齐的地址是可被4整除的地址.