【问题标题】:assembly: Invalid operands error using ".equ" with a subtraction of 2 character literals程序集:使用“.equ”的无效操作数错误减去 2 个字符文字
【发布时间】:2019-04-28 04:14:13
【问题描述】:

我在尝试汇编代码时遇到以下汇编错误:

Error: invalid operands (*UND* and *UND* sections) for `-' when setting `UPPER_CONVERSION'

我正在使用以下命令进行组装:

as -32 toupper.s -o toupper.o

我的代码(我指的是this书的从低到高的转换代码):

.section .text

###CONSTANTS##
#The lower boundary of our search
.equ LOWERCASE_A, ’a’
#The upper boundary of our search
.equ LOWERCASE_Z, ’z’
#Conversion between upper and lower case
.equ UPPER_CONVERSION, ’A’ - ’a’                  ## error on this line

有关使用$UPPER_CONVERSION 作为立即数的完整代码,请参阅此问题的第一个版本。但以上是产生汇编错误消息的 MCVE,因此不能用作定义UPPER_CONVERSION = 65 - 97 = -32


我看到this的问题,我尝试了解决方案,但我认为它不相关(我可能在这里错了)。

【问题讨论】:

    标签: assembly x86 gnu-assembler


    【解决方案1】:

    您的源代码中有一些非 ASCII 引号字符
    在 GNU/Linux 上将您的 ’A’ - ’a’ 粘贴到 hd(又名 hexdump -C)显示了这一点:

    00000000  e2 80 99 41 e2 80 99 20  2d 20 e2 80 99 61 e2 80  |...A... - ...a..|
    00000010  99 0a                                             |..|
    

    所以问题是你的引号是 3 字节的 UTF-8 序列,而不是 ASCII 单引号。

    重新输入为

    .equ UPPER_CONVERSION, 'A' - 'a' 
    

    生成一个可以很好地组合的文件。 (仅包含那一行。我没有尝试您的整个文件。)

    【讨论】:

    • 谢谢@peter 这是一个很好的解释
    • 如果书籍或 pdf 包含源代码并且某些美化者将直引号更改为某种印刷引号,则会发生这种情况。我从 pdf 中复制了相同的文本,并得到了相同的排版 引号。在 pdf 中,它们实际上看起来像 ´。我会怀疑从 pdf 复制的源代码中的所有引号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2015-12-23
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多