如何通过AND操作获得SF = 1?

时间:2017-10-13 15:34:54

标签: assembly x86 disassembly flags

是否可以使用这些指令获得等于1的符号标志?

movzx ecx, byte ptr[eax]
and ecx, 8000000Fh
jns short loc_401073

and寄存器和8000000Fh之间有一个ecx。在ecx中可以是00h-FFh范围内的数字,但我不确定是否有可能得到SF = 1。有人能帮助我吗?

2 个答案:

答案 0 :(得分:5)

如果ecx的范围确实限于00h-FFh,则永远不会将and ecx, 8000000Fh设置为SF,因为最重要的位始终是清晰的。

答案 1 :(得分:1)

例如(如果需要从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