RISCV 和 Spike:添加一些东西并读取值
RISCV and Spike: Add something and read value
我想用汇编写一个简单的RISCV程序,然后测试一下。该程序应该简单地将一个值加载到寄存器中并向其添加一个值:
.file "hello.c"
.text
.align 2
.globl main
.type main, @function
main:
li a0, 2
add a0, a0, 7
.size main, .-main
.ident "GCC: (GNU) 5.3.
然而,当我输入:
riscv64-unknown-elf-gcc hello.s
spke -d pk a.out
reg 0 a0
它总是 returns 0x0000000000000000。为什么?我做错了什么?
当您使用 -d 启动 spike 时,在执行任何指令之前打印命令提示符。
反汇编编译后的程序,查看包含两条指令的 main() 子例程的所有指令。
riscv64-unknown-elf-objdump -d hello | less
Disassembly of section .text:
0000000000010000 <_ftext>:
10000: 00002197 auipc gp,0x2
...
0000000000010164 <main>:
10164: 00200513 li a0,2
10168: 00750513 addi a0,a0,7
我告诉spike到运行main的第一条指令,然后单步执行,然后显示寄存器a0:
$ spike -d pk foo
Note: Hitting enter is the same as: run 1
: until pc 0 0x0000000000010164
: pc 0
0x0000000000010164
: run 1
core 0: 0x0000000000010164 (0x00200513) li a0, 2
: reg 0 a0
0x0000000000000002
: run 1
core 0: 0x0000000000010168 (0x00750513) addi a0, a0, 7
: reg 0 a0
0x0000000000000009
正如评论者 Peter 指出的那样,程序通常 returns 最后。在 main 的情况下,它会落入 atexit() 等
可以使用"r"命令查看"pk hello"的完整执行轨迹。
我想用汇编写一个简单的RISCV程序,然后测试一下。该程序应该简单地将一个值加载到寄存器中并向其添加一个值:
.file "hello.c"
.text
.align 2
.globl main
.type main, @function
main:
li a0, 2
add a0, a0, 7
.size main, .-main
.ident "GCC: (GNU) 5.3.
然而,当我输入:
riscv64-unknown-elf-gcc hello.s
spke -d pk a.out
reg 0 a0
它总是 returns 0x0000000000000000。为什么?我做错了什么?
当您使用 -d 启动 spike 时,在执行任何指令之前打印命令提示符。
反汇编编译后的程序,查看包含两条指令的 main() 子例程的所有指令。
riscv64-unknown-elf-objdump -d hello | less
Disassembly of section .text:
0000000000010000 <_ftext>:
10000: 00002197 auipc gp,0x2
...
0000000000010164 <main>:
10164: 00200513 li a0,2
10168: 00750513 addi a0,a0,7
我告诉spike到运行main的第一条指令,然后单步执行,然后显示寄存器a0:
$ spike -d pk foo
Note: Hitting enter is the same as: run 1
: until pc 0 0x0000000000010164
: pc 0
0x0000000000010164
: run 1
core 0: 0x0000000000010164 (0x00200513) li a0, 2
: reg 0 a0
0x0000000000000002
: run 1
core 0: 0x0000000000010168 (0x00750513) addi a0, a0, 7
: reg 0 a0
0x0000000000000009
正如评论者 Peter 指出的那样,程序通常 returns 最后。在 main 的情况下,它会落入 atexit() 等
可以使用"r"命令查看"pk hello"的完整执行轨迹。