Chinaunix首页 | 论坛 | 博客
  • 博客访问: 504468
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-21 13:40
个人简介

技术改变命运

文章分类

全部博文(184)

文章存档

2020年(16)

2017年(12)

2016年(156)

我的朋友

分类: LINUX

2016-07-29 20:08:39

串操作指令

串操作指令共有5条:
1、串传送:movs

指令 一次操作字节数
movsb 1
movsw 2
movsd 4

2、串加载:lods
指令 一次操作字节数
lodsb 1
lodsw 2
lodsd 4

3、串送存:stos
指令 一次操作字节数
stosb 1
stosw 2
stosd 4

4、串比较:cmps
指令 一次操作字节数
cmpsb 1
cmpsw 2
cmpsd 4

5、串扫描:scas
指令 一次操作字节数 
scasb 1
scasw 2
scasd 4


串操作指令寻址方式

1、ds:esi保存源操数的首地址,
2、es:edi保存目的操作数的首地址,
3、串操作指令执行后,会自动修改esi和edi中保存的地址,增量由所使用的指令 决定,方向由DF标志位决定。

指令操作类型 DF==0         DF==1        
单字节 esi = esi + 1  
edi = edi + 1
esi = esi - 1
edi = edi - 1
双字节 esi = esi + 2
edi = edi + 2
esi = esi - 2
edi = edi - 2
四字节 esi = esi + 4
edi = edi + 4
esi = esi - 4
edi = edi  - 4
在执行串操作指令前可用cld指令将DF置0,用std指令将DF置1 。


重复前缀指令

如果在串操作指令前加上“rep”,将使操作重复进行,重复的次数由ecx中的值决定。串操作指令每执行一次,ecx中的值将自动减1,当ecx中的值为0时,将结束指令操作。
rep主要和movs,lod,sstos指令一起使用。比如:
mov ecx,5
rep movsb
指令movsb将执行5次。
repe/repne/repz/repnz主要和cmps,scas指令一起使用。比如:
repe cmpsb
指令重复执行的条件是:ecx =! 0 && ZF ==1,意思是如果串的某个字节相等就继续进行串比较直至ecx中的值为0 。repne表示字节不等时继续比较,repz和repnz意思类似。


串传送指令

串传送指令是从ds:esi指向的源地址复制一定数量的字节储存到es:edi所指向的目的地址,指令执行后,esi和edi中的值会被自动修改。

指令 含义
movsb 从ds:esi指向的源地址处复制一个字节储存到es:edi所指向的目的地址处
movsw 从ds:esi指向的源地址处复制两个字节储存到es:edi所指向的目的地址处
movsd 从ds:esi指向的源地址处复制四个字节储存到es:edi所指向的目的地址处


串加载指令

串加载指令是从ds:esi指向的地源地址处复制1或2或4字节到al或ax或eax ,指令指令执行后,esi中的值会被自动修改。

指令 含义
lodsb 从ds:esi指向的源地址处复制一个字节放到al中
lodsw 从ds:esi指向的源地址处复制两个字节放到ax中
lodsd 从ds:esi指向的源地址处复制四个字节放到eax中


串送存指令

串送存指令是将al或ax或eax中的值复制到es:edi所指向的目的地址处,指令执行后,edi中的佱会被自动修改。

指令 含义
stosb 将al中的一个字节复制到es:edi所指向的目的地址处
stosw 将ax中的两个字节复制到es:edi所指向的目的地址处
stosd 将eax中的四个字节复制到es:edi所指向的目的地址处


串比较指令

串比较指令是将ds:esi指向的源地址处的一个字或两个字节或四个字与es:edi所指向的目的地址处的一个字节或两个字节或四个字节进行比较(实际是源串减去目的串,结果不回送,只影响标志位),如查相等,ZF被置1。指令执行后,esi和edi中的值会被自动修改。

指令 含义
cmpsb 将ds:esi指向的源地址处的一个字节与es:edi所指向的目的地址处的一个字节相比较,如果相等,ZF=1
cmpsw 将ds:esi指向的源地址处的两个字节与es:edi所指向的目的地址处的两个字节相比较,如果相等,ZF=1
cmpsd 将ds:esi指向的源地址处的四个字节与es:edi所指向的目的地址处的四个字节相比较,如果相等,ZF=1


串扫描指令

串扫描指令是将al或ax或eax中的值与es:edi所指向的目的地址处的一个字节或两个字节或四个字节相比较(原理和串比较相同),如果相等,ZF被置1 指令执行后,edi中的值被自动修改。

指令 含义
scasb 相al中的值与es:edi所指向的目的地址处的一个字节进行比较,如果相等,ZF=1
scasw 相ax中的值与es:edi所指向的目的地址处的两个字节进行比较,如果相等,ZF=1
scasd 相eax中的值与es:edi所指向的目的地址处的四个字节进行比较,如果相等,ZF=1

阅读(1349) | 评论(0) | 转发(0) |
0

上一篇:嵌入汇编

下一篇:http https

给主人留下些什么吧!~~