61-byte Mandelbrot generatorAssembler/80386

This is a small implementation of a mandelbrot generator. I've found this gem a some time ago in a swedish fido-net meeting as a UUencoded file. All comments have been inserted by me (John Eckerdal). I have tried to give some information about what the program acutally calculates. This information might however be incorrect.
The source and a compiled version is available for download (1092 bytes).

;
; mandelbrot plotter, 61 bytes - Tenie Remmel
;
; assumes on startup:
;   ax = 0000h
;   di = fffeh
;

        IDEAL
        MODEL TINY
        P386
        CODESEG
        ORG 100h

start:
        push    0A000h          ; set segment
        pop     es
        mov     al,013h         ; set video mode
        int     10h
        stosw
        mov     cl,200          ; screen height
outer_loop:
        mov     si,320          ; screen width
inner_loop:
        mov     bp,79           ; #iterations
        xor     bx,bx           ; zero re-part
        xor     dx,dx           ; zero im-part

complex_loop:
        push    dx
        mov     ax,bx
        sub     ax,dx
        add     dx,bx
        imul    dx              ; u:=re^2-im^2;
        mov     al,ah           ; u:=u/100h
        mov     ah,dl
        pop     dx
        xchg    bx,ax
        sub     bx,si           ; new_re:=u-width;
        imul    dx
        shld    dx,ax,9         ; 2*re*im
        sub     dx,cx           ; new_im:=2*rm*im-height
        test    dh,dh           ; if j>=256 plot pixel
        jg      short plot_color
        dec     bp              ; next iteration
        jne     short complex_loop

plot_color:
        xchg    bp,ax
        stosb                   ; plot pixel
        dec     si
        jne     short inner_loop
        loop    short outer_loop

        ret                     ; end program

end     start
Gem writer: Tenie Remmel
last updated: 1998-06-07