知识点:
REPE/REPZ 指令
CMPSB 指令 一、CMPSB
//cmp //sub
//SCASB//scasw//scasd
cmp byte ptr [edi],al //对标志位的影响相当于sub指令
word,dword
//同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF为1,则 dec EDI。
//CMPSB
cmps byte ptr [edi],byte ptr [esi]//对标志位的影响相当于sub指令
cmps word ptr //cmpsw
cmps dword ptr //cmpsd
//同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF为1,则 dec EDI。 二、REPE/REPZ 指令
//上一节课我们了解了REPNE/REPNZ
REPNE SCAS BYTE PTR ES:[EDI] // 当ECX!=0并且ZF==0时 重复执行后边的指令 每执行一次ECX的值减1 REPE/REPZ cmpsb //// 当ECX!=0并且ZF=1时 重复执行后边的指令 每执行一次ECX的值减1 三、代码测试
1、比较字符串是否相等 MOV EDI,s1
MOV ESI,s2
MOV ECX,0xFFFFFFFF
XOR EAX,EAX //查找字串结束标志 '\0' eax=0
REPNE SCASB // edi,al
NOT ECX //计算字串长度存ECX
MOV EDI,s1
mov ESI,s2
XOR EDX,EDX
REPE CMPSB //不相等则退出 int _tmain(int argc, _TCHAR* argv[])
{
char *s1="abcde21";
char *s2="abcde1";
__asm
{
//mov al,0
xor al,al//eax=0
mov edi,s1//
mov ecx,-1 //0xFFFF FFFF
repnz scasb;
not ecx // '\0' 计算s1字串长度,指定repz循环次数
mov edi,s1
mov esi,s2
repz cmpsb // edi,esi
//ZF=1 && ECX=0 字串相等
}
return 0;
}
知识点:
__declspec(naked) 纯汇编
堆栈平衡
参数传递
用纯汇编封装函数strcmpA 一、CMPSB
//cmp //sub
//SCASB//scasw//scasd
cmp byte ptr [edi],al //对标志位的影响相当于sub指令
word,dword
//同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF为1,则 dec EDI。
//CMPSB
cmps byte ptr [edi],byte ptr [esi]//对标志位的影响相当于sub指令
cmps word ptr //cmpsw
cmps dword ptr //cmpsd
//同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF为1,则 dec EDI。 二、REPE/REPZ 指令
//上一节课我们了解了REPNE/REPNZ
REPNE SCAS BYTE PTR ES:[EDI] // 当ECX!=0并且ZF==0时 重复执行后边的指令 每执行一次ECX的值减1
REPE/REPZ cmpsb //// 当ECX!=0并且ZF=1时 重复执行后边的指令 每执行一次ECX的值减1 三、代码测试
1、比较字符串是否相等 int _tmain(int argc, _TCHAR* argv[])
{
char *s1="abcde21";
char *s2="abcde1";
__asm
{
//mov al,0
xor al,al//eax=0
mov edi,s1//
mov ecx,-1 //0xFFFF FFFF
repnz scasb;
not ecx // '\0' 计算s1字串长度,指定repz循环次数
mov edi,s1
mov esi,s2
repz cmpsb // edi,esi
//ZF=1 && ECX=0 字串相等
}
return 0;
} __declspec(naked) int strcmpA(char* s1,char *s2)// scasw strcmpW
{
__asm
{
push ebp // esp+4+4 s1 //esp+4+8
mov ebp,esp //构建栈底
//mov al,0
xor al,al//eax=0
mov edi,[ebp+4+4]//
mov ecx,-1 //0xFFFF FFFF
repnz scasb;
not ecx // '\0' 计算s1字串长度,指定repz循环次数
mov edi,[ebp+4+4]
mov esi,[ebp+4+8]
repz cmpsb // edi,esi
//[edi-1] [esi-1] xor eax,eax
xor edx,edx
mov al,[edi-1]
mov dl,[esi-1]
sub eax,edx //相等eax=0,大于返回结果>0 小于<0
pop ebp //栈平衡
retn
}
}

汇编 REPE/REPZ 指令,CMPSB指令的更多相关文章

  1. 80806汇编(5)——[BX]和Loop指令

    80806汇编(5)--[BX]和Loop指令 已经好久没写点东西了,国庆节就一直想弄个个人网站,这段时间一直在弄那个,虽然有现成的框架(Hexo),但是总想弄出自己的效果来,但是最后还是有些差强人意 ...

  2. 汇编-5.0-[BX]和loop指令

    1.要完整的描述一个内存单元,需要两种信息:1.内存单元的地址:2.内存单元的长度(类型). 2."()"表示一个寄存器或一个内存单元中的内容.如:(ax)表示ax中的内容. &q ...

  3. 汇编中resb这样的指令是什么意思?

    转载下来,方便以后查看 原作网址:http://blog.csdn.net/m1j2t3/article/details/5681657 汇编中resb这样的指令是什么意思? 还有我在汇编程序中看到这 ...

  4. ARM汇编(2)(指令)

    一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...

  5. 汇编 sub减法指令 比较指令CMP JZ条件跳转指令

    二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格 ...

  6. 汇编:MSR/MRS/BIC指令

    1.MRS指令MRS指令的格式为:MRS{条件}   通用寄存器,程序状态寄存器(CPSR或SPSR)MRS指令用于将程序状态寄存器的内容传送到通用寄存器中.该指令一般用在以下两种情冴: Ⅰ.当需要改 ...

  7. jsp的常用指令有哪些(编译指令/动作指令整理)

    jsp的常用指令有哪些(编译指令/动作指令整理) JSP动作指令 JSP - JSP中的脚本.指令.动作和注释

  8. javaWEB总结(15):jsp指令_page指令

    jsp指令 jsp指令是为jsp引擎设计的.他们并不直接产生任何可见输出,而只是告诉引擎如何处理jsp页面的其余部分. 目前定义了page,include和taglib这三种指令. page指令 (1 ...

  9. JSP指令--include指令(静态包含)

    转自:https://blog.csdn.net/chentiefeng521/article/details/51802319 include指令         include指令是文件加载指令, ...

随机推荐

  1. Java虚拟机(二)对象的创建与OOP-Klass模型

    前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇文章会给你答案. 1.对象的创建 对象的 ...

  2. [Android] 锁定屏幕

    最近玩的比较欢脱,欠了好多东西没写.今天先简单地补一篇简单的内容.就是最近涉及到一个锁定Android设备屏幕的设计,大概就是通过一个按钮或者服务消息,来控制设备界面完全锁定,不能点击任何东西.感觉上 ...

  3. Android IOC注解库EasyUI

    EasyUI介绍 1.使用反射机制和注解实现类似于butterknife的IOC框架 2.快速的findViewById和OnClick 3.扩展了click时无网络监测 4.扩展了快速点击监测 使用 ...

  4. IIS下众多网站,如何快速定位某站点日志在哪个文件夹?

    windows2008,iis 多站点, 日志.应用程序池都是默认设置, 没有分开………… Logs目录里面有W3SVC43,W3SVC44,W3SVC45,W3SVC46.....等等日志文件夹. ...

  5. T-SQL查询两个日期之间的休息日(周六周日)天数

    SELECT COUNT(*) FROM MASTER..SPT_VALUES WHERE TYPE = 'P' AND DATEADD(DAY,NUMBER,'2014-03-13')<='2 ...

  6. CentOS7 配置静态 ip

    1. 为 CentOS7 配置静态 ip 1.1 修改文件/etc/sysconfig/network-scripts/ifcfg-ens33 sudo vi /etc/sysconfig/netwo ...

  7. 【转】HTTP学习---TCP和UDP协议的区别与应用

    [原文]https://www.toutiao.com/i6592813624689951239/ 概述 ⊙TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICM ...

  8. MongoDB之 复制集搭建

    MongoDB复制集搭建步骤,本次搭建使用3台机器,一个是主节点,一个是从节点,一个是仲裁者. 主节点负责与前台客户端进行数据读写交互,从节点只负责容灾,构建高可用,冗余备份.仲裁者的作用是当主节点宕 ...

  9. JAVA-最常用的A题语法

    输出 System.out.println(""); if 语句 if(布尔表达式) { //如果布尔表达式为true将执行的语句 } if...else... 语句 if(布尔表 ...

  10. Eclipse 中怎样自动格式化代码?

    首先 有一个 检查代码风格的工具叫checkstyle,具体怎么下载,请自行百度.. 当你在eclipse安装好 checkstyle后,对于使用google标准的人来说,选择一个项目,右键,点击ch ...