Целочисленный перелив в газе

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

addb $0xFFFF,      %bl
addw $0xFFFFFF,    %bx
addl $0xFFFFFFFFF, %ebx
addq $0xFFFFFFFFF, %rbx

И бег $ as file.s передает мне следующие предупреждения и ошибки:

file.s: Assembler messages:
file.s:5: Warning: 16777215 shortened to 65535
file.s:6: Warning: 68719476735 shortened to 4294967295
file.s:7: Error: operand type mismatch for `add'

Вот несколько вопросов, связанных с этим:

  • bl: Почему не выводится предупреждение при попытке добавить 0xFFFF в bl? Он сокращается до FF после сборки, но для этого нет предупреждающего сообщения.
  • bx: 65535 или же 0xFF FFэто максимальное 16-битное значение, так что это имеет смысл. Для этого есть предупреждение.
  • EBX: 4294967295 или же 0xFF FF FF FFэто наибольшее 32-битное значение, поэтому это имеет смысл. Для этого есть предупреждение.
  • rbx: здесь меня удивило то, что при переполнении возникает ошибка, а не предупреждение. Почему это одна ошибка?

0 ответов

Другие вопросы по тегам