请问如何用汇编实现 Fillmemory函数那样的效果啊

laviewpbt 2012-03-28 01:57:09
CopyMemory 函数可以用类似如下的代码完成,那Fillmemory呢,一直没有想到该如何利用船指令实现这个功能。

mov esi, PtTop
mov edi, RowPtr
mov ecx, ImgStride
mov ebx, ecx
and ecx, 3
rep movsb
mov ecx, ebx
shr ecx, 2
rep movsd

...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小么小儿郎 2012-03-29
  • 打赏
  • 举报
回复
fillmemory用得是stos类指令。想要快速的话去用SSE指令撒。
  • 打赏
  • 举报
回复
stosd性能还不如mov,可以用movq、movdqa/movdqu来提高性能,或者用浮点指令fist qword ptr [addr]来进行64位写,这应该是最通用的64位传输指令了,486dx或者386+387都能支持。
PctGL 2012-03-28
  • 打赏
  • 举报
回复
stos
不过,movs,stos这类东西,效率不高
WJN92 2012-03-28
  • 打赏
  • 举报
回复
我觉得呢,如果你要效率的话,你就要放弃开发效率

每一个汇编代码应该针对你需要的功能去写,这样的话,效率也会有所提高

调用过程或函数的也是有开销的.
laviewpbt 2012-03-28
  • 打赏
  • 举报
回复
谢谢楼上的,我自己来理解下。
zara 2012-03-28
  • 打赏
  • 举报
回复
这个,不是这样的吧。
楼主的要求,只要将 eax 置 0,movs 类指令换成 stos 类指令大致就可以了。
楼主这么问,要么是对上面那段汇编没真的看明白,要么就是对汇编指令还不熟悉。
masmaster 2012-03-28
  • 打赏
  • 举报
回复
用指定字符填充内存块,不需要串操作指令。串操作指令通常需要指定源和目的地址。而填充操作的“源”只是指定的字符。所以不需要串操作指令。直接用一个循环就可以啦。在C里,就是通过一个for循环实现

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