You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RISC-V中sw指令无法存储内存地址的原因排查求助

问题分析与解决

你的代码中sw指令无法写入内存的核心原因是RISC-V的sw(字存储)指令要求目标地址必须4字节对齐,具体细节如下:

代码中的地址对齐问题

先看你的汇编代码:

.data
    test: .string "Hello"
    test1: .string "Guys"

.text
    la s0,test
    la s1,test1
    addi t0,s0,2
    sw t0,0(s1)
  • .string "Hello"会占用6字节(5个字符+1个字符串终止符\0)
  • test1的起始地址是test + 6,这个地址的低两位二进制为10,不满足4字节对齐(地址模4需等于0)的要求
  • sw指令执行时,目标地址是s1指向的test1起始地址,属于不对齐地址,会触发RISC-V的地址对齐异常,导致指令执行失败,因此看不到内存写入操作

为什么li加载数值能成功存储

你用li加载相同数值能成功存储,是因为测试时你大概率把数值写入了4字节对齐的内存地址(比如test的起始地址,或其他符合对齐要求的区域),而非test1的不对齐地址。如果把li加载的数值写入test1的地址,同样会触发对齐异常,无法完成写入。

替代方案

如果需要在不对齐地址存储数据,可以使用不需要严格4字节对齐的指令:

  • sb:字节存储,可在任意地址写入1字节数据
  • sh:半字存储,可在2字节对齐的地址写入2字节数据

内容的提问来源于stack exchange,提问作者Nicola Papini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:18:37