MIPS,将寄存器中的值放入RAM?
Posted
技术标签:
【中文标题】MIPS,将寄存器中的值放入RAM?【英文标题】:MIPS, put values from registers into RAM? 【发布时间】:2014-02-08 20:07:55 【问题描述】:我现在正在学习 MIPS 汇编,我想弄清楚如何将值存储到某个特定的 RAM 地址中,
这就是我现在拥有的:
.global main
.text
.set noreorder
.ent main
main:
lw $a0, 0x500
sw $t0, 0($a0) #set up contiguous memory
lui $t0, 0x1122
ori $t0, $t0, 0x3344
lui $t1, 0x2233
ori $t1, $t1, 0x4455
lui $t2, 0x3344
ori $t2 , $t2 , 0x5566
lui $t3, 0x4455
ori $t3 , $t3 , 0x6677
lui $t4, 0x5566
ori $t4 , $t4 , 0x7788
lui $t5, 0x6677
ori $t5 , $t5 , 0x8899
lui $t6, 0x7788
ori $t6 , $t6 , 0x99AA
lui $t7, 0x8899
ori $t7 , $t7 , 0xAABB
lui $t8, 0x99AA
ori $t8 , $t8 , 0xBBCC
lui $t9, 0xAABB
ori $t9 , $t9 , 0xCCDD
nop
loop:
nop
b loop
nop
.end main
我想要设置它,以便我制作的值(0x1122 ... 等)可以存储到连续的 RAM 位置。 我现在的代码总是给我这个奇怪的错误?
CORE-E0003:总线异常。未实现的 RAM 内存访问,来自 0x9d0000d8 处的指令
我使用的是 MPLAB 8.92
【问题讨论】:
【参考方案1】:这个错误没有什么奇怪的......但是你的代码,嗯,是有点奇怪。
再次告诉我你认为这些台词在做什么?
lw $a0, 0x500 #set up contiguous memory
sw $t0, 0($a0)
我看到的是:
lw $a0, 0x500 # Load the *contents* of (invalid) memory address 0x00000500 into register $a0
sw $t0, 0($a0) # Store the (uninitialized) value in $t0 into the address pointed to by $a0
请注意,即使第一行有效,$a0 也不会包含 0x00000500。它包含恰好存储在内存地址 0x00000500 的字的值。
问题是您的代码无法访问 0x00000500。据我了解,MIPS 处理器有不同的模式,正常模式不允许访问该内存段。这就是为什么您会期望出现“未实现的 RAM 内存访问”之类的错误。
我认为您可能必须回到教科书才能找到原始问题的正确答案。但是,如果您的唯一目标是您所说的 - “我制作的值(0x1122 ... 等)可以存储到连续的 RAM 位置。” - 然后就可以了,不需要代码。但可能不是您期望或想要的方式...
.data
.byte 0x00
.byte 0x11
.byte 0x22
.byte 0x33
.byte 0x44
.byte 0x55
.byte 0x66
.byte 0x77
.byte 0x88
.byte 0x99
.byte 0xaa
.byte 0xbb
.byte 0xcc
.byte 0xdd
.byte 0xee
.byte 0xff
【讨论】:
以上是关于MIPS,将寄存器中的值放入RAM?的主要内容,如果未能解决你的问题,请参考以下文章