汇编指令test的用法
jnz ******;此处test改变的是那个标志寄存器的值,然后致使其检测到后跳转 展开
test属于逻辑运算指令,其功能为功能执行BIT与BIT之间的逻辑运算和测试功能(两操作数作与运算,仅修改标志位,不回送结果)。
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。EST AX, BX与AND AX, BX命令有相同效果。TEST语法规格:TEST r/m,r/m/data。其影响标志包括:C,O,P,Z,S(其中C与O两个标志会被设为0)。
test的运用举例:利用Test指令测试一个位,例如寄存器:
test eax, 100b;/b后缀意为二进制/
jnz ******;/如果eax右数第三个位为1,jnz将会跳转/
jnz跳转的条件非0,即ZF=0,ZF=0意味着零标志没被置位,即逻辑与结果为1。
扩展资料
与汇编指令test功能相仿的还有cmp指令,CMP属于算术运算指令,其功能为功能为比较两个值(寄存器,内存,直接数值),与Test指令的测试功能相仿,其语法格式为CMP r/m,r/m/data,影响的标志位包括C,P,A,Z,O。
CMP比较.(两操作数作减法,仅修改标志位,不回送结果)。cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志)。零标志很像carry,也是内部标志寄存器的一位。
参考资料来源:百度百科-test(汇编指令)
参考资料来源:百度百科-CMP指令
test指令和and 指令执行同样的操作,但test指令不送回操作结果,而仅仅影响标志位。test al,01; 如al的最低位为1,则zf=0,否则zf=1 test指令
这类指令主要影响 ZF 标志位test ax,100b将 ax的值和100b进行“与”操作 ,但不改变ax本身若与操作的结果为零则ZF置位。
扩展资料:
汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end)。用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。
通用数据传送指令
MOV 传送字或字节。
MOVSX 先符号扩展,再传送。
MOVZX 先零扩展,再传送。
PUSH 把字压入堆栈。
POP 把字弹出堆栈。
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈。
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈。
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈。
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈。
BSWAP 交换32位寄存器里字节的顺序。
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)。
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )。
XADD 先交换再累加.( 结果在第一个操作数里 )。
XLAT 字节查表转换。
参考资料来源:百度百科-汇编指令
test ax,100b 将 ax的 值 和 100b进行“与”操作 ,但不改变ax本身
若与操作的结果为零则ZF置位