Affichage d'un rectangle en assembleur x86

Contenu du snippet

Tracé de lignes horizontales/verticales en mode MCGA(320*200*256)
Les coordonnées du premier point seront passées dans AX et BX, la longueur dans CX.
La direction (horizontale/verticale) sera donnée par DX (0/1)

Source / Exemple :


Data segment

data ends

Code segment
Assume CS : Code , DS : data

Deb :

MOV AX, data
MOV DS, AX

MOV AH, 0               ;mode VGA
MOV AL, 13h
INT 10h

MOV AX, 0A000h     ;Segment écran
MOV ES, AX

  
    
MOV AX, 30
MOV BX, 50
MOV CX, 100
mov dx,0
call droite

MOV AX, 30
MOV BX, 50
MOV cX, 20
mov dx,1
call droite

MOV AX, 30
MOV BX, 70
MOV cX, 101
 mov dx,0
call droite
 

	
MOV AX, 130
MOV BX, 50
MOV cX, 20
mov dx,1
call droite

MOV AH,8
INT 21h

 

MOV AH, 0    
MOV AL, 3
INT 10h

MOV AH, 4Ch
INT 21h

droite proc
   
 
               
mov si,bx
mov di,ax
mov ax,320
push dx
mul bx 
add di,ax 
pop dx
cmp dx,0
      je boucle2
          boucle:
               inc si
               mov es:byte ptr[di],95
               add di , 320
                cmp si,200 
                 jge fin            
	loop boucle
 
        jmp fin
boucle2:
              inc si
              mov es:byte ptr[di],95
              inc di
             cmp si , 320  
             jge fin
loop boucle2
	
fin:
ret
endp droite

efface_ecran PROC
	
	MOV DI, 0
	MOV CX,320                     
	bigboucle2:                    
		PUSH CX          
		MOV CX,200         
		  boucle3:         
		   MOV AL, 0
		   MOV ES:[DI], AL  
		   INC DI       
                                  LOOP boucle3
	POP CX
	LOOP bigboucle2
	RET
efface_ecran ENDP

Code ends
END deb

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.