2017-08-11 120 views

回答

4

测试标志有两条主要指令: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 

现在你可以比较AL(溢)至AH(符号)与cmp al, ahjl指令检查差异(SF≠OF),所以在cmp与原始jl具有相同的效果之后,jne(不等于/零)。

最后整个代码仿效jl是:

seto al 
sets ah 
cmp al, ah 
jne lesser 
+1

我注意到,有一个更优雅的方式与''setl''指令要做到这一点(设置字节,如果以下(SF≠OF)) 。 – user091sof

+2

如果你准备使用'SETL',那么你为什么要'_JI'指令? – Fifoernik