rep movsd ,repz CMPSB , CMPSW , CMPSD ,cld std用法
CLD指令功能:
将标志寄存器Flag的方向标志位DF清零。
在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。
相反功能指令是STD,将方向标志位DF置1,
在字串操作中使SI或DI的地址指针自动递减,字串处理由后往前。
movsd是把ds:[si]开始的DWORD传送到es:[di]开始的内存中(将ds:[si]处的4个字节数据送到es:[di]处),如果DF标志为0则si、di分别加4;如果DF为1则si、di分别减4。REP前缀表示重复执行该指令,每次执行后cx减1,直到cx为0结束。REPZ与REP类似,主要用于cmps、scas等指令,除了判断cx之外还判断ZF标志,如果ZF为0则结束。由于movs指令不会影响DF标志,所以用repz前缀没有意义,处理器会将repz当作rep处理。
CMPSB用来比较字节,而CMPSW用来比较字,CMPSD用来比较双字。
CMPS DWORD PTR [ESI], [EDI]
但是你记住CMPS指令只能用于比较ESI指向的内存和EDI指向的内存值。
还有一点注意,CMPS和我们的CMP指令的操作数是相反的,
CMP 目的操作数,源操作数
CMPS 源操作数, 目的操作数
我们最好使用其特定的版本也就是我们今天学习到的CMPSB , CMPSW , CMPSD 这样我们不容易出错。
此时我们通过
mov esi, source
mov edi, target
cmpsd
ja xxxx
jmp xxxx2
大家说这句指令执行完cmpsd后,ja xxxx 指令能实现跳转吗。 不知道大家还记得我们之前学习的标志位吗。那么如果我们之前的源数小于比较的数值的话,则产生借位,所以此时CF标志位=1. 而ja指令是不小于,那么它会检测我们的CF标志位,如果发现CF = 1,则表示我们的源数值小于。ja并没有实现,只有当cf = 0的时候ja才实现跳转。 所以我们的指令会执行到jmp xxxx2,跳转。
ja 是无符号的比较
jg是有符合的比较
参考博客:https://blog.csdn.net/ccboby/article/details/6011247
rep movsd ,repz CMPSB , CMPSW , CMPSD ,cld std用法相关推荐
- Win-MASM64汇编语言-CMP/CMPSB/CMPSW/CMPSD/JNE/JCXZ
CMP 格式:cmp a,b 本质上是将a减b,但是并不修改a和b本身,而是会修改下面3个标志位 ZR(ZF)结果为0,则ZF=1 CF(CY)进位或者借位,则CY=1 OF(OV)溢出,则OV=1 ...
- 汇编中的REPZ CMPSB
repz cmpsb 如果ds:si和es:di所指向的两个字节相等,则继续比较. CMPSB指令,是用 DS:[SI] 所指的字节单元内容,减去 ES:[DI] 所指的字节单元的内容. DS:[SI ...
- 汇编语言rep movsd 的使用
mov esi,offset @s1 mov edi,offset @s2 mov ecx,10 cld rep movsd 1.rep movsd 每次ecx!=0便执行movsd ,然后ecx=e ...
- repne scasb + rep movsd + rep movsb 内联实现 strcat
我在前面写了两篇博客分别介绍内联实现 strlen 和 strcpy,这次介绍的 strcat 其实是 strlen + strcpy ,没什么新东西. .text:0040265A lea edi, ...
- rep movsd + rep movsb 内联实现 strcpy
下面的代码片段是一个内联的 strcpy ,not ecx 为止是计算源字符串的长度(含NULL),00402646 到 00402651 是以4字节为单位复制,最后3行是把剩下的0-3字节复制过去. ...
- 【movsb cmpsb cld std】
cld,清方向标志,即(DF)=0,地址从低到高 std,置方向标志1,DF=1,地址从高到低 movsb指令用于把字节从DS:SI 搬到ES:DI:rep movsb 就是多次搬运.搬运前先把字符串 ...
- Intel8086处理器使用NASM汇编语言实现操作系统09-关于数组复制的实现/movsb/movsw/cld/std/rep
本文介绍movsb和movsw指令,它是C++中memcpy函数的实现,在Java语言的ArrayList实现类中就使用了该指令,不过在Java中的方法是System.arraycopy方法 首先要了 ...
- 汇编语言STD CLD的用法
STD CLD@TOC 在计 算机中,大部分数据存放在主存 中,8086CPU提供了一组处理主存中连续存放的数据串的指令--串操作指令.串操作指令中,源操作数用寄存器SI寻址,默认在数据段DS中,但允 ...
- 复习8086汇编中的 CLI STI CLD STD指令
CLI 全称 Clear Interupt STI 全称 Set Interupt CLD 全称 Clear Director STD 全称 Set Director CLI和STI是用来屏蔽中断和恢 ...
最新文章
- ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
- 对比学习系列论文MoCo v1(二):Momentum Contrast for Unsupervised Visual Representation Learning
- AI公开课:19.05.15施尧耘-达摩院量子实验室主任《量子计算:前景与挑战》课堂笔记以及个人感悟
- 罗永浩直播翻车频现,抖音选错了吗?
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)
- 华为android升级国内版,华为EMUI5.0系统升级成为国内安卓升级的标杆
- [转]android ListView详解
- MugLife app是一款可以将静态照片变成3D动画的手机应用
- 基于openstack的自动化测试平台设计头脑风暴
- CCF——游戏(2017-12)
- 最新出炉的Java面试题(2022亲身经历)
- java cryptojs_CryptoJS用法
- 国开电大 广告心理学 形考任务
- 高级系统架构师培训笔记
- 汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp,eip
- 2022年华为云存储618最新活动攻略
- MySQL索引详解之索引的数据结构
- 10个谈话技巧让你平步青云(转贴)
- Add/SubtractWorkingDaystoaDate_SAP刘梦_新浪博客
- 告别CSDN,转去博客园(http://www.cnblogs.com/organic/)