
Asmbeginer en ezine !!!                                                               aout 1999
=================================================================================================
http://www.multimania.com/asmbeginer                            (c) putois

                                ****************
                                ** Apprendre  **
                                **            **
                                ****************
                                     ***       ***
                                     *** l'asm ***
                                     *************

INDEX:
-----
             1]Role des directives
             2]Ta toujours pas compris
             3]Les registres
             4]Le mode texte


YO, yes encore un emag qui va parler de: "comment programmer avec TASM.Non ce n'est pas des minis
how to,mais des vrais cours.

Non mon emag n'est pas fait pour des cours de cracks.

Let's begin!!
-------------

En deux mots par ou commencer?.C'est simple ya qu'a commencer par des sources simples,des .EXEcu
table,et bien sur de connaitre un minimum de directive propos par tasm.

1]Role de la directive
_-_-_-_-_-_-_-_-_-_-_-

Elle precise a tasm le type de memoire que l'on veut utiliser: Tiny,small,medium,compact,large,
huge,data16, pour le stack segment qui sert a creer le fichier .exe.

En voici quelque exemples:
--------------------------

data16 segment public
hello db 'hello world',13,13,'$'
data16 ends

code16 segment public
  assume cs:code16, ds:data16, ss:stack16
start16:
    mov ax:data16
    mov ds,ax
    mov dx,offset hello
    mov ah,4ch
com16 ends

stack16 segment stack
db 200h dup(?)
stack16 ends
end start16 

tasm /o toto.asm
tlink toto.obj

Exemple avec le model TINY
--------------------------

.model tiny
.stack
.data
   hello db 'hello world',13,10,'$'   ;affiche hello a l'ecran
.code

start:
    mov ax,@data
    mov ds,ax
    
    mov dx,offset hello       ;appel du texte
    mov ah,9h                 ;attend une touche
    int 21h                   ;de l'int 21h

    mov ah,4ch                ;procedure de sortie
    int 21h                   ;pour l'int 21h
end start

tasm /o toto.asm
tlink toto.obj

Note:pour les autres directives on a juste a remplace .model tiny par .model small par exemple.
Le 13,10 demande un retour a la ligne et le '$' marque la fin du texte que l'on veut afficher
avec la variable hello.

Tasm nous permet aussi de preciser le type de processeur de la machine Ex:.286,.386,.486,.586 ..

.386              
donnees segment para public use16
donnees ends

code segment para public use16
     assume cs:code, ds:donnees
start:
     mov bx,10   
     begin:

 
code ends

pile segment para stack use16 'stack'
     db 2048 dup(?)
pile ends
end start

Bon voila en quelque lignes, le tour pour les directives.

2]Vous n'avez toujours pas compris :(
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_

Pour ce qui est des .exe,les codes avec les .model tiny (par ex) sont preferables,plutot que la 
data16.Donc afin de creer un exe avec tasm le code se presente toujours comme ceci:

1)    .model tiny
      .stack
      .data
      .code

2)Entre la ligne .data et .code c'est la que viennent  les variables a afficher a l'ecran
par l'intermediare de DB.

3)  .model tiny
      .stack
      .data
      .code
   ---------------
begin:           -
  mov ax,@data   -
  mov ds,ax      --  begin: et indispensable pour marquer le debut du code,les 2 autres sont pour
                 -   la creation de l'.exe.Ensuite tu place ton code apres la ligne mov ds,ax
------------------   tu mets ce que tu veux, :))

mov ah,4ch                    ;procedure de sortie
    int 21h                   ;pour l'int 21h
end start

Bon ben la c'est comprehensible le mov ah,4ch fait quitter le programme par l'int 21h.
Note: l'int 22h fais planter windows.


3]Les registres
_-_-_-_-_-_-_-_

Leur role: utiliser les memoires du micro processeur.

Le registre EAX:
al,ah,ax :  Variable, caractre, sur les ports entres sorties

Le registre EBX:
bl,bh,bx : registre de base d'une structure mmoire

Le registre ECX:
cl,ch,cx : utilis pour les itrations et rptitions, boucles..

Le registre EDX:
dl,dh,dx : utilise pour les entres sorties(matriels) 

Voila en gros pour les registres de base.



4]Programmation de base: Le mode texte
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-

C'est comme on la vue avec le programme d'exemple du .model tiny ou l'on affiche hello world 
l'ecran.L'ecriture se fais par l'appel de la commande OFFSET initialiser dans le .code.
Pour afficher d'autre texte a l'ecran on a juste a rajouter ces lignes:

    mov dx,offset hello       ;appel du texte
    int 21h                   ;de l'int 21h

    mov dx,offset hello2       ;appel du texte
    int 21h                    ;de l'int 21h

Autant de variable que l'on veut utiliser pour afficher un texte on utilisera ces trois lignes 
qui sont bien sur indispensable en oubliant pas de l'ajouter dans les variables.
Le source:

.model tiny
.stack
.data
   hello  db 'hello world',13,10,'$'   ;affiche hello a l'ecran
   hello2 db 'second teste',13,10, '$' 
.code

start:
    mov ax,@data
    mov ds,ax
    
    mov dx,offset hello       ;appel du texte
    int 21h                   ;de l'int 21h

    mov dx,offset hello2       ;appel du texte
    int 21h                   ;de l'int 21h


    mov ah,4ch                ;procedure de sortie
    int 21h                   ;pour l'int 21h
end start

Effacer l'ecran:
----------------
C'est le role de l'int 10h et la int 0003h qui fais un cls en mode texte.ce code vous pouvez le
rajouter ou vous voulez dans la boucle start:

mov ax,0013h    ;initialise le mode texte de l'int 10h
int 10h         ;mode video
mov ax,003h     ;efface ecran
int 10h         ;mode video

Le mode 320*200
---------------

vga graphics:  a000
vga text    :  b800

Source:

 mov ax,0013h
   int 10h
   mov ax,0a000h  ; ou 0b800h
   mov es,ax      ; le registre es sert a appeler le registre ax qui active le mode texte

Bon voila,c'est tout pour ce premier emag on va voir ce que ca donne :) Thank !

*************
** end of ***
** part I ***
*************