我正在学习如何为 RISC-V 处理器编写代码。我想将一个值存储0xFFFFFFFF到内存/寄存器中。
addi我可以通过在指令前面添加 来扩展指令的 12 个立即位lui,如下所示:
lui t0, 0xFFFFF
addi t0, t0, 0x7FF
Run Code Online (Sandbox Code Playgroud)
但结果会是这样的0xFFFFF7FF。
那么,我怎样才能产生这个价值呢?
我试图了解现代 CPU 的工作原理。我专注于 RISC-V。有几种类型的分支:
BEQBNEBLTBGEBLTUBGEU我使用金星模拟器来测试这个,我也在尝试模拟它,到目前为止它工作得很好,但我不明白,分支是如何计算的。从我读到的内容来看,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- 以及如何区分这些?我应该使用哪些数学指令?
谢谢
我有一个 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)
那么有没有办法做到呢?
多谢