请教两汇编语句问题(TEST 与 CMP)
testesi,esijeXXXXXX跟cmpesi,0jeXXXXXX有什么不同?希望高手来解答来,谢谢!...
test esi,esi
je XXXXXX
跟
cmp esi,0
je XXXXXX 有什么不同?希望高手来解答来,谢谢! 展开
je XXXXXX
跟
cmp esi,0
je XXXXXX 有什么不同?希望高手来解答来,谢谢! 展开
2013-07-15
展开全部
test属于逻辑运算指令 功能: 执行BIT与BIT之间的逻辑运算
测试(两操作数作与运算,仅修改标志位,不回送结果).
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果 语法: TEST r/m,r/m/data
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) 运用举例:
1.Test用来测试一个位,例如寄存器: test eax, 100b; b后缀意为二进制
jnz ******; 如果eax右数第三个位为1,jnz将会跳转 我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1. 2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空: test ecx, ecx
jz somewhere 如果ecx为零,设置ZF零标志为1,Jz跳转 CMP属于算术运算指令 功能: 比较两个值(寄存器,内存,直接数值)
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O CMP比较.(两操作数作减法,仅修改标志位,不回送结果).
cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志).
零标志很像carry,也是内部标志寄存器的一位. 例如:
Cmp eax, 2; 如果eax-2=0即eax=2就设置零标志为1
Jz ****; 如果设置了零标志就跳转 test逻辑与运算结果为零,就把ZF(零标志)置1;
cmp 算术减法运算结果为零,就把ZF(零标志)置1
测试(两操作数作与运算,仅修改标志位,不回送结果).
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果 语法: TEST r/m,r/m/data
影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) 运用举例:
1.Test用来测试一个位,例如寄存器: test eax, 100b; b后缀意为二进制
jnz ******; 如果eax右数第三个位为1,jnz将会跳转 我是这样想的,jnz跳转的条件是ZF=0,ZF=0意味着ZF(零标志)没被置位,即逻辑与结果为1. 2.Test的一个非常普遍的用法是用来测试一方寄存器是否为空: test ecx, ecx
jz somewhere 如果ecx为零,设置ZF零标志为1,Jz跳转 CMP属于算术运算指令 功能: 比较两个值(寄存器,内存,直接数值)
语法: CMP r/m,r/m/data
标志位: C,P,A,Z,O CMP比较.(两操作数作减法,仅修改标志位,不回送结果).
cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志).
零标志很像carry,也是内部标志寄存器的一位. 例如:
Cmp eax, 2; 如果eax-2=0即eax=2就设置零标志为1
Jz ****; 如果设置了零标志就跳转 test逻辑与运算结果为零,就把ZF(零标志)置1;
cmp 算术减法运算结果为零,就把ZF(零标志)置1
推荐于2018-04-05
展开全部
test esi,esi 将esi寄存器与esi寄存器做与运算,只有当esi寄存器为0时,je语句才能跳转;cmp esi,0 将esi寄存器与0做减法运算,只有当esi寄存器为0时,je语句才能跳转;因此,二者没什么区别,都是比较esi寄存器是否为0。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-15
展开全部
test esi,esi 两字节cmp esi,0 五字节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一行命令占2个字节,第二行命令占5个字节,其他差异不大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询