【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep
一、字符串处理指令
(1) lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI
(2) stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI
(3) movsb、movsw:把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI
(4) scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI
(5) cmpsb、cmpsw:把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI
(6) rep:重复其后的串操作指令。重复前先判断CX是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在LODS前。
上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器AX、计数器CX
涉及的标志位:DF、AF、CF、OF、PF、SF、ZF
二、使用举例
(1) 把当前数据段中偏移1000H开始的100个字节的数据传送到从偏移2000H开始的单元中
CLD
PUSH DS
POP ES
MOV SI,1000H
MOV DI,2000H
MOV CX,100
NEXT: LODSB
STOSB
DEC CX
JNZ NEXT
CLD
PUSH DS
POP ES
MOV SI,1000H
MOV DI,2000H
MOV CX,100
NEXT: MOVSB
DEC CX
JNZ NEXT
CLD
PUSH DS
POP ES
MOV SI,1000H
MOV DI,2000H
MOV CX,3
NEXT: MOVSB
LOOP NEXT
CLD
PUSH DS
POP ES
MOV SI,1000H
MOV DI,2000H
MOV CX,3
REP MOVSB
(2) 判断AL中的数字是否为16进制数
STRING DB '0123456789ABCDEFabcdef'
STRLEN EQU $-STRING
...
CLD
MOV DX,SEG STRING
MOV ES,DX
MOV CX,STRLEN
MOV DI,OFFSET STRING
NEXT: SCASB
LOOPNZ NEXT
JNZ NOT_FOUND
FOUND:
...
NOT_FOUND:
...
(3) 其它实例
start:
mov ax,#BOOTSEG
mov ds,ax
mov ax,#INITSEG
mov es,ax
mov cx,#256
sub si,si
sub di,di
rep
movw
movl $1024*5,%ecx
xorl %eax,%eax
xorl %edi,%edi
cld;rep;stosl
movl $pg0+7,_pg_dir
movl $pg1+7,_pg_dir+4
movl $pg2+7,_pg_dir+8
movl $pg3+7,_pg_dir+12
movl $pg3+4092,%edi
movl $0xfff007,%eax
std
1: stosl
subl $0x1000,%eax
jge 1b
【汇编】字符串处理指令 stosb、lodsb、movsw、scasb、rep的更多相关文章
- Win32汇编之其他指令
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地 ...
- 汇编语言--微机CPU的指令系统(五)(字符串操作指令)
(11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...
- 汇编 REPNE/REPNZ 指令,SCASB 指令
知识点: REPNE/REPNZ 指令 SCASB 指令 一.SCASB 指令 cmp byte ptr [edi],al //对标志位的影响相当于sub指令 //同时还会修改寄存器EDI的值:如 ...
- 汇编 REPE/REPZ 指令,CMPSB指令
知识点: REPE/REPZ 指令 CMPSB 指令 一.CMPSB //cmp //sub //SCASB//scasw//scasd cmp byte ptr [edi],al //对标志位的 ...
- 汇编总结:mov指令
mov指令的作用: mov指令可能是汇编里用的最多的指令了,完成c语言里的赋值. mov指令种类: 1.普通的mov指令 2.做符号扩展的movs 3.做零扩展的movz 1.普通mov的种类有: m ...
- 8051汇编:EQU指令
关于EQU汇编指令 EQU是英文单词equal的缩写,因此我们也能对EQU指令有一个初步的认识:做等价替换使用. 在8051汇编语言中,EQU用于定义一个符号常量,其效果不会带来存储空间的占用(这和C ...
- 汇编 REPNE/REPNZ指令,SCASW指令,SCASD指令,SCAS指令
知识点: REPNE/REPNZ 指令 SCASW 指令 SCASD 指令 SCAS 指令 一.SCASW 指令 //SCASB cmp word ptr [edi],al //对标志位的影响 ...
- 汇编之JCC指令
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明.2019-09-06,21:59:16.作者By-----溺心与沉浮----博客园 JCC指令决定它跳不跳转跟别的没关系,只跟EFLAG标 ...
- Win32汇编常用算数指令
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地 ...
随机推荐
- ASP.NET 5 Hello World
ASP.NET 5系列教程 (二):Hello World 本篇文章内容比较基础,主要是向大家展示如何创建一个 ASP.NET 5 工程,主要包含内容如下: 创建ASP.NET 5 工程 添加 T ...
- 让Windows 8 / 8.1 以及 Windows Server 2012 / 2012 R2的任务管理器的性能面板,显示磁盘数据
运行[diskperf -y],关闭任务管理器,重新打开即可.
- JS解析DataSet.GetXML()方法产生的xml
在实际的项目制作过程中,经常要采用ajax方式来进行,当然,这就免不了要进行数据交换.如果采用拼接字符串的方式来进行,不仅拼接的时候麻烦,而且在拆解的时候更加麻烦,一旦遇到特殊字符,那么就是灾难了.因 ...
- Visual Studio 中的单元测试 UNIT TEST
原文:Visual Studio 中的单元测试 UNIT TEST 注:本文系作者原创,可随意转载,但请注明出处.如实在不愿注明可留空,强烈反对更改原创出处.TDD(Test-Driven Devel ...
- CF - 96D - Volleyball
题意:一个无向图,有n个点,m条边,每条边有距离w,每个点有两个属性(1.从这点出发能到的最远距离,2.从这点出发的费用(不论走多远都一样)),一个人要从点x到点y,问最小费用是多少. 题目链接:ht ...
- 鼠标hover事件
JS: // ========== // = 鼠标hover事件 = // ========== function showHide (btn,box) { $(btn).hover(function ...
- 使用Clean() 去掉由函数自动生成的字符串中的双引号
有时候由Excel单元格函数軿凑出来的字符串会自带双引号 效果如下: 想这种这个情况,刚好我们軿凑出来的是SQL语句, 执行的时候是去掉双引号, 这时候可以使用Excel自带的函数来去掉双引号 Cle ...
- Asp.Net Identity 深度解析 之 注册登录的扩展
关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下 http://www.asp.net/identity 这里不在赘余. 很多人认为 ...
- Oracle常用函数:DateDiff() 返回两个日期之间的时间间隔自定义函数
首先在oracle中没有datediff()函数可以用以下方法在oracle中实现该函数的功能:1.利用日期间的加减运算天:ROUND(TO_NUMBER(END_DATE - START_DATE) ...
- javascript转换.net DateTime方法 (比如转换\/Date(1426056463000)\/)
function getDate(str_time) { var re = new RegExp('\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/'); va ...