stosb,stosw,stosd汇编指令
stosb, stosw, stosd 汇编基础
我们来学习下另⼀组与字符串处理的指令。这组指令需要以指定的字符填充整个字符串或数组时⽐较有⽤。那么我们今天学习的这组指令就是stosb, stosw, stosd。这三个指令把al/ ax/ eax的内容存储到edi指向的内存单元中,同时edi的值根据⽅向标志的值增加或者减少。同REP前缀联合使⽤的时候,这组指令需要填充整个字符串或数组时候⽐较有⽤。例如我们的MS 提供的RtlZeroMemory函数,⽤的就是这三组指令来填充的。。
举个例⼦:假设此时我声明了⼀个变量
汇编判断指令szBuffer db 'hello world', 0
我想通过⼀个循环将其hello world的这个字符串填充为0.
那么此刻我们的代码该怎么写,⼤家先思考下。
呵呵,那我就来给⼤家演⽰下:
mov edi, szBuffer
xor eax, eax
mov ecx, 11
cld
rep stosb
此刻执⾏完以上指令后,就会将我们szBuffer标号处(数据偏移)的内存单元⽤al来进⾏填充掉。
上⾯呢就是简单的⼀个⽤0填充的过程,当然上⾯这个我们是⽤字节来填充的。⽽且没有加判断,那么下⾯我给⼤家⼀个之前写的⼀个ZeroMemoy过程,这个做了很多判断以及优化了下,给⼤家学习下。⽐微软提供的库函数执⾏效率要⾼⼀些。
proc ZeroMemory lpBuffer:DWORD, BufferSize:DWORD
push edi
mov edi, [lpBuffer]
mov ecx, [BufferSize]
xor eax, eax
mov edx, ecx
cld
and edx, 3
shr ecx, 4
rep stosd
mov ecx, edx
rep stosb
pop edi
ret
endp
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论