Open Library

Retour vers l'index des ressources DOS.

Assembleur avec TASM (Turbo Assembler) sous DOS.

Afficher un message "Hello World".

.MODEL TINY     ;La directive MODEL Definit le modele memoire utilise 
                ;par ce programme.
                ;Le modele TINY utilise au maximum 64K octets pour
                ;les sections CODE, DATA et STACK du programme.

.STACK          ;La directive STACK permet au compilateur de creer
                ;un segment STACK.

.DATA           ;La directive DATA permet au compilateur de creer
                ;un segment DATA afin d'y placer des variables et
                ;d'y associer des adresses memoire physique.
        
		;Declaration d'une chaine de caracteres.
		;les 2 nombres 13 suivit de 10 indique un retour chariot
		;Le caractere $ indique la fin de la chaine de caracteres.
		HELLO db "Hello World!",13,10,'$'

.CODE           ;La directive CODE permet au compilateur de creer
                ;un segment CODE qui contient les instructions
                ;executables du programme.

MAIN PROC       ;Debut de la procedure principale MAIN du programme.
        
        mov ax, @DATA   ;Place l'adresse de DATA dans le registre AX.
        mov ds, ax      ;Place la valeur de AX dans DS (Data Segment).
                        ;Car on ne peut directement placer l'adresse
                        ;de DATA dans DS donc on transite par le registre AX.

        mov dx, offset HELLO    ;Pointe vers la chaine de caracteres HELLO
        
        mov ah, 9               ;Fonction d'impression a l'ecran
                                ;la chaine de caracteres.
        
        int 21h                 ;Execute la fonction.

        mov ax, 4C00h           ;Fonction de fermeture du programme.
        int 21h                 ;Execute la fonction.

MAIN ENDP       ;Fin de la procedure MAIN du programme.
END MAIN        ;Indique la fin du fichier en specifiant ici
                ;le point d'entree du programme MAIN.

Afficher un pixel sur l'ecran en mode VGA 13h.

.MODEL SMALL    ;Definit le modele memoire sur SMALL.
                ;Ce modele memoire permet d'utiliser au maximum
                ;64K octets pour DATA (donn‚es) et 64K octets pour le CODE.
                ;Ce modele est courament utilise.

.STACK 100h     ;Reserve 100h octets pour le segment STACK.

.CODE           ;Segment CODE

MAIN PROC       ;Debut de la procedure principale MAIN du programme.
        
        mov ax,13h      ;Initialisation du mode 13h:
        int 10h         ;Mode VGA en 256 couleurs 320x200.

        mov ax,0A000h   ;0A000h est l'adresse memoire video du mode VGA 13h
        mov es,ax       ;On charge l'adresse m‚moire video dans ES.

        mov bx,7D64h    ;Positionnement d'un pixel au centre de l'ecran.
                        ;7D64h en hexadecimal = 32160 en decimal.

        mov al,0ah      ;Stoque la couleur dans le registre al.

        mov es:[bx],al  ;On place l'offset (deplacement memoire) BX
                        ;sur l'adresse memoire ES, la couleur AL.
                        ;Ce qui permet d'afficher directement un pixel 
                        ;colore sur l'ecran.

        mov ah,07h      ;Attend qu'une touche soit pressee sans afficher
        int 21h         ;Le caractere
        
        mov ah,00h      ;Retour en mode texte standard de DOS:
        mov al,03h      ;80 colonnes x 25 lignes.  
        int 10h

        mov ah,4ch      ;Termine le processus DOS actuel.
        int 21h

MAIN ENDP       ;Fin de la procedure MAIN du programme.
END MAIN        ;Indique la fin du fichier et le point d'entree du programme.

Afficher une ligne en mode VGA 13h.

.MODEL SMALL    ;Definit le modele memoire sur SMALL.
                ;Ce modele memoire permet d'utiliser au maximum
                ;64K octets pour DATA (donn‚es) et 64K octets pour le CODE.
                ;Ce modele est courament utilise.

.STACK 100h     ;Reserve 100h octets pour le segment STACK.

.CODE           ;Segment CODE

