首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RISCV超出范围

RISCV超出范围
EN

Stack Overflow用户
提问于 2021-06-01 22:49:32
回答 1查看 185关注 0票数 0

我正在尝试学习RISCV汇编。我正在努力学习ISA,并实现一些R型、S型指令。但是,每当我尝试运行sw和lw指令时。它总是给我超出范围的错误地址,我不明白为什么。这是一个示例:

代码语言:javascript
复制
lw  a0,40(zero)
addi    a1,zero,1
addi    a2,zero,1
beq a0,a1,SAVE
LOOP:
addi    a1,a1,1
addi    t1,a1,0
addi    t2,a2,0
jal ra,MUL
add a2,zero,t0
bne a1,a0,LOOP
SAVE:
sw  a2,44(zero)
jal x0,DONE
MUL:
andi    t0,t0,0
LOOP_MUL:
add t0,t0,t2
addi    t1,t1,-1
bne t1,zero,LOOP_MUL
jalr    zero,ra,0
DONE:
add zero,zero,zero

我得到一些类似这样的错误: D:\ctmt\BTL_RISCV\riscv1.asm第2行错误:0x00400004处的运行时异常:地址超出范围0x00000004。如果有人能给我解释一下为什么会发生这个bug,我将非常感激。

EN

回答 1

Stack Overflow用户

发布于 2021-06-01 22:58:59

地址超出范围适用于加载和存储指令。它告诉你指令的地址(因为这是硬件看到/知道的),以及你试图访问的地址。通常这是因为基址寄存器中的指针值不正确,但有时,指针值接近某物的末尾,立即值使其超过末尾。

你应该查看你正在使用的模拟器或环境的内存映射,它可能会告诉你哪些内存区域是合法的-它也可能支持重新配置内存映射。低内存(从0到2048左右的值)不能保证在许多系统上是合法的内存位置,但有时可以配置为合法的小内存模型,例如在嵌入式系统上。低内存被配置为非法的一个原因是捕获空指针取消引用,这是一个常见的软件错误(使用空指针)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67791105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档