gpt4 book ai didi

assembly - RiscV 汇编器 - 试验 RV32I 的 'slli' 命令

转载 作者:行者123 更新时间:2023-12-02 20:17:05 34 4
gpt4 key购买 nike

我一直在使用 RV32I 和 RV64I 汇编器在 RiscV 上测试以下代码。

汇编源文件是

.text
slli x31,x31,63

当我针对 32 位目标进行汇编时,我获得以下机器代码输出。

 03ff9f93                slli    x31,x31,0x3f

抛出警告,但指令字的高 7 位似乎未“保留”。我希望进行快速手工组装01ff9f93。我意识到使用立即操作数值 63 是不正确的,但汇编器无论如何都会写入 63 值。这似乎不是正确的操作。

避免此潜在问题的一种方法是设置--fatal-warnings 的汇编器命令行选项。并且构建过程将停止。但在 -warn 级别,“slli”命令的 32 个目标的 7 个高位似乎可以被覆盖,您可以创建合法的 RV64I 指令。

为了保持此测试的构建简单,我执行了以下操作。

  1. 已创建源文件 - “test.s”
  2. 将源文件复制到 RiscV 32 位版本的 bin 目录中。那么,

    ./riscv32-unknown-elf-as -L --fatal-warnings test.s

 ./riscv32-unknown-elf-as -L -warn test.s
  • 创建列表文件

    ./riscv32-unknown-elf-objdump -h -l -M 数字,无别名 -S -d -EL a.out

  • 如果您设置,输出的下面几行将如下所示- 汇编器中的警告级别。

    Disassembly of section .text:

    00000000 <.text>:
    0: 03ff9f93 slli x31,x31,0x3f

    我想知道为什么汇编器采用这种方法,并且 RV32I 的“slii”的高 7 位不应该始终停留在 0 吗?

    最佳答案

    这个问题被认为是一个错误,汇编代码已被更改和合并。您可以在 riscv-next 分支上的 GitHub riscv/riscv-binutils-gdb 中查看详细信息。在“gas”(汇编器)中,严重性级别从“警告”更改为“错误” - 防止创建任何非法的 RV32I 机器代码(03ff9f93 不是 RV32I 上 slli 命令的合法机器代码)。

    对于 osgx - 我仍然对您的评论感兴趣,即没有单独的 32/64 位编码器。你能澄清一下吗?

    关于assembly - RiscV 汇编器 - 试验 RV32I 的 'slli' 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858314/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com