问题描述
我想使用 newlib 在 Spike 上的 pk 之上运行的 RISC-V 程序(程序集)上获得一些输出。
la a0 msg_
jal printf
.data
msg_ .ascii "MESSAGE IS \n"
.equ len_msg_,. - msg_
会打印出 MESSAGE IS - 但是如何将字符串的长度传递给调用?我试过 a1 - a7 并且它似乎不是它们,我也不能把我想要的长度放在堆栈上(我可能只是做错了,但无论如何更多printf 函数似乎做的第一件事是在堆栈中保存大量寄存器,所以我认为这行不通)。
更让我困惑的是,我使用了编译器资源管理器 (https://godbolt.org/z/vscGPG),但我看不到任何长度的任何东西被传递的迹象。我错过了什么?
解决方法
你没有。你空终止 msg
我对这个程序集不是很熟悉,但是你想让它发出一个零字节。其中之一可能是正确的:
msg_ .ascii "MESSAGE IS \n\0"
msg_ .asciz "MESSAGE IS \n"
msg_ .ascii "MESSAGE IS \n"
.byte 0
在任何情况下你都不需要len_msg_