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
影响进位,这就是它用于无符号比较的方式。
您可以开始 ecx
在 -4,然后使用 jnz bytes_addition
.您已经拥有 inc
在那里,当 ecx
时将设置零标志变为零,并且不会影响进位。
当然,必须通过将 4 添加到 eax
来补偿此偏移量。在循环之前,或在寻址中添加 4 的偏移量。
关于组装 ADC(带进位的加法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256692/