装配ADC(附带进位)

时间:2015-12-13 21:39:12

标签: assembly adc

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。看起来进位标志会受到影响,但为什么呢?

1 个答案:

答案 0 :(得分:5)

cmp影响进位,这就是它用于无符号比较的方式。

您可以在-4开始ecx,然后使用jnz bytes_addition。你已经有inc,当ecx变为零时会设置零标志,并且不会影响进位。

当然,必须通过在循环之前将eax加4,或在寻址中添加4的偏移来补偿此偏移。