我正在使用32位系统并在EDX中保存了64位数:EAX。我正在尝试减去ESI中保存的数字:EDI是正确的吗?我很确定这不是因为经过3次迭代后结果不正确。
sub %esi, %edx #Subtract two 64 bit numbers
sub %edi, %eax
答案 0 :(得分:9)
您需要进行两项更改:
borrow
,则需要从高阶位中减去一个。幸运的是,CPU会记住是否存在借用(在carry flag
CF中)并且有一条指令要借借减去,SBB
这是最终代码
sub %edi, %eax # Subtract low order 32-bits, borrow reflected in CF
sbb %esi, %edx # Subtract high order 32-bits, and the borrow if there was one