TEST 指令最常见的用途是检查EFLAGES寄存器的标志位
.section .data
output_cpuid:
.asciz "This processor supports the CPUIDinstruction\n"
output_nocpuid:
.asciz "This processor does not support the CPUID instructiuon\n "
.section .text
.globl _start
_start:
nop
pushfl #使用pushl指令把EFLAGS 寄存器的值保存在到堆栈顶部
popl %eax #使用popl指令把EFLAGS 值读取到EAX寄存器
movl %eax,%edx
xor $0x00200000,%eax #xor异或,相同的0,不同的为1
pushl %eax #把新的EAX压入到堆栈中
popfl #POPFL指令把它存储在EFLAGES中
pushfl
popl %eax
xor %edx ,%eax
test $0x00200000,%eax
jnz cpuid #非零则跳转
pushl $output_nocpuid
call printf
add $4,%esp
pushl $0
call exit
cpuid:
pushl $output_cpuid
call printf
add $4,%esp
pushl $0
call exit
运行结果: