汇编 REPE/REPZ 指令,CMPSB指令
知识点:
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指令的更多相关文章
- 80806汇编(5)——[BX]和Loop指令
		80806汇编(5)--[BX]和Loop指令 已经好久没写点东西了,国庆节就一直想弄个个人网站,这段时间一直在弄那个,虽然有现成的框架(Hexo),但是总想弄出自己的效果来,但是最后还是有些差强人意 ... 
- 汇编-5.0-[BX]和loop指令
		1.要完整的描述一个内存单元,需要两种信息:1.内存单元的地址:2.内存单元的长度(类型). 2."()"表示一个寄存器或一个内存单元中的内容.如:(ax)表示ax中的内容. &q ... 
- 汇编中resb这样的指令是什么意思?
		转载下来,方便以后查看 原作网址:http://blog.csdn.net/m1j2t3/article/details/5681657 汇编中resb这样的指令是什么意思? 还有我在汇编程序中看到这 ... 
- ARM汇编(2)(指令)
		一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ... 
- 汇编  sub减法指令 比较指令CMP  JZ条件跳转指令
		二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格 ... 
- 汇编:MSR/MRS/BIC指令
		1.MRS指令MRS指令的格式为:MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)MRS指令用于将程序状态寄存器的内容传送到通用寄存器中.该指令一般用在以下两种情冴: Ⅰ.当需要改 ... 
- jsp的常用指令有哪些(编译指令/动作指令整理)
		jsp的常用指令有哪些(编译指令/动作指令整理) JSP动作指令 JSP - JSP中的脚本.指令.动作和注释 
- javaWEB总结(15):jsp指令_page指令
		jsp指令 jsp指令是为jsp引擎设计的.他们并不直接产生任何可见输出,而只是告诉引擎如何处理jsp页面的其余部分. 目前定义了page,include和taglib这三种指令. page指令 (1 ... 
- JSP指令--include指令(静态包含)
		转自:https://blog.csdn.net/chentiefeng521/article/details/51802319 include指令 include指令是文件加载指令, ... 
随机推荐
- [Ubuntu] 14.04 外接显示器分辨率调整
			最近按照提示更新了一下系统,安装了100多M的更新包,结果系统又读不出外接显示器的信息了,开机显示vga-1:probed a monitor but no|invalid edid,我也不懂. 后来 ... 
- Mongodb的入门(4)mongodb3.6的索引
			Mongodb的索引: 在介绍索引之前,再强调一下nosql数据库和sql数据库的区别: sql数据库:结构化数据,定好了表格后,每一行的内容都是结构化的 mongo:文档数据,表下的数据都可以有自己 ... 
- 【Python】生成词云
			import matplotlib.pyplot as plt from wordcloud import WordCloud import jieba text_from_file_with_apa ... 
- 2018-9 Java.lang.StackOverflowError
			问题: Java.lang.StackOverflowError at com.**Logger.**.**.StringFilter.isValueNull(StringFilter.java:81 ... 
- 用烂点子打破沉默的"麦当劳理论"
			"麦当劳"理论是啥? 讨论周末聚餐去哪儿的时候,朋友们往往太过顾及彼此的想法,犹豫着等待其他人做决定. 当谁也不愿说出提议的时候, 我往往会耍一个花招:推荐去麦当劳吃. 宝贵的休息 ... 
- IntelliJ IDEA2018激活方法
			前言: IntelliJ IDEA2018请在官网下载:https://www.jetbrains.com/idea/ 一.license server激活 输入http://idea.jialeen ... 
- 个人犯的一个golang routine错误
			这个其实不是错误,2个写法没有区别.-2015.11.22 认识golang也不少时间了,也做过几个项目.最近发现之前用golang写的一个服务,内存涨得比较快,一直没找出来原因来.今天把疑惑发到群里 ... 
- [cb]UIGrid+UIStretch的自适应
			自适应需求 如下图所示:一个Grid下面有六个Button,它们需要在不同的分辨下拉伸适应(Horizontal)宽度,以保证填充满底部 要点分析 首先有这两个要点 1.UIGrid中的Cell Wi ... 
- It was not possible to find any compatible framework version
			It was not possible to find any compatible framework version The specified framework 'Microsoft.NETC ... 
- 端口扫描--zmap
			ZMap被设计用来针对整个IPv4地址空间或其中的大部分实施综合扫描的工具.ZMap是研究者手中的利器,但在运行ZMap时,请注意,您很有 可能正在以每秒140万个包的速度扫描整个IPv4地址空间 . ... 
