工作中遇到的问题,需要读取rflags的值然后显示的打印出来。
翻了SDM的指令卷,找到了LAHF指令,这个指令可以把rflags的值写入AH寄存器中,那么问题来了,AH寄存器只有8位,但是rflags在保护模式或者x64模式是32位/64位的,来看下SDM的说明
可知,确实只截取了rflags的低8位,intel这么做想必也是因为低8位比较常用,编写的代码如下:
#include <stdio.h>
#include <stdint.h>
#define LAHF() \
({ \
uint16_t dst;\
\
\
\
asm("lahf;" \
:"=a"(dst) \
: \
); \
dst;\
})
int main(int argc, char *argv[])
{
uint16_t res;
res = LAHF();
res = res >> 8;
printf("BSWAP->res : 0x%X\n", res);
}
这样,就可以读取出rflags的低8位了。
可是如果不能满足rflags低8位的读取怎么办?再次翻