我不确定这是装配问题还是气体问题。我已经完成了以下操作,以了解汇编器如何处理太大而无法在相应寄存器中编码的立即数:
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
or0xFF FF FF FF
是最大的 32 位值,所以这是有道理的。对此有一个警告。 - rbx:这对我来说是令人惊讶的部分,在溢出时这实际上会引发错误而不是警告。为什么会出现这一错误?