![](/img/trans.png)
[英]How can I resolve RISC-V assembly pseudo instructions to true RISC-V instructions?
[英]How can I fix the length of a string in printf when called from RISC-V assembly?
我想在使用 newlib 在 Spike 上运行的 RISC-V 程序(程序集)上获得一些 output。
我可以用 null 终止的字符串调用 printf 例如(片段)
la a0 msg_
jal printf
.data
msg_ .ascii "MESSAGE IS \n"
.equ len_msg_, . - msg_
将打印出 MESSAGE IS - 但是如何将字符串的长度传递给调用? 我已经尝试过 a1 - a7 并且它似乎不是它们,我也无法将我想要的长度放在堆栈上工作(我可能只是做错了,但无论如何或多或少是第一件事 printf function 似乎要做的是在堆栈上保存大量寄存器,所以我认为这行不通)。
为了增加我的困惑,我使用了编译器资源管理器( https://godbolt.org/z/vscGPG )并且我看不到任何迹象表明任何长度都在通过。 我错过了什么?
你没有。 你 null 终止消息
我对这个程序集不太熟悉,但你想让它发出一个零字节。 其中之一可能是正确的:
msg_ .ascii "MESSAGE IS \n\0"
msg_ .asciz "MESSAGE IS \n"
msg_ .ascii "MESSAGE IS \n"
.byte 0
在任何情况下,您都不需要len_msg_
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.