参考网上内容
串操作指令
串操作指令共有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 |
重复前缀指令
如果在串操作指令前加上“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 |
本文详细介绍了五种串操作指令:串传送(movs)、串加载(lods)、串送存(stos)、串比较(cmps)和串扫描(scas)。每种指令都包括不同字节数的操作形式,并解释了其工作原理及寻址方式。
1083

被折叠的 条评论
为什么被折叠?



