如何通过 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