我正试图从EFLAGS寄存器中获取DF的值。
我尝试使用LAHF
指令,但根据Intel X86文档,该指令仅加载SF, ZF, AF, PF, CF
标志。但是,我正在尝试找一条能给我DF寄存器值的指令。
提前致谢。
答案 0 :(得分:8)
使用以下代码:
pushf ;Maybe you'll need pushfd
pop eax
bt eax, 10
如果设置了CF,则设置DF!
如果您不想破坏任何注册,您可以使用下一种方法(受@fuz启发):
pushf
test byte [esp+1],4
lea esp, [esp+4] ;The LEA instruction doesn't change any flags
此时如果设置了ZF,则表示DF已被清除!
答案 1 :(得分:5)
这也可以使用内部函数__readeflags来完成 - 所以不需要内联汇编(仅适用于x86) - 接下来只需要代码就可以在x86和x64平台上运行:
if (__readeflags() & (1 << 10))
{
// D flags is set
}
但是在Windows上这个标志几乎总是清除
答案 2 :(得分:1)
如果您知道table = """CREATE TABLE IF NOT EXISTS
{0} (
node_id bigint ,
screen_name text,
last_tweets set<text>,
follower_ids set<bigint>,
friend_ids set<bigint>,
centrality float,
PRIMARY KEY (node_id))
""".format(table_name)
指向有效内存区域并且您不介意修改它(和es:edi
),并且您想要+ 1 / -1结果而不是0/1:
eax
嗯,有这么多的if /和/ when约束,它可能没什么用处(唯一的好处:不需要/修改堆栈)。但我确实想尝试阅读一个字符串指令的结果是多么麻烦,因为我在阅读mov eax,edi
scasb
sub edi,eax ; edi = +1/-1 for DF=0/1
答案时得到了这个想法。
编辑:堆栈内存变体,通常对读取访问有效(特别是如果其他答案中的pushf
变体有效)(NASM语法)。
pushf