小编Kra*_*011的帖子

RISC-V 使用 LUI / ADDI 在寄存器中生成 -1 / 0xFFFFFFFF?

我正在学习如何为 RISC-V 处理器编写代码。我想将一个值存储0xFFFFFFFF到内存/寄存器中。

addi我可以通过在指令前面添加 来扩展指令的 12 个立即位lui,如下所示:

lui t0, 0xFFFFF
addi t0, t0, 0x7FF
Run Code Online (Sandbox Code Playgroud)

但结果会是这样的0xFFFFF7FF

那么,我怎样才能产生这个价值呢?

assembly riscv

5
推荐指数
1
解决办法
2744
查看次数

RISCV:如何计算分支指令?

我试图了解现代 CPU 的工作原理。我专注于 RISC-V。有几种类型的分支:

  • BEQ
  • BNE
  • BLT
  • BGE
  • BLTU
  • BGEU

我使用金星模拟器来测试这个,我也在尝试模拟它,到目前为止它工作得很好,但我不明白,分支是如何计算的。从我读到的内容来看,ALU 单元只有一个信号输出—— ZERO(除了它的数学输出),只要输出为零,它就处于活动状态。但是,我如何仅根据ZERO输出来确定是否应该采用分支?它们是如何计算的?

示例代码:

addi t0, zero, 9
addi t1, zero, 10
blt t0, t1, end
end:
Run Code Online (Sandbox Code Playgroud)

分支示例:

BEQ- 减去 2 个数字,如果ZERO是活动的,则分支

BNE- 减去 2 个数字,如果ZERO不是活动的,则分支

BLT- 在这里我有点困惑;我应该减去然后查看符号位,还是什么?

BGE/ BGEU- 以及如何区分这些?我应该使用哪些数学指令?

谢谢

cpu cpu-architecture alu riscv riscv32

5
推荐指数
1
解决办法
3711
查看次数

在 macOS 上检查 ELF 文件并获取二进制文件

我有一个 ELF 文件,我想从中获取我的代码的hex或文件。bin在终端中,如果 a do a file main,这是我的文件,它会显示:

main: ELF 32-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, not stripped
Run Code Online (Sandbox Code Playgroud)

据我所知,objdump在 macOS 上不起作用,并且otool -l main出现以下错误:

llvm-objdump: 'main': Object is not a Mach-O file type.
Run Code Online (Sandbox Code Playgroud)

ELF 文件是使用以下命令创建的:

riscv-none-gcc/8.2.0-2.1-20190425-1021/bin/riscv-none-embed-gcc --specs=nosys.specs main.c -o main
Run Code Online (Sandbox Code Playgroud)

那么有没有办法做到呢?

多谢

binary macos elf otool binutils

4
推荐指数
1
解决办法
6989
查看次数

标签 统计

riscv ×2

alu ×1

assembly ×1

binary ×1

binutils ×1

cpu ×1

cpu-architecture ×1

elf ×1

macos ×1

otool ×1

riscv32 ×1