【问题标题】:Can't declare .data in inline assembly不能在内联汇编中声明 .data
【发布时间】:2017-03-15 12:28:05
【问题描述】:

您好,我有一个问题,我似乎无法声明 .data 。我用我的代码尝试了各种不同的东西,但它似乎总是在这部分中断

    asm(
       ".data\n"
       ".file:  .ascii \"/dev/mem\\000\"\n"
    );

我还可以删除 .data 之后的任何信息,它仍然会在“.data”处中断。这是在带有 C 上的内联汇编的树莓派 2 上完成的。如果其余代码相关,请告诉我,但我很确定它不是。感谢您的帮助!

编辑:抱歉,我忘了包含错误消息

"错误:'方法名称在这里'的 .size 表达式不会计算为常量

【问题讨论】:

  • 使用内联汇编基本上将全局变量声明为字符数组的原因是什么?这可以很容易地使用全局变量 char file[] = "/dev/mem"; 完成
  • 至于您的问题,错误信息与您显示的代码不匹配。错误消息提到 .size 不在您的代码中。另外,您确定要为标签使用前导点吗?
  • 最后,您使用的是什么编译器?哪个版本的?
  • 不应该是.section .data 而不仅仅是.data吗?
  • 我的程序中根本没有提到“.size”,这就是为什么错误消息让我感到困惑并且编译器是 gcc (Debian 4.6.3-14+rpi1)跨度>

标签: c assembly raspberry-pi raspbian inline-assembly


【解决方案1】:

您不要在内联汇编结束之前恢复该部分,并且 gcc 生成的代码依赖于内联汇编而不更改当前部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2012-10-20
    • 2017-06-09
    • 2020-08-24
    • 1970-01-01
    相关资源
    最近更新 更多