В чем разница между «добавить al, 0» и «добавить al, 0»?

Итак, я читал код сборки для учебных целей и наткнулся на эти две инструкции:

add    register, value
add    register, 'value'     ; Where the value is now in single quotes

В чем разница между ними?

Пока меня не разозлили, если это окажется дубликатом. Я спросил здесь, так как я точно не знаю, что в Google, чтобы ответить на этот вопрос.


person UndercoverCoder    schedule 04.01.2018    source источник
comment
value — фактическое значение. 'value' - это символ, представляющий значение ASCII (под значением в вашем сообщении я предполагаю, что вы имеете в виду одну цифру). Итак, 0 равно нулю. '0' — это значение 0x30 (значение ASCII символа '0').   -  person lurker    schedule 04.01.2018
comment
Вы пытались использовать objdump, чтобы увидеть, в чем разница?   -  person fuz    schedule 04.01.2018
comment
@lurker - Ааа, я так и предполагал. Просто хотел быть более уверенным. Спасибо :)   -  person UndercoverCoder    schedule 04.01.2018
comment
Лучшим источником информации о синтаксисе (обычно) является используемая документация по ассемблеру, например NASM допускает три способа кавычек: '0' "0" `0` — одинарные и двойные кавычки — это одно и то же, заключительная строка (т. символов, то есть `\n` будет компилироваться как значение 10. Другие ассемблеры могут сильно отличаться по своему синтаксису. (и если вы не уверены, проверьте полученный машинный код с помощью objdump или используйте файл листинга из ассемблера)   -  person Ped7g    schedule 04.01.2018


Ответы (1)


В зависимости от ассемблера, заключение символа в одинарные кавычки может потребовать, чтобы компилятор использовал код ASCII этого символа, который для нулевой цифры будет равен 48 в десятичном виде или 0x30 в шестнадцатеричном формате. Я предполагаю, что это намерение здесь. Другие ассемблеры используют одинарные кавычки как часть синтаксиса для указания значений в разных системах счисления (например, h'A5' для значения 0xA5 в шестнадцатеричном формате); Я не уверен, будут ли ассемблеры, использующие такую ​​нотацию, интерпретировать значение в кавычках без префикса как:

  1. номер в базе по умолчанию
  2. число с основанием десять, даже если по умолчанию это что-то другое
  3. код символа или
  4. синтаксическая ошибка

Любая из этих интерпретаций может показаться правдоподобной, и я не сильно удивлюсь, если где-нибудь найдется какой-нибудь ассемблер, который обработает ее таким образом.

Я предполагаю, что намерение кода, скорее всего, состоит в том, чтобы принять значение ASCII цифры ноль, и окружающие инструкции, вероятно, прояснят это, но, не видя контекста, я не могу быть уверен.

person supercat    schedule 04.01.2018