首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在32位汇编语言中快速擦除视频RAM的大块

如何在32位汇编语言中快速擦除视频RAM的大块
EN

Stack Overflow用户
提问于 2019-05-15 22:39:44
回答 1查看 151关注 0票数 1

我正在尝试让我自己的简单的3D渲染引擎完全从零开始。所以我从DOS运行它,切换到32位PM和所有这些东西……

最后,我得到了投影和线框渲染的工作变换,但我得到了非常琐碎的问题。渲染我的场景后,需要清除LFB,以便下一帧可以再次在那里绘制。

但是使用rep stosd或简单的mov-loop循环真的很慢,我的每秒平均速度从60+下降到10。

我使用的是高分辨率1280x1024像素,每个像素有4个字节,所以我需要从地址0xFC000000开始将1280*1024=1310720 dword= 5242880字节设置为0。

有没有什么方法可以让记忆立即消失呢?(我想保留这个决议)

EN

回答 1

Stack Overflow用户

发布于 2019-05-16 19:24:24

如果您只有SSE可用,则可以使用带有movntpspxor一次处理16个字节。如果您有可用的SSE2,您可以使用pxormovdqu一次处理16个字节(如果对齐到16个字节,则使用速度更快的movdqa )。如果AVX512指令可用,您还可以使用带有xmm寄存器的vpxor和带有相应zmm寄存器的movntps来执行64字节。

如果你想使用SSE和/或AVX512指令,你需要set some control registers

代码语言:javascript
复制
mov eax, cr0
and ax, 0xFFFB      ;clear coprocessor emulation CR0.EM
or ax, 0x2          ;set coprocessor monitoring  CR0.MP
mov cr0, eax
mov eax, cr4
or ax, 3 << 9       ;set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time
mov cr4, eax
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56151987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档