首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当从RISC-V程序集调用时,如何在printf中确定字符串的长度?

当从RISC-V程序集调用时,如何在printf中确定字符串的长度?
EN

Stack Overflow用户
提问于 2021-01-10 22:54:17
回答 1查看 677关注 0票数 0

我想要获得一些输出的RISC-V程序(程序集)运行在pk之上的Spike使用newlib。

我可以用空终止字符串(例如(代码段))调用printf。

代码语言:javascript
运行
复制
la a0 msg_
jal printf

.data
msg_ .ascii "MESSAGE IS \n"
.equ len_msg_, . - msg_

将打印出消息是--但是如何将字符串的长度传递给调用?我尝试过a1 - a7,它似乎不是它们,我也不能让我想要的堆栈的长度工作(我可能只是做错了这件事,但无论如何,printf函数似乎要做的第一件事就是在堆栈上保存大量寄存器,所以我不认为它会起作用)。

更让我困惑的是,我使用了编译器资源管理器( Compiler,https://godbolt.org/z/vscGPG),没有看到任何长度的信息正在传递。我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-10 23:50:28

你没有。你空终止msg

我不太熟悉这个程序集,但是您想让它发出一个零字节。其中之一可能是正确的:

代码语言:javascript
运行
复制
msg_ .ascii "MESSAGE IS \n\0"

msg_ .asciz "MESSAGE IS \n"

msg_ .ascii "MESSAGE IS \n"
     .byte  0

在任何情况下你都不需要len_msg_

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65659368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档