MAIN PROC       ;Debut de la procedure principale MAIN du programme.
        
        mov ax,13h      ;Initialisation du mode 13h:
        int 10h         ;Mode VGA en 256 couleurs 320x200.

        mov ax,0A000h   ;0A000h est l'adresse memoire video du mode VGA 13h
        mov es,ax       ;On charge l'adresse memoire video dans ES.

        mov bx,7D00h    ;Positionnement sur la ligne horizontale du milieu.
                        ;7D00h en hexadecimal = 32000 en decimal.

        mov al,22h      ;Stoque la couleur dans le registre al.

        mov cx,320      ;Le registre CX sert de compteur pour la ligne.
                        ;Cette ligne sera incremente d'un pixel par unite.
                        ;La ligne fera donc ici 320 pixels de long.
        LINE:
                mov es:[bx],al  ;Positionnement du nouveau pixel a afficher.
                inc bx          ;On incremente le registre BX de 1.
                loop LINE       ;Boucle vers LINE en decrementant CX de 1
                                ;jusqu'a ce que CX arrive a zero.
                                ;Donc la boucle continue temps que CX est
                                ;superieur a zero. 
                                ;Cette boucle va donc afficher une ligne.

        mov ah,07h      ;Attend qu'une touche soit pressee sans afficher
        int 21h         ;Le caractere
        
        mov ah,00h      ;Retour en mode texte standard de DOS:
        mov al,03h      ;80 colonnes x 25 lignes.  
        int 10h

        mov ah,4ch      ;Termine le processus DOS actuel.
        int 21h

MAIN ENDP       ;Fin de la procedure MAIN du programme.
END MAIN        ;Indique la fin du fichier et le point d'entree du programme.


Afficher un rectangle en mode VGA 13h.

.MODEL SMALL    ;Definit le modele memoire sur SMALL.
                ;Ce modele memoire permet d'utiliser au maximum
                ;64K octets pour DATA (donn‚es) et 64K octets pour le CODE.
                ;Ce modele est courament utilise.

.STACK 100h     ;Reserve 100h octets pour le segment STACK.

.CODE           ;Segment CODE

MAIN PROC       ;Debut de la procedure principale MAIN du programme.
        
        mov ax,13h      ;Initialisation du mode 22h:
        int 10h         ;Mode VGA en 256 couleurs 320x200.

        mov ax,0A000h   ;0A000h est l'adresse memoire video du mode VGA 13h
        mov es,ax       ;On charge l'adresse memoire video dans ES.

        mov bx,7D64h    ;Positionnement sur la ligne horizontale du milieu.
                        ;7D64h en hexadecimal = 32160 en decimal.

        mov al,2Bh      ;Stoque la couleur dans le registre AL.

        mov di,20       ;DI contient la hauteur du rectangle
        ROW:            ;Label ROW (Colonne)

                mov cx,25       ;CX = compteur pour la largeur du rectangle.

                LINE:           ;Label LINE (Ligne)
                        
                        mov es:[bx],al  ;Positionne un pixel sur l'ecran.
                        inc bx          ;On incremente le registre BX de 1.
                        
                        loop LINE       ;Boucle de LINE et decremente CX de 1.
                                        ;jusqu'a ce que CX arrive a zero.
                                        ;Fin de boucle LINE.
                                        ;Une ligne du rectangle est affichee.
                
                add bx,320      ;On ajoute 320 a l'offset memoire BX:
                                ;Passage a la ligne suivante.
                sub bx,25       ;Soustrait de BX la longueur definie par CX.
                dec di          ;Decremente DI de 1 a chaque nouvelle ligne
                                ;affichee afin que la hauteur corresponde
                                ;a celle definie ci-dessus.
                
                cmp di,0        ;Compare DI a 0.
                jne ROW         ;Si DI n'est pas egale a zero:
                                ;On entre a nouveau dans la boucle ROW afin
                                ;de creer une nouvelle ligne jusqu'a ce que
                                ;la hauteur du rectangle soit atteintfe. DI 
                                ;sera egale a zero dans ce cas.
               
        mov ah,07h      ;Attend qu'une touche soit pressee sans afficher
        int 21h         ;Le caractere
        
        mov ah,00h      ;Retour en mode texte standard de DOS:
        mov al,03h      ;80 colonnes x 25 lignes.  
        int 10h

        mov ah,4ch      ;Termine le processus DOS actuel.
        int 21h

MAIN ENDP       ;Fin de la procedure MAIN du programme.
END MAIN        ;Indique la fin du fichier et le point d'entree du programme.

Retour en haut de page.