我尝试通过更改以下文件中的尖峰 isa 模拟器来扩展尖峰 isa 模拟器中的现有寄存器集,如屏幕截图所示。
在此之后,我在 riscv.h 中进行了更改
我还增加了文件 tc-riscv.c 中的寄存器结构长度并更改了 NGPR 的值。
在此之后,我编写了自己的 asm 代码来将数据从源寄存器移动到目标寄存器并打印目标寄存器的值。代码片段附在下面。
.file "asm_test.c"
.section .rodata
.align 3
.LC0:
.string " %d\n"
.text
.align 2
.globl main
.type main, @function
main:
add sp,sp,-32
sd ra,24(sp)
sd s0,16(sp)
add s0,sp,32
li a5,5
sw a5,-20(s0)
sw zero,-24(s0)
lw a5,-20(s0)
sw a5,-24(s0)
lw a1,-24(s0)
lui p0,%hi(.LC0)
add a0,p0,%lo(.LC0)
call printf
mv p0,zero
mv a0,p0
ld ra,24(sp)
ld s0,16(sp)
add sp,sp,32
jr ra
.size main, .-main
.ident "GCC: (GNU) 5.2.0"
我通过以下命令 riscv64-unknown-elf-gcc -o asm_test asm_test.s 编译了这个 asm 代码
一旦我运行此代码,我就会得到以下分段错误
prashantravi@ubuntu:~/rocket-chip$ 尖峰 riscv/bin/pk asm_test z 0000000000000000 ra 00000000000105d8 sp 00000000fefff500 gp 000000000001d6d0 tp 00000000000000000 t0 0000000000000001 t1 000000000001d018 t2 0000000000000000 s0 00000000fefffb50 s1 0000000000000000 a0 0000000000000000 a1 00000000fefff3b0 a2 00000000fefff5d0 a3 000000000000000a a4 0000000000002889 a5 000000000001a000 a6 000000000001c6d0 a7 00000000fefff650 s2 00000000000004e0 s3 000000000001c530 s4 00000000000000000 s5 0000000000000000 s6 000000000001bf50 s7 0000000000000000 s8 000000000001a650 s9 0000000000000000 sA 0000000000000000 sB 0000000000000000 t3 00000000000000000 t4 0000000000000000 t5 0000000000000000 t6 0000000000000000 个人计算机 0000000000010478 va 00000000000004e0 insn ffffffff sr 8000000000003008 用户加载段错误@ 0x00000000000004e0
如果我在这里走错了方向,请提供帮助。