程序集:使用“.equ”减去2个字符文字的无效操作数错误

问题描述 投票:1回答:1

我尝试汇编代码时遇到汇编程序错误:

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 gas
1个回答
4
投票

您的源代码中有一些非ASCII引号字符: 在GNU / Linux上将你的’A’ - ’a’粘贴到hd(aka 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' 

导致文件组装得很好。 (只包含那一行。我没有尝试你的整个文件。)

© www.soinside.com 2019 - 2024. All rights reserved.