mov eax, ptr_to_num1 ; little endian
mov ebx, ptr_to_num2 ; little endian
xor ecx, ecx
xor edx, edx
clc
bytes_addition:
mov dl, byte [eax+ecx] ; byte from shortest
adc dl, byte [ebx+ecx]
mov byte [eax+ecx], dl
inc ecx
cmp ecx, 4 ; counter,
jl bytes_addition
考虑以下代码:
EAX: 4F2252FF(大端)
EBX: 00DFFC00(大端)
这个加法的结果是错误的:50024fff(大端)。 它应该是50024eff。 看起来进位标志受到影响,但为什么呢?
cmp
,你需要将clc
移到循环的顶部。 - David HoelzerCMP
会修改进位标志。这意味着当循环开始下一次迭代时,它不一定处于您期望的状态。 - David Hoelzeradc/mov
)将是与您的循环一样多的指令。 - Peter Cordes