汇编中的REPZ CMPSB
repz cmpsb 如果ds:si和es:di所指向的两个字节相等,则继续比较。
CMPSB指令,是用 DS:[SI] 所指的字节单元内容,减去 ES:[DI] 所指的字节单元的内容。
DS:[SI] 是被减数, ES:[DI] 是减数。
验证方法很简单,将这两个内存单元的内容设置成不同的数,看指令执行后CF是0还是1,就能证明了。
例如,你将DS:[SI]单元内容设成01H,将ES:[DI]单元内容设成02H,然后执行CMPSB,你会发现,CF是1,而不是0。这就证明了是前者减去后者的运算。
ZF=1表示是0,对吗?ZF=0,结果非0
是的,ZF=1,表明运算结果为0
cmpsb和rep cmpsb的区别?他们的执行过程是怎样的?
答:
repe/repz:相等则重复
32位:
rep string_op (串操作指令)
string_op : ins, movs,outs,stos
rep:一个串操作前缀,它使其后的串操作重复执行ecx次。
操作:
while (ecx!=0)
{
ecx=ecx-1;
string_op; /串操作/
}
;========================
repe/repz string_op
string_op:cmps,scas
repz:串操作前缀,重复执行ecx次或执行到ZF为0时。
操作:
while(ecx!=0)
{
ecx=ecx-1;
string_op;
if(ZF==0)
break;
}
cmpsb一次只能比较字符串里的一个字符,比较整个串需要用到循环,可以在前加上前缀(repz/repe或者rep)。
答:是的,自己有什么想法的时候,要多动手,用debug
在debug中怎么用a命令写汇编指令
,比如像这样
E:>debug
-a
18A6:0100 db “hello world!”
18A6:010C db “world hello!”
18A6:0118 db “hello world!”
18A6:0124 mov si,100
18A6:0127 mov di,10c
18A6:012A mov cx,0c
18A6:012D repz cmpsb
18A6:012F mov si,100
18A6:0132 mov di,118
18A6:0135 mov cx,0c
18A6:0138 repz cmpsb
18A6:013A
-r ip
IP 0100
:124
-t
可参考:https://blog.csdn.net/fulinus/article/details/8277442
汇编中的REPZ CMPSB相关推荐
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...
From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...
- 汇编中的串操作指令(MOVS,CMPS,SCAS,LODS,STOS)
学汇编的都知道,汇编中很多问题都是对字符串进行的操作,但是我们操作时总是重复相同的操作,用多个指针进行记录,不断判断只针对位置,这样确实很麻烦,于是汇编提供了一种对字符串进行操作的指令, ...
- 汇编中Enter和Leave指令
Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见 ...
- 逆向知识十三讲,汇编中数组的表现形式,以及还原数组
讲解数组之前,要了解数组的特性 1.数据具有连续性 2.数据类型相同 比如: int Ary[3] = {0,1,2}; 我们可以看出,上面定义的数组,数据是连续的,其中每个数据类型大小都是int类型 ...
- 汇编中的DW:DW 定义一个字
汇编中的DW是什么意思?那DB呢 DW 定义一个字 DB 定义一个字节 DD 定义一个双字 前面的D表示定义,后面的字母W .B .D依次表示字(一般为16位).字节(为8位).双字(一般为32位)
- ARM汇编:汇编中proc、endp、ret、near、far指令用法
ARM汇编:汇编中proc.endp.ret.near.far指令用法 子程序名 PROC NEAR ( 或 FAR ) -- ret 子程序名 ENDP (1)NEAR属性(段内近调用): 调用程序 ...
- 汇编中16进制的写法问题
在汇编中,16进制的存放不允许字母开头. eg: A8H 这样写是错误的 0A8H 应该这样写 转载于:https://www.cnblogs.com/ciaociao/p/6529132.ht ...
- 汇编中addr和offset
汇编中addr和offset的异同点!!! 一.相同点 1.addr 和 offset 操作符都是获得操作数的偏移地址: 2.addr 和 offset 的处理都是先检查处理的是全局还是局部变量,若是 ...
最新文章
- 搭建网络及服务器系统,网络服务器搭建与管理
- iOS 崩溃日志在线符号化实践
- 【鬼网络】之Linux网络设置
- Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.
- 原来这才是日志打印的正确姿势!
- MATLAB中unwrap函数
- java读取日志_Java实时监控日志文件并输出的方法详解
- JS中元素的属性(class、style)操作
- 为什么我感觉生活不易挣钱太难
- 你已经是一个成熟的码农了,这些思维习惯你要有!
- FCKEditor报java.lang.NullPointerException
- mysql 一台电脑多个服务_怎么在一台windows主机上安装多个mysql服务
- 前端三级联动 distpicker插件
- 连八股文都不懂还指望在后端混下去么
- 【2017NOIP普及组】T4:跳房子 试题解析
- [2016][34]基于大数据的牛顿(Knewton)平台自适应学习机制分析
- C语言循环语句的研究意义,C语言中循环语句的应用研究
- 借助云开发实现小程序朋友圈的发布与展示
- 铂西学习日记---进程与线程
- 应急响应 - Windows启动项分析,Windows计划任务分析,Windows服务分析
热门文章
- GENTLE.NET(六)--空值处理
- 用户管理和su,id 命令
- Mybatis-plus多表关联查询,多表分页查询
- 日报 18/06/04
- 聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
- 一. DotNet MVC4.0+EasyUI Web简单框架-前言
- windows多线程同步--临界区
- 华为vrrp默认优先级_华为eNSP配置VRRP协议实验
- React-Context
- 【Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )