首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RiscV汇编程序-使用RV32I的“slli”命令进行实验

RiscV汇编程序-使用RV32I的“slli”命令进行实验
EN

Stack Overflow用户
提问于 2017-05-08 22:38:48
回答 2查看 2K关注 0票数 3

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

程序集源文件是

代码语言:javascript
复制
.text
slli   x31,x31,63

当我为32位目标组装时,我获得了以下机器代码输出。

代码语言:javascript
复制
 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

代码语言:javascript
复制
 ./riscv32-unknown-elf-as -L -warn test.s
  1. 创建列表文件 ./riscv32 32-未知精灵-objdump -h -l -M数值,无别名-S -d -EL a.out

如果在汇编程序中设置-warn级别,则输出的较低行如下所示。

代码语言:javascript
复制
Disassembly of section .text:

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

我想知道为什么汇编程序采用这种方法,而RV32I的“slii”的上7位不应该总是卡在0吗?

EN

回答 2

Stack Overflow用户

发布于 2017-05-12 14:34:01

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

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

票数 1
EN

Stack Overflow用户

发布于 2019-11-15 06:32:04

只是一个简短的评论:

我可以从RV32I的130页和RV64I的131页上的规范(20190608版本-基本批准)中看出,SLLI指令的编码应该是不同的。

移位量的RV32I被限制在5位,而对于RV64I,这被扩展到6位。因此,根据所使用的汇编程序,所产生的二进制文件和显示的警告或错误应该存在差异。

约阿希姆问候

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

https://stackoverflow.com/questions/43858314

复制
相关文章

相似问题

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