【问题标题】:How to implement the printf function in risc-v? [closed]如何在risc-v中实现printf函数? [关闭]
【发布时间】:2019-06-09 16:26:01
【问题描述】:

这是我在 RISC-V 汇编中尝试做的 C 表示:

printf ("x=%d\n", x);

【问题讨论】:

  • 您尝试调用 printf 函数,而不是实现它。你能相应地edit你的问题标题吗?实际上有两个主要问题。 1/ 根据 risc-v calling conventions 传递参数和 2/ 使用 libc stackoverflow.com/questions/47088290/… 链接您的代码。尝试解决这些问题并提出更准确的问题。
  • 一般来说,这个网站上的问题应该表现出一些努力。像这样的问题,只是询问如何做某事而不显示您自己的任何研究或代码,是不受欢迎的。您可能需要查看帮助文件。
  • 您是否要将整数转换为 ASCII 十进制并打印它而不调用printf?如果是这样,您正在运行什么操作系统?您需要某种系统调用来输出最终的字符串,或者自己将字符存储到视频 RAM...

标签: c assembly mips riscv


【解决方案1】:

https://godbolt.org/ 是一个有趣的网站。如果你粘贴c代码,它可以转移到其他的,比如RISC-V汇编。示例 c 代码可从 menie.org/georges/embedded/small_printf_source_code.html 获得。它确实有效。祝你好运。

【讨论】:

    【解决方案2】:

    这里是一个很简单的printf(实际上只有整数和字符串,没有高级格式化)

    https://godbolt.org/z/sgMVs7

    这不是我的代码——它是来自 atolic 工作室的小 ptinf。但这是一个很好的基础,可以实现一些简单但更体面的东西。

    【讨论】:

    • 您忘记在链接中启用优化。这是一个装配问题;链接中的一堆废话 asm 是一个糟糕的建议,实际上是将其复制到 asm 源文件中。 (通过添加-O3-Os 显然很容易修复,但这很重要)。
    • @petercordes 实际上任何人都可以添加所需的选项。但问题是关于printf,这是一个非常简单的问题。我自己使用修改版
    • 顺便说一句,在 asm 中实现 print 是不明智的。
    • 当然,任何人都可以在打开上一个链接后添加选项。但是您是第一个选择发布该链接的人。包括选择包含一个可能无用的 actual printf 实现,而不仅仅是 %d 转换。正如你所说,硬编码它是一个%d 转换的事实并只写一个print_integer 函数更有意义。对于 OP 在这个不清楚的无法回答的问题中使用的任何未指定的操作系统。
    • @P__J__ 然后发表评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2017-01-22
    • 2017-01-07
    • 2018-05-16
    相关资源
    最近更新 更多