繁体   English   中英

从 RISC-V 程序集调用时,如何修复 printf 中字符串的长度?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM