REPNE SCASB(有疑问待解释)

涉及到三个寄存器:ECX,  AL, EDI 和标志寄存器的ZF位和DF位.

REPNE 先检查ECX是否为0, 不为0则循环.
SCASB 相当于 SCAS BYTE PTR DS:[EDI] 即 SUB AL, BYTE PTR DS:[EDI].    且, 如果标志寄存器DF=0, 则执行SCASB后, EDI = EDI + 1字节; 如果DF=1, 则EDI = EDI - 1字节;

查过的说明是: 当ECX==0或者ZF==1的时候终止循环.  但在OD里手动设置ZF=1后, 循环并未停止,  什么原因? 在OD里观察, 似乎跟ZF没什么关系, 但是SCASB 相当于 SUB AL, BYTE PTR DS:[EDI],  如果两值相等, 那么ZF一定等于1才对.

char *str = "1234567890";

__asm

{

mov al, ‘7‘

mov edi, str

mov ecx, -1

repnz scasb

not ecx

dec ecx

}

时间: 2025-01-04 13:28:30

REPNE SCASB(有疑问待解释)的相关文章

x86汇编指令具体解释

80x86指令系统 80x86指令系统,指令按功能可分为下面七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7) 保护方式指令. 3.3.1数据传送指令 数据传送指令包含:通用数据传送指令.地址传送指令.标志寄存器传送指令.符号扩展指令.扩展传送指令等. 一.通用数据传送指令 1传送指令 传送指令是使用最频繁的指令,格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数S

汇编语言学习笔记(六)

十八.字符串处理 前文介绍过字符串的处理,字符串是byte类型 的数组,现在实现一段代码,将字符串string1数据copy到字符串string2中 代码如下 .data string1 byte "Hello World!", 0 string2 byte 12 dup(?), 0 .code mov ecx, 12 mov ebx,0 .repeat mov al, string1[ebx] mov string2[ebx], al inc ebx .untilcxz 通过ecx递

C#设计模式(1)——单例模式

一.引言 最近在设计模式的一些内容,主要的参考书籍是<Head First 设计模式>,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考.首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二.单例模式的介绍 说到单例模式,大家第一反应应该就是——什么是单例模式?,从“单例”字面意思上理解为——一个类只有一个实例,所以单例模式也就是保证一个类只

linux平台学x86汇编(十三 ):字符串的比较与搜索

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] cmps指令用于比较字符串值,cmps指令有三种格式:cmpsb.cmpsw.cmpsl.隐含的源操作数和目标操作数位置存储在esi和edi寄存器中,每次执行cmps指令时,根据DF标志,esi和edi寄存器按照被比较的数据长度递增或递减.cmps指令从源字符串中减去目标字符串,并且适当地设置EFLAGS寄存器的进位.符号.溢出.零.奇偶校验和富足进位标志.cmps指令执行之

用delphi创建服务程式

视窗系统 2000/XP和2003等支持一种叫做"服务程式"的东西.程式作为服务启动有以下几个好处: (1)不用登陆进系统即可运行. (2)具有SYSTEM特权.所以你在进程管理器里面是无法结束他的. 笔者在2003年为一公司研发机顶盒项目的时候,原来写过课件上传和媒体服务,下面就介绍一下怎么用Delphi7创建一个Service程式. 运行Delphi7,选择菜单File-->New-->Other--->Service Application.将生成一个服务程式的

javascript中对象的深度克隆

零.寒暄 又是一个月多月没有更新博客了,这段时间回学校处理下论文的事情,实习的生活也暂时告一段落(在公司上班,才发现学校里面的生活简直如天堂一般,相信很多已经毕业的小伙伴肯定被我说中了,说中了请给本文点个赞,哈哈!).希望接下来自己的更新进度能加快,马上又是一年校招时,被虐也好.大牛虐别人也罢,总之祝福各位今年要找工作的小伙伴们好运.那么,今天就聊一下一个常见的笔试.面试题,js中对象的深度克隆.翻了下这个题目,在很多地方出现过,已经算一个老的题目了,但是每年的校招中总会考到,其实想想,这个题目

Linux0.11内核--内存管理之2.配合fork

[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5598451.html ] 在上一篇的fork函数中,首先一上来就调用get_free_page为新任务的数据结构申请一页内存,在memory.c中: /* * 获取首个(实际上是最后1 个:-)空闲页面,并标记为已使用.如果没有空闲页面, * 就返回0. */ //// 取空闲页面.如果已经没有可用内存了,则返回0. // 输入:%1(ax=0) - 0:%2(LOW_MEM):%3(cx=

程序员1月书讯

12月书讯中奖名单: xu_chenyang<精简:无印良品与品牌理念打造> 松阳<通关!游戏设计之道(第2版)> xiaerwoailuo<Python科学计算基础教程> SunnyYoona<数据架构:大数据.数据仓库以及Data Vault> 丁国华<设计的细节:日本经典设计透析> 好书推荐,在图灵书讯中选出你认为值得推荐的好书加推荐理由或推荐语,在文末评论里回复.下期书讯更新时,会在本期的书讯评论中选出若干优秀评论,获奖者可任选图灵书讯中

Linux-0.11内核内存管理get_free_page()函数分析

/* *Author : DavidLin*Date : 2014-11-11pm*Email : [email protected] or [email protected]*world : the city of SZ, in China*Ver : 000.000.001*history : editor time do 1)LinPeng 2014-11-11 created this file! 2)*/Linux-0.11内存管理模块是源代码中比较难以理解的部分,现在把笔者个人的理解