【Android 逆向】x86 汇编 ( cmp 比较指令 | test 比较指令 )

举报
韩曙亮 发表于 2022/01/11 00:57:14 2022/01/11
【摘要】 文章目录 一、cmp 比较指令二、test 比较指令总结 一、cmp 比较指令 cmp 指令通过 减法运算 , 影响标志位 CPAZO ; cmp eax, eb...





一、cmp 比较指令



cmp 指令通过 减法运算 , 影响标志位 CPAZO ;

cmp eax, ebx

  
 
  • 1

上述指令执行时 , eax - ebx , 减法运算结果影响标志位 CPAZO ;

  • C 对应 进位 位 , 此处指的是减法操作是否有借位 ;
  • P 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是 0 0 0 还是 1 1 1 ;
  • A 对应 辅助进位 位 , 32 32 32 位的整型中 , 低 16 16 16 位是否发生了 借位 或 进位 ;
  • Z 对应 零标志 , 如果 减法操作 最后的结果是 0 0 0 , 该 零标志位 会被设置成 1 1 1 , 如果 减法操作 结果不为 0 0 0 , 该 零标志位 会被设置成 0 0 0 ;
  • O 对应 溢出标志 , 减法操作是否会导致溢出 , 负数 - 负数 会出现溢出 ;




二、test 比较指令



cmp 指令test 指令 用于 比较 2 2 2 个操作数是否相等 ;

test 指令通过 与运算 , 影响标志位 CPSZO ;

  • C 对应 进位 位 , 此处指的是减法操作是否有借位 ;
  • P 对应 奇偶 位 , 运算结果 的 奇偶 , 检测结果最后一个位是 0 0 0 还是 1 1 1 ;
  • S 对应 符号标志位 , 计算结果如果是负数 , 该标志位设置成 0 0 0 , 计算结果如果是正数 , 该标志位设置成 1 1 1 ;
  • Z 对应 零标志 , 如果 与操作 最后的结果是 0 0 0 , 该 零标志位 会被设置成 1 1 1 , 如果 与操作 结果不为 0 0 0 , 该 零标志位 会被设置成 0 0 0 ;
  • O 对应 溢出标志 , 减法操作是否会导致溢出 ; ( 与运算不存在进位 , 没有溢出 )




总结



align 字节对齐 , db 声明字符 / 字符串 , nop 空指令
cmp 比较 , test 比较
call 调用 , jmp 跳转 (a , b , c , g , l , o , p , s , z , e , n)
lea , lds , les , lfs , lgs , lss , mov 移动
push , pop , pushf , popf , pushd , popd , pushad , popad , pusha , popa
ret , retn , set
add , sub , mul , div
xor , not , shl , shr , sal , sar , rol , ror , rcl , rcr

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120698797

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。