1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
putpixel proc near ;procedure pour ecrire un pixel à l'ecran
mov ax,Y ;on met Y dans ax
mul multi ; ax = ax*multi
mov buff,ax ;on met ax dans buff
mov ax,100 ;on met 100 dans ax
mul buff ; ax = ax * buff doncc ax = 100 * multi * Y
mov buff,ax ;on met ax dans buff
mov buff+2,dx ;on met dx dans la 2eme case de buff
mov ax,Y ;on met Y dans ax
mul multi+2 ; ax = ax*multi[2]
mov buff+4,ax ; on met ax dans buff[4]
mov ax,10 ;on met 10 dans ax
mul buff+4 ; ax = ax*buff[4]
mov buff+4,ax ;on met ax dans buff[4]
mov buff+6,dx ;on met buff[6] dans dx
mov ax,buff ;on met buff[0] dans ax
add ax,buff+4 ;on ajoute buff[4]
mov buff,ax ;on met ax dans buff[0] on a donc fait buff[0] = buff[0] + buff[4]
mov ax,buff+2 ;on met buff[2] dans ax
adc ax,buff+6 ;ax = ax + buff[6] + CF (retenue)
mov buff+2,ax ;on remet ax dans buff[2]
mov ax,X ;on met X dans ax
add buff,ax ; ax = ax + buff[0]
adc buff+2,0 ;bizarre...
mov ax,buff ;on met buff[0] dans ax
mov dx,buff+2 ;on met buff[2] dans dx
mov cx,16 ;on met 16 dans cx
F1: sar dx,1 ;je ne comprend pas trop l'instruction sar
rcr ax,1 ;rcr non plus..
loop F1 ;on repete ca 16fois
mov num,ax ;on met ax dans num
mov ax,y ;on met y dans ax
cmp ax,Y ;on compare ax et Y donc y et Y
je pass ;si c'est egal on saute à pass sinon on continue
mov ax,y+2
cmp ax,Y ;on compare y[2] et Y si egal on va à pass
je pass ;sinon on continue
mov ax,y+4
cmp ax,Y ;idem avec y[4]
je pass
mov ax,y+6
cmp ax,Y ;idem avec y[6]
je pass
mov ax,y+8
cmp ax,Y ;idem avec y[8]
je pass
mov ax,y+10
cmp ax,Y ;idem avec y[10]
je pass
mov ax,y+12
cmp ax,Y ;idem avec y[12]
je pass
mov ax,y+14
cmp ax,Y ;on compare Y et y[14]
jne bypass ;si pas egal on saute a bypass sinon on continue
pass: ;la fameuse etiquette pass
mov ah,4fh
mov al,05h ;interuption permettant un controle CPU de la fenetre video VESA
mov bh,00h
mov bl,00h
mov dx,num ;dx contient l'adresse de la memoire video
int 10h ;on lui met num
bypass: ;etiquette bypass
mov ax,0A000h ;on passe a ax l'adresse de l'ecran
mov es,ax ;qu'on passe ensuite a es
mov ax,buff ;on met buff[0] dans ax
mov di,ax ;qu'on met ensuite dans di
mov al,[si] ;??????
stosb ;stocke le contenu de AL dans la mémoire d'adresse edi et incr ou decr de 1 unité,je ne comprend pas trop...
inc si ;si++
ret ;fin de cette procédure
endp |
Partager