Почему использование LEA с обратными операндами приводит к несоответствию размера операнда, а не к синтаксической ошибке в GAS? - PullRequest
0 голосов
/ 12 января 2020

Я использую GNU as на компьютере с архитектурой x86.

Я знаю, что LEA работает только как lea <mem>, <reg32> в синтаксисе AT & T с назначением регистра и режимом адресации памяти как источник lea 100(%eax), %eax собирается нормально, например.

Но почему GAS называет это несоответствием size в своем сообщении об ошибке при обращении операндов вместо некоторой синтаксической ошибки?

lea %eax, 100(%eax)

Когда я это понимаю, я получаю operand size mismatch for `lea'.

1 Ответ

1 голос
/ 12 января 2020

Технически, синтаксическая ошибка означала бы, что текст не может быть распознан и проанализирован в соответствии с используемой грамматикой.

Кажется, что ошибка размера - после анализа.

Вообще говоря, синтаксические ошибки (ошибки при синтаксическом анализе / распознавании) обеспечивают худшее взаимодействие с пользователем, чем ошибки semanti c (после синтаксического анализа).

При сбое анализа остальная часть текста отображается в сомнение (хотя в сборке перезапуск разбора может быть простым, как сброс строки и переход к следующей строке). Когда синтаксический анализ завершается неудачно, мы также мало знаем о фактической ошибке.

Учитывая выбор между ограничением чего-либо посредством грамматики и ограничением чего-либо с помощью проверки semanti c, последний обычно предпочтительнее, так как он (и то, и другое позволяет продолжить анализ, а затем) предоставляет возможность улучшить сообщения об ошибках.

В этом конкретном случае сообщение об ошибке оставляет желать лучшего - так что, вероятно, это общее сообщение об ошибке используется во многих местах.

...