【问题标题】:load 32 bit immediate value in RISCV memory在 RISCV 内存中加载 32 位立即数
【发布时间】:2020-10-23 20:03:39
【问题描述】:

我正在尝试在 riscv 内存位置存储一个 32 位立即数。对应的代码是

lui x13,0x12345
addi x13,x13,0x678   // 32 bit value- 12345678
lui x11, 0x1c010     // address location 1c01000
sw x13,x11

我面临的问题是在模拟过程中在地址位置(1c01000)中找不到 32 位值。地址位置仅显示给定数据的 1 个字节(78)

【问题讨论】:

  • 1c01000位置显示的值为78787878
  • 你确定那个地址有(模拟的)内存吗?在更“常见”的地址尝试,例如0x10000000 或 0x10010000,看看它是否按预期工作。否则,声明数据:.data ... label: .word 0 ... .text ... la x11, label; sw x13,(x11)。这样数据应该得到一个有效的内存地址。
  • 另外,您的示例中有一个错字,应为sw x13,(x11) -或- sw x13,0(x11)。你用的是什么汇编器和模拟器?
  • sw x13,(x11) 模拟器使用的是 Gtkwave
  • 我分别检查了内存bank 78个被复制到所有四个bank中,当时还没有完成内存写入。

标签: assembly memory 32-bit riscv instructions


【解决方案1】:

RISC-V 是字节可寻址的。如果只检查该地址的一个字节,显然它将只包含 4 字节值的 1 个字节。

您需要检查该地址处的整个 32 位字,或分别检查 4 字节 1c01000 .. 1c01003。

【讨论】:

  • 我分别检查了内存bank 78个被复制到所有四个bank中,内存写入当时没有完成..我的程序有什么错误吗?
猜你喜欢
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多