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 *** *************