首页 > 解决方案 > 在 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

标签: assemblynasmssesimdmandelbrot

解决方案


推荐阅读