Есть такой код:
PROC IsBitsEqual NEAR
mov [Result],0
rcl ax,1
jc @@AX_CARRY
rcl dx,1
jc @@EXIT
mov [Result],1
jmp @@EXIT
@@AX_CARRY:
rcl dx,1
jnc @@EXIT
mov [Result],1
@@EXIT:
ret
ENDP IsBitsEqual
Но при сдвигах во флаг переноса всегда записывается нуль, хотя я подбирал такие числа в DX и в AX, что так есть скраю и в центре единицы. В чем я неправ?
Здравствуйте, artgonch, Вы писали:
A>Есть такой код:
A>A>PROC IsBitsEqual NEAR
A> mov [Result],0
A> rcl ax,1
A> jc @@AX_CARRY
A> rcl dx,1
A> jc @@EXIT
A> mov [Result],1
A> jmp @@EXIT
A>@@AX_CARRY:
A> rcl dx,1
A> jnc @@EXIT
A> mov [Result],1
A>@@EXIT:
A> ret
A>ENDP IsBitsEqual
A>
A>Но при сдвигах во флаг переноса всегда записывается нуль, хотя я подбирал такие числа в DX и в AX, что так есть скраю и в центре единицы. В чем я неправ?
Насколько я понял, здесь сравниваются старшие биты двух слов. (Я бы сделал через исключающее или, после чего сравнил с нулем.)
Нельзя ли поподробней, какие данные были на входе, и что получалось в результате?