程序集:使用减去 2 个字符文本的 ".equ"时出现无效操作数错误



当我尝试汇编代码时,我遇到以下汇编程序错误:

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

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

as -32 toupper.s -o toupper.o

我的代码(我指的是本书中的下部到上层转换代码(:

.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


看到了这个问题,我尝试了解决方案,但我认为它无关(我在这里可能是错的(。

源代码中有一些非 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' 

结果生成一个组装良好的文件。 (仅包含那一行。 我没有尝试您的整个文件。

相关内容

  • 没有找到相关文章

最新更新