0

我不确定这是装配问题还是气体问题。我已经完成了以下操作,以了解汇编器如何处理太大而无法在相应寄存器中编码的立即数:

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,但没有警告信息。
  • bx65535或者0xFF FF是最大的 16 位值,所以这是有道理的。对此有一个警告。
  • ebx : 4294967295or0xFF FF FF FF是最大的 32 位值,所以这是有道理的。对此有一个警告。
  • rbx:这对我来说是令人惊讶的部分,在溢出时这实际上会引发错误而不是警告。为什么会出现这一错误?
4

0 回答 0