在x86-64 Linux系统上使用DIV指令时,需要即时设置除数。如果未设置,结果可能会发生不可预测的行为。以下是示例代码。
mov rax, 100
mov rbx, 5
mov rdx, 0
div rbx
; 在这里,结果应该是20,输出rax寄存器的值应该是20
在DIV指令之前,将0值放入RDX寄存器中。这告诉指令将RAX的值与0作为高位和低位除数进行操作。 使用这种方法,可以在除法操作中使用整个64位寄存器(RAX),而不仅限于32位数值。
如果不需要用到RDX寄存器,也可以使用CQO指令将RAX符号扩展到RDX中:
mov rax, 100
mov rbx, 5
cqo
div rbx
这会将RAX符号扩展到RDX中,从而扩展为128位数值。在这种情况下,将忽略RDX寄存器中的值。