dev*_*ium 19 x86 assembly eflags
From what I've read, seems like there are 9 different flags. Is it possible to read/change them directly? I know I can know for example if the zero flag is set after doing a cmp/jmp instruction, but I'm asking if it's possible to do something like
mov eax, flags
Run Code Online (Sandbox Code Playgroud)
or something.
Also, for writing, is it possible to set them by hand?
Ada*_*eld 30
可以使用特定说明直接设置或清除某些标志:
对于读写符号,零,辅助进位,奇偶校验和进位标志,可以使用LAHF将低8位(这5个标志加3个不确定位)加载到AH寄存器中,并且可以使用SAHF来存储这些从AH返回标志寄存器的值.
您还可以使用PUSHF指令将标志推入堆栈,在堆栈上读取和修改它们,然后使用POPF指令将它们存储回标志寄存器.
请注意,您无法使用POPF设置VM和RF标志 - 它们保留以前的值.同样,只能在权限级别0执行时更改I/O权限级别,并且只能在权限级别执行时更改中断标志,至少与I/O权限级别一样具有权限.
如果你只需要标志寄存器的低字节(包含SF,ZF,AF,PF,CF),那么有一个奇怪但方便的指令LAHF(哈哈),它将标志寄存器的低8位加载到AH和其对应的SAHF将AH存储到标志中.
具体来说,对于进位标志,x86提供CLC,STC和CMC,分别清除,设置和补充进位标志.