сборка: ошибка недопустимых операндов при использовании ".equ" с вычитанием 2-х символьных литералов - PullRequest
1 голос
/ 28 апреля 2019

Я получаю следующую ошибку ассемблера, когда пытаюсь собрать свой код:

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


Я видел этот вопрос, я попробовалрешение, но я думаю, что это не связано (я могу ошибаться).

1 Ответ

4 голосов
/ 28 апреля 2019

В вашем исходном коде есть несколько символов ASCII без кавычек :
вставка ’A’ - ’a’ в hd (он же hexdump -C) в GNU / Linux показывает это:

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' 

в результате получается файл, который прекрасно собирается. (Содержит только одну строку. Я не пробовал весь ваш файл.)

...