使用test指令判断变量是否为0
问题描述
- 平台、环境:
- x86指令集,32bit
- win10操作系统
- C+ASM编程
- 问题
- 判断eax是否为0,要使用test eax,0还是test eax,eax
- test指令如何影响标志位寄存器
- 如何读取标识寄存器并获取标识位(例如ZF标识位)
关于test指令
- test
- test指令实际上就是与(and)操作
- 与and指令的不同在于
- 不保存与运算结果
- and eax,0 将与运算结果0存入eax寄存器
- test eax,0 不把运算结果保存在eax寄存器中,eax寄存器值不变
- 用test可以实现对某个变量是否为0的判断,而and指令不行
- 虽然and和test都会影响标识寄存器中的ZF标志位,但是只用and指令无法判断出变量是否为0
- 不保存与运算结果
- test eax,0
- 不能够判断eax是否为0
- 因为eax和0作与,无论eax是否为零,结果都是0,都会是ZF标志位置1
- 这种写法使用test和and对标识位的影响是一样的
- test eax,eax