汇编 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指令是文件加载指令, ...
随机推荐
- servlet和jsp页面过滤器Filter的作用及配置
刚刚有个朋友问我,Servlet的过滤器有什么作用? 现在发个帖子说明一下, 过滤器是一个对象,可以传输请求或修改响应.它可以在请求到达Servlet/JSP之前对其进行预处理, ...
- [WPF 知识总结系列] —— 基本控件的简单样式集合
一.ScrollBar <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...
- MySQL——索引基础
本篇文章,我们将从索引基础开始,介绍什么是索引以及索引的几种类型,然后学习如何创建索引以及索引设计的基本原则. 本篇文章中用于测试索引创建的user表的结构如下: 什么是索引 索引(在 MySQL 中 ...
- RBAC用户权限管理数据库设计【转载】
本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...
- C# 引用的程序集没有强名称
首先查一下什么是强名称程序集,见百度百科帖子:http://baike.baidu.com/view/1145682.htm简单来说,就是为了解决Windows Dll Hell问题的,即不同公司开发 ...
- 64位Windows的Dos中取消了edit命令
前段时间在玩dos命令行的时候,用copy con创建了txt文件后想对其进行编辑,然后我又不想用记事本,所以去网上找命令行中对文本文件进行编辑的命令(纯属想装B),结果看到了edit命令. 一敲,就 ...
- 乘风破浪:LeetCode真题_023_Merge k Sorted Lists
乘风破浪:LeetCode真题_023_Merge k Sorted Lists 一.前言 上次我们学过了合并两个链表,这次我们要合并N个链表要怎么做呢,最先想到的就是转换成2个链表合并的问题,然后解 ...
- PyQt5--QProgressBar
# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...
- CompletionService简讲
背景 最近在项目中看到太多后台task中使用Executor框架,提交任务后,把future都一个个加入到list,再一个个get这些future的代码. 这个的问题在于一方面没有时限,可能会被某些运 ...
- 2-4 R语言基础 列表
#列表list > l1 <- list("a",2,10L,3+4i,TRUE) #每个元素没有名字> l1[[1]][1] "a" [[2 ...