assembly - 在 mandelbrot 集代码 SSE 汇编中找不到错误
问题描述
我使用 SSE 在汇编中编程 mandelbrot 集。我使用中断:
mov ax,0x4F02
mov bx,0x107
int 0x10
将视频模式设置为 256 色的 1280x1024 像素,然后我启用 A20 门并正确切换到 32 位保护模式,并允许 cr0 和 cr4 中的 fpu 和 sse。我测试了一些简单的 SSE 指令,它们毫无例外地工作。但是后来我做了 mandelbrot 设置,当我启动它时什么都没有渲染(绘制像素/线条工作正常)。我也尝试使用调试器单步执行代码,但我没有发现任何错误,有人可以看看我的代码吗?感谢任何帮助(在 nasm 中编译,在 freedos 中运行)
mov edx,0xA0000
xorps xmm7,xmm7
repeat:
movupd xmm0,xmm7
movupd xmm5,[centerimage]
subpd xmm0,xmm5
movupd xmm5,[zoom]
divpd xmm0,xmm5
movupd xmm6,xmm0
xorps xmm0,xmm0
xor ecx,ecx
nextiteration:
movupd xmm1,xmm0
mulpd xmm1,xmm1
hsubpd xmm1,xmm1
movupd xmm2,xmm0
shufpd xmm2,xmm2,0x1
mulpd xmm0,xmm2
haddpd xmm0,xmm0
movsd xmm0,xmm1
addpd xmm0,xmm6
movupd xmm1,xmm0
mulpd xmm1,xmm1
haddpd xmm1,xmm1
ucomisd xmm1,[double4]
ja getcolor
inc ecx
cmp ecx,0xFF
jb nextiteration
xor al,al
jmp drawpixel
getcolor:
mov al,cl
drawpixel:
movupd xmm0,xmm7
movupd xmm5,[double1double1280]
mulpd xmm0,xmm5
haddpd xmm0,xmm0
cvtsd2si edi,xmm0
mov [edx+edi],al
movupd xmm5,[double1double0]
addpd xmm7,xmm5
ucomisd xmm7,[screenX]
jb repeat
movsd xmm7,[double0]
movupd xmm5,[double0double1]
addpd xmm7,xmm5
movupd xmm0,xmm7
shufpd xmm0,xmm0,1
ucomisd xmm0,[screenY]
jb repeat
;movhpd xmm7,[double0]
cli
infloop:
hlt
jmp infloop
centerimage dq 640.0,512.0
zoom dq 50.0,50.0
double1double1280 dq 1.0,1280.0
double1double0 dq 1.0,0.0
double0double1 dq 0.0,1.0
screenX dq 1280.0
screenY dq 1024.0
double0 dq 0.0
double4 dq 4.0
解决方案
推荐阅读
- vue.js - 我的事件没有从我的父组件发出
- javascript - 在客户端分配带有不受信任数据的 JavaScript 变量是否是 XSS 漏洞?
- flutter - 如何在 FutureBuilder 小部件的 builder 方法中获取未来的结果?
- sql - 在 SQL Server 中使用单个案例表达式更新多列
- python - 将数组的项形式索引添加到另一个数组{Python}
- html - 无法在 Web 服务器上加载图像和插件
- javascript - 将数据添加到包含特定数据且位于多个 div 中的 div
- visual-studio - AWS Lambda SQS 触发器
- flutter - Flutter WebChromeClient 等效,使用 openFileChooser 和 onShowFileChooser
- amazon-web-services - 创建请求正文和模板 API GATEWAY CDK