Целочисленный перелив в газе
Я не уверен, что это вопрос сборки или больше вопрос газа. Я сделал следующее, чтобы увидеть, как ассемблер обрабатывает немедленные значения, которые слишком велики для кодирования в соответствующем регистре:
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: здесь меня удивило то, что при переполнении возникает ошибка, а не предупреждение. Почему это одна ошибка?