技术改变命运
分类: LINUX
2016-07-29 20:08:39
串操作指令共有5条:
1、串传送:movs
指令 | 一次操作字节数 |
movsb | 1 |
movsw | 2 |
movsd | 4 |
指令 | 一次操作字节数 |
lodsb | 1 |
lodsw | 2 |
lodsd | 4 |
指令 | 一次操作字节数 |
stosb | 1 |
stosw | 2 |
stosd | 4 |
指令 | 一次操作字节数 |
cmpsb | 1 |
cmpsw | 2 |
cmpsd | 4 |
指令 | 一次操作字节数 |
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 |