RISCV和Spike:添加内容并读取值

时间:2016-08-03 19:13:02

标签: gcc assembly add riscv spike

我想在汇编中编写一个简单的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

始终返回0x0000000000000000。为什么?我做错了什么?

1 个答案:

答案 0 :(得分:2)

使用-d启动尖峰时,将在执行任何指令之前打印命令提示符。

反汇编已编译的程序,查看围绕两个指令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

正如评论员彼得指出的那样,程序通常会在最后返回。在main的情况下,它会转到atexit()等。

您可以使用“r”命令查看“pk hello”的完整执行跟踪。