Copy Link
Add to Bookmark
Report
Asmbeginer Issue 1
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, caractère, sur les ports entrées sorties
Le registre EBX:
bl,bh,bx : registre de base d'une structure mémoire
Le registre ECX:
cl,ch,cx : utilisé pour les itérations et répétitions, boucles..
Le registre EDX:
dl,dh,dx : utilise pour les entrées sorties(matériels)
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 ***
*************