将一个字符串存到另外一个地址:
00401000 > BA 90204000 mov edx, 00402090 ;源地址
00401005 B8 F0204000 mov eax, 004020F0 :目的地址
0040100A 8BF2 mov esi, edx :源地址
0040100C 8BF8 mov edi, eax :目的地址
0040100E B9 01000000 mov ecx, 0x1 :循环次数为1
00401013 F3:A4 rep movs byte ptr es:[edi], byte ptr [esi] :字节为单位传递
00401015 8036 00 xor byte ptr [esi], 0x0 ;如果为0就是字符串结尾
00401018 ^ 75 F4 jnz short 0040100E ;判断是否继续传送字符串
0040101A 90 nop
指针A的内容存放到指针B下
mov esi,A //存放指针A的首地址
mov edi,b //存放指针b的首地址
mov ecx,1 //循环次数
rep movs byte ptr es:[edi],byte ptr [esi] ;以字节问单位传递
xor byte ptr [esi],0 ;如果源地址为0就跳出循环,不传送
jnz cycle
指针A的内容存放到指针B下
mov esi,A
mov edi,B
mov ecx,5
rep movs byte ptr es:[edi],byte ptr [esi]
源地址传送目的地址
00401000 > B9 05000000 mov ecx, 0x5 ;次数
00401005 BE 00104000 mov esi, 00401000 ;源地址
0040100A BF 00204000 mov edi,00402000 :目的地址
0040100F FC cld
00401010 F3:A4 rep movs byte ptr es:[edi], byte ptr [esi]
00401012 90 nop
00401000 > B8 02000000 mov eax, 0x2 ;内容
00401005 90 nop
00401006 90 nop
00401007 BF 00204000 mov edi,0040200 ;目的地址
0040100C B9 06000000 mov ecx, 0x6 ;次数
00401011 FC cld
00401012 F3:AA rep stos byte ptr es:[edi]
查找字符:
00401000 > B9 00001000 mov ecx, 100000 ; 需要查找字符的长度
00401005 B0 8B mov al, 8B ; 查找的字符
00401007 BF 10204000 mov edi, 00402010 ; 需要查找字符的首地址
0040100C F2:AE repne scas byte ptr es:[edi] ; 循环查找字符
0040100E ^ 75 F0 jnz short <ModuleEntryPoint> ; 找不到返回继续查找
00401010 BE 00001000 mov esi, 100000 ; 总长度
00401015 2BF1 sub esi, ecx ; 总长度减去剩下的数字就是偏移量+首地址了-1
00401017 90 nop
00401018 90 nop
指针A开始的Size大小内存移动到B处
mov esi,A
mov edi,B
mov ecx,Size
cld
rep movsb //rep movs byte ptr es:[edi], byte ptr [esi]
指针A开始的Size大小的内存填充eax的值
xor eax,eax
mov edi,A
mov ecx,Size
cld
rep stosb //rep stos byte ptr es:[edi]
字符串赋值,查找,交换
最新推荐文章于 2019-06-10 17:50:40 发布