Я программирую Мандельброта, установленного в сборке с использованием SSE. Я использую прерывание:
mov ax,0x4F02
mov bx,0x107
int 0x10
, чтобы установить режим видео 1280x1024 пикселей с 256 цветами, затем я включаю вентиль A20 и правильно переключаюсь в 32-битный защищенный режим и разрешаю fpu и sse в cr0 и cr4. Я протестировал несколько простых инструкций 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