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
Run Code Online (Sandbox Code Playgroud)
考虑一下
EAX:4F2252FF(大端)
EBX:00DFFC00(大端)
这个添加的结果是错误的:50024fff(大端).它应该是50024eff.看起来进位标志受到影响,但为什么呢?
cmp 影响进位,这是它用于无符号比较的方式.
你可以从ecx-4 开始,然后使用jnz bytes_addition.你已经有了inc,当它ecx变为零时将设置零标志,并且不会影响进位.
当然,必须通过eax在循环之前添加4 或在寻址中添加4的偏移来补偿该偏移.