pocku 0 Newbie Poster

I'm having trouble with drawing squares on the x86 assembler using the XGA 8-bit linear frame buffer. I'm suppose to draw a large square containing a grid of smaller 12x12 squares using my own functions and this is what I have so far:

[SECTION .text]
;----------------------------------------------------------------------------

; code belongs in this section starting here

mystart:
         mov  ah, 0fh             ; BIOS function - get current video mode
         int  10h                 ; call BIOS video interrupt
         mov  [vidmode], al       ; save the current video mode

         mov  eax, 4f02h          ; SVGA function - set SVGA video mode
         mov  ebx, XGAMODE        ; select XGA video mode
         int  10h                 ; call BIOS video interrupt

	
          mov ecx, 12	
          mov eax, xPos

sqrver:         
         push ecx

         mov ebx, yPos
         mov ecx, width

         mov edx, eax
         
         push eax
         mov eax, ebx
         mov ebx, XGAXRES
         mul ebx
         pop ebx
         add eax, ebx

vloop:
         mov byte [fs:eax], 15
         add dword eax, 800
         dec ecx

         jnz vloop            

         add dword eax, 5
         pop ecx
         loop sqrver
         
         mov ecx, 12
         mov ebx, yPos

sqrhori:         
         push ecx

         mov eax, xPos
         mov ecx, width

         mov edx, ebx
         
         push eax
         mov eax, ebx
         mov ebx, XGAXRES
         mul ebx
         pop ebx
         add eax, ebx

hloop:
         mov byte [fs:eax], 15
         inc eax
         dec ecx

         jnz hloop            

         add dword ebx, 5
         pop ecx
         loop sqrver


         mov  ah, 1               ; select DOS function - input character
         int  0f1h                ; call OS function to wait for key press

         mov  ah, 00h             ; BIOS function - set video mode
         mov  al, [vidmode]       ; restore the old video mode
         int  10h                 ; call BIOS video interrupt

         ret

;----------------------------------------------------------------------------
[SECTION .data]
;----------------------------------------------------------------------------

; all initialized data variables and constant definitions go here

XGAMODE  equ  4103h               ; XGA video mode code (w/ linear addr bit)
XGAXRES  equ  800                ; horizontal resolution of XGA screen
XGAYRES  equ  600                 ; vertical resolution of XGA screen

xPos     db  300
yPos     db  50
width    equ  400

;----------------------------------------------------------------------------
[SECTION .bss]
;----------------------------------------------------------------------------

; all uninitialized data elements go here

vidmode  resb 1                   ; the old video mode

When I try to run it, only a few lines appear on the screen and the program lags for a bit before exiting...

Any help would be appreciated.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.