【发布时间】:2019-11-09 23:05:11
【问题描述】:
我目前正在努力研究如何通过树莓派在 ARM 程序集中设置负数/有符号数据类型。我不是指加载和存储有符号整数,而是如何在“.data”中声明一个有符号半字。编译后,我会收到以下消息:
Error: unknown pseudo-op: '.shalfword'
file: third.s
.section .data
a:.shalfword -2
【问题讨论】:
-
如果您使用的是 GNU Assembler(您没有提及),请研究此 Pseudo-Ops。在高级语言意义上,汇编语言中没有“变量”。无论如何,从外观上看,您要声明的是一个常量,而不是变量。
-
使用
gcc并查看它在文件中为short a = -2;发出的内容(即作为全局变量)。.something绝对不会在名称中签名或未签名,只是宽度。 -
@artlessnoise:在这种特定情况下,我们需要一个全局(静态存储)的初始化程序,而不是返回值。再次阅读我的评论:我说过将
short a = -2;放在全局范围内。同意,如果您想超越这一点,还编写一个加载它的函数,这可能会得到优化。 (但是你可以让你的全局变量volatile,并且让它们不是const可能就足够了) -
@PeterCordes 感谢您的编辑。发表评论后不久,我意识到了全球/本地的差异。我认为编译器不会尝试“可读”,并且有“结构化汇编程序”伪操作可以让程序更容易理解。然而,我最终得到了一个与我在没有编译器的情况下创建的原始示例非常接近的godbolt示例。