Il codice di sopra è per la modalità reale del processore (16 bit), ed utilizza il servizio bios per accendere un pixel e risulta più lento rispetto ad un accesso diretto alla memoria video.
Ecco un semplice codice per accendere un pixel sullo schermo con indirizzamento diretto della memoria video, ovviamente sempre in modalità reale (in assembler non mi sono ancora mai cimentato su codici a 32 bit):
codice:
.MODEL Small
.Stack 100h
.CODE
START:
; Setting Video Mode
mov ax, 4F02h ; Set VBE Mode. BX = Desired Mode to Set
mov bx, 115h ; Switch to 800x600 16.8 Mega-Colors (8:8:8)
int 10h ; call BIOS service
; Indecing to Video Segment
mov ax, 0A000h ; 0A000H = Video memory star address.
mov es, ax ; 0A000H in Extra Segment.
; Deliver Pixel Parameters
mov bx, 600 ; Pixel location = X * XpixelsFormat + Y =
; Drawing the pixel in RGB mode
mov al, 255 ; Red color value (0 - 255)
mov es:[bx], al ; Write it to the Screen (address:offset, color)
inc bx
mov al, 255 ; Green color value (0 - 255)
mov es:[bx], al ; Write it to the Screen (address:offset, color)
inc bx
mov al, 255 ; Blu color value (0 - 255)
mov es:[bx], al ; Write it to the Screen (address:offset, color)
; Pause to admire results
mov ah, 0 ; wait for key
int 16h ; keyboard bios interrupt
End Start
Il codice è scritto per Turbo Assempler