如何通过 AND 运算得到 SF = 1?
How to get SF = 1 with AND operation?
是否可以使用这些指令使符号标志等于 1?
movzx ecx, byte ptr[eax]
and ecx, 8000000Fh
jns short loc_401073
ecx
寄存器和8000000Fh之间有一个and
。在ecx
中可以是00h-FFh范围内的数字,但我不确定是否有可能得到SF=1。有人可以帮助我吗?
如果 ecx
的范围确实限于 00h-FFh
,SF 永远不会被设置为 and ecx, 8000000Fh
的结果,因为最高有效位总是被清除。
例如(如果你需要从ECX的寄存器中的一个8位值中加载一个无符号整数),你可以这样写:
MovZX ECX,byte ptr[EAX]
Test CL,080H
JZ short loc_401073
在这种情况下,代替跳转指令,如果需要获取输入的符号,可以这样写:
SetNZ AL ; AL's register contains 1 if sign else contains 0
如果要扩展输入值的符号,可以这样写:
MovSX ECX,byte ptr[EAX]
Or ECX,ECX
JNS short loc_401073
在这种情况下,代替跳转指令,如果需要获取输入的符号,可以这样写:
SetS AL ; AL's register contains 1 if sign else contains 0
是否可以使用这些指令使符号标志等于 1?
movzx ecx, byte ptr[eax]
and ecx, 8000000Fh
jns short loc_401073
ecx
寄存器和8000000Fh之间有一个and
。在ecx
中可以是00h-FFh范围内的数字,但我不确定是否有可能得到SF=1。有人可以帮助我吗?
如果 ecx
的范围确实限于 00h-FFh
,SF 永远不会被设置为 and ecx, 8000000Fh
的结果,因为最高有效位总是被清除。
例如(如果你需要从ECX的寄存器中的一个8位值中加载一个无符号整数),你可以这样写:
MovZX ECX,byte ptr[EAX]
Test CL,080H
JZ short loc_401073
在这种情况下,代替跳转指令,如果需要获取输入的符号,可以这样写:
SetNZ AL ; AL's register contains 1 if sign else contains 0
如果要扩展输入值的符号,可以这样写:
MovSX ECX,byte ptr[EAX]
Or ECX,ECX
JNS short loc_401073
在这种情况下,代替跳转指令,如果需要获取输入的符号,可以这样写:
SetS AL ; AL's register contains 1 if sign else contains 0