x86汇编-比较SF和OF标志

3

如何在x86汇编中比较SF(符号标志)和OF(溢出标志)标志的值?

在执行cmp指令后,这些标志被设置,但我需要比较它们以模拟jl指令。

1个回答

5
有两个主要指令用于测试标志位: Jcc 指令和 SETcc 指令。查看这两个表格将会给你一些检查这两个标志位的指令。
使用 SETcc 指令的示例:
seto al        ; Set byte to 1 if overflow (OF=1)
sets ah        ; Set byte to 1 if sign (SF=1)

现在,EAX中将包含十六进制值。
0101 if both flags have been set
0100 if sign has been set
0001 if overflow has been set
0000 if both flags have been cleared

现在你可以使用 cmp al, ah 来将 AL(溢出)和 AH(符号) 进行比较。指令 jl 检查差异(SF ≠ OF),因此在此 cmp 之后使用 jne(不相等/零)与原始的 jl 具有相同的效果。
最后,模拟 jl 的整个代码如下:
seto al
sets ah
cmp al, ah
jne lesser

1
我注意到使用“setl”指令(如果SF≠OF,则设置字节)有一种更优雅的方法来完成这个任务。 - user091sof
2
如果您准备使用 SETL,那么为什么要模拟 jl 指令呢? - Fifoernik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接