begin process at 2012 05 24 03:27:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

divers

 > MICRO-ORGANISME CONTRE BARDACK :D

MICRO-ORGANISME CONTRE BARDACK :D


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :divers Niveau :Initié Date de création :27/04/2004 Vu :4 138

Auteur : Digital snake

Ecrire un message privé
Site perso
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

ceci est l'etude (tres simpliste ) de la propagation de bactérie dans un milieu fermé

Projet ESI , Asm n°2

un chti clin d'oeuil a notre ami Bardack =D

Source

  • .model small
  • .stack 100h
  • .486
  • jumps
  • locals
  • extrn random : proc
  • extrn InitRnd : proc
  • ;==========================================
  • ; donne
  • ;==========================================
  • .data
  • asci db 47 ;va etre utilisé pour le compteur de mort ;)-->la faucheuse [init='0']
  • asci2 db 48 ;deuxieme chiffre du compteur
  • proximite DW 0 ;Nombre de Micro orga qui sont suceptibles d entourer un congenère
  • handle dw ? ;Handle utiliser pour la manipulation de fichier
  • cinq dw 5 ; |
  • deux dw 2 ; |-> variables utilisées pour les divisions
  • trente dw 30 ; |
  • posx dw ? ; Coordonnée en abscisse
  • posy dw ? ; Coordonnée en Ordonnée
  • superpose DW 0 ; Boolean , declarant si il y a supperposition ou non
  • efface dw 0 ;boolean reglant la couleur 1=colorie en noir :)
  • reproduction dw 0 ;boolean reglant le check reproduction
  • entoure dw ? ; Boolean , renvoir 0-> pas entouré , 1-> entouré
  • saverandom dw ? ;Sauvegarde du retours AX (random)
  • saveEnergie dw ? ;Sauvegarde des Energie , posx , posy
  • saveposx dw ? ;Sauvegarde de la coordonne en X
  • saveposy dw ? ;Sauvegarde de la coordonne en Y
  • cpt dw ? ; compteur
  • nb_morga dw 30 ;nombre de micro orga initials
  • nb_Morgarestant dw 30 ;id nb_Morga mais utiliser pour le test de superposition
  • nb_nouriture dw 576 ; nombre initial de nouriture
  • tab_orga dw (13000) dup (0) ;tab contenant les infos sur les morga initialisé a zero
  • lenght_tabOrga dw $-tab_orga ;Longueur du vecteur
  • tab_nouriture dw (120*40) dup (0) ; tableau contanant les coordonnées de nouritures initialisé a zero
  • lenght_tabNouriture dw $-tab_nouriture ;Longueur du vecteur
  • fichier db 'Organismes.txt',0 ; Nom du fichier qui va recevoir les info des Morga
  • ;*******Variables de TXT *********
  • enplus db " enfant ok$"
  • mort db " Morts :'($"
  • titre2 db 'Legende................',10,13
  • db 'Rouge = Micro-Organisme ...',10,13
  • db 'Vert = Nouriture .........',10,13,'$'
  • Intro db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ********** ************ ****** ****** ************',10,13
  • db ' *** *** **** ******* ******* ****',10,13
  • db ' *** *** **** *************** ****',10,13
  • db ' ********** ************ ***** ***** ************',10,13
  • db ' ********** ************ ***** ***** ************',10,13
  • db ' *** *** **** ***** ***** **** ',10,13
  • db ' *** *** **** ***** ***** **** ',10,13
  • db ' *** *** ************ ***** ***** ************',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' Auteur : Digital snake ',10,13
  • db ' ------ | ',10,13
  • db ' | Prof : PBT ',10,13
  • db ' | Version : 26/03/03 ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' -> Etude de la vie de MicroBacteries <- ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' [Pour quitter appuyer sur la touche Q] ',10,13
  • db ' ',10,13
  • db ' ',10,13
  • db ' ',10,13,'$'
  • ;==========================================
  • ; code
  • ;==========================================
  • .code
  • main proc
  • mov ax,@data
  • mov ds,ax
  • ;================================ repete 1 foi =================================
  • call mode_graphique ;on appel le mode video 640*480 ;*
  • ;---------------------- ;*
  • mov dx,offset Intro ;Affiche l intro a l'ecran ;*
  • CALL ecrit ;*
  • CALL clavier ;attente d'une touche au clavier pour commancer ;*
  • ;---------------------- ;*
  • call mode_graphique ;on appel le mode video 640*480 ;*
  • call damier ;affichage de la zone de vie des Micro orga ;*
  • ;---------------------- ;*
  • mov posx,40 ;compteur du nombre de mort ;*
  • mov posy,27 ;*
  • CALL curseur ;*
  • CALL char ;*
  • call titrelegende ;======================================== ;*
  • ;---------------------- ; ==initialisation tableau micro orga == ;*
  • ;======================================== ;*
  • mov bx,0 ; donne le morga de départ bx=indice du tab_orga ;*
  • mov cx,nb_morga ;*
  • ;*
  • @@bouclecoordonneemorga: ;*
  • push cx ;*
  • call donnecoordonneeimorga ;*
  • add bx,2 ; passe au morga suivant ;*
  • pop cx ;*
  • loop @@bouclecoordonneemorga ;*
  • ;========================================= ;*
  • ;---------------------- ; == initialisation tableau micro orga == ;*
  • ;========================================= ;*
  • mov bx,0 ;indice de départ ;*
  • mov cx,nb_nouriture ;traitement des 150 premiers nouritures ;*
  • ;*
  • @@bouclecoordonneenouriture: ;*
  • push cx ;*
  • call donnecoordonneeinouriture ;*
  • add bx,2 ;on passe a la nouriture suivante ;*
  • pop cx ;*
  • loop @@bouclecoordonneenouriture ;*
  • ;----------------------
  • CALL test_si_entoure ;au cas ou initialement un Morga est entouré ;*
  • ;=============================================================================
  • call dessine_nouriture ;ecran de base , affiche les morga ;*
  • call dessine_morga ; et les nouritures ;*
  • ;************** ;*
  • ;====================== boucle de jeux =======================================
  • ;************** ;*
  • CALL InitRnd ;initialisation pour le random
  • @@debut: ;début de la boucle
  • mov efface,1 ;booleen 1-> on efface
  • call dessine_morga ;dessine carre noir
  • call test_correspondance ;test visant a voir si les coordonnées morga
  • ;sont les meme que celle de la nouriture
  • call test_reproduction ;on test si les Morga sont aptes a se reproduire
  • call mouvement ;détermine la nouvelle coordonnée des morga
  • CALL test_si_entoure ;test si un Morga est entourer par d autres Morga
  • call add_nouriture ;add de la nouriture et la desine (celle en plus)
  • mov efface,0 ;booleen 0->on efface pas
  • call dessine_morga ;dessine carre rouge
  • call fin_prog ;test si on a appuyer sur Q pour une pause clavier ,->go out
  • ;----------------------
  • mov ax,nb_morga ;test de sortie du programme (2000 -> on sortirais du vecteur !)
  • cmp ax,2000
  • jge fin
  • ;----------------------
  • JMP @@debut ;Boucle-->on recommance
  • ;=======================================================================
  • call clavier ;procédure de pause
  • jmp fin ;goto fin
  • main endp
  • ;==========================================
  • ;== Procedures ==
  • ;==========================================
  • test_superposition proc
  • ;on va parcourir le tableau des Micro orga en partant du premier et analyser de
  • ;cette facon les suivant et leur position
  • ;-> si il y a meme position on s'arrangera pour donner de nouvelle coordonnées
  • ;->!!! le BX DOIT etre positionner sur posx !!!
  • push cx
  • mov si,bx
  • mov si,2 ;si est l indice du Morga suivant celui k on analyse
  • cmp si,bx
  • JE @@finICI
  • mov cx,nb_Morgarestant
  • cmp cx,0
  • JE @@finICI
  • @@boucle:
  • cmp tab_orga[si],0
  • JNE @@vivant
  • ADD si,8
  • JMP @@boucle
  • @@vivant:
  • push bx
  • push si ;au depart les indices sont sur posx
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@suivant
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@suivant
  • mov superpose,1
  • @@suivant:
  • pop si
  • pop bx
  • ADD si,8
  • cmp si,bx
  • JE @@finICI
  • LOOP @@boucle
  • @@finICI: pop cx
  • RET
  • test_superposition endp
  • ;-----------------------------------------------------------------------
  • char proc ;Procédure qui fais un compte du nombre de morts
  • pusha
  • cmp asci,57 ;si on est au dessus de 9
  • JL @@premierchiffre ;->on continue car <9
  • mov asci,47 ;->remise a zero
  • CALL char2 ;->on passe au second chiffre
  • @@premierchiffre:
  • mov posx,40
  • mov posy,27
  • CALL curseur
  • mov ah,09h ; Affichage
  • INC asci
  • mov al,asci ; D'un char correspondant au code ascii
  • mov bh,0
  • mov bl,01000011b ; couleur
  • mov cx,1 ; Un seul caractère
  • int 10h
  • popa
  • ret
  • char endp
  • char2 proc
  • pusha
  • cmp asci2,57
  • JL @@premierchiffre
  • mov asci2,47
  • @@premierchiffre:
  • mov posx,39 ;compteur du nombre de mort
  • mov posy,27
  • CALL curseur
  • mov ah,09h ; Affichage
  • INC asci2
  • mov al,asci2 ; D'un char correspondant au code ascii
  • mov bh,0
  • mov bl,01000011b ; couleur
  • mov cx,1 ; Un seul caractère
  • int 10h
  • popa
  • ret
  • char2 endp
  • ;-----------------------------------------------------------------------
  • test_reproduction proc
  • pusha
  • mov bx,0 ;indice positionner sur l age
  • mov cx,1500
  • @@Boucle:
  • push bx
  • mov ax,tab_orga[bx] ; test si plus de 400 ans
  • cmp ax,400
  • JL @@suivant ;si non aller a suivant
  • ADD bx,6 ;test si Energie + de 400E
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • JL @@suivant ;si non passer a suivant
  • @@A_maturite:
  • @@Fils_1: sub dx,dx ;car on fais une div
  • div deux ;l'énergie du pere est diviser par 2
  • mov tab_orga[bx],ax ;==1er fils== prend la 1/2 de l energie
  • mov saveEnergie,ax ;sauvegarde du niveau d energie
  • SUB bx,6 ;indice remis sur age
  • mov tab_orga[bx],1 ;Age reinitialisé a 1
  • ADD bx,2 ;BX surr posx
  • mov ax,tab_orga[bx]
  • mov saveposx,ax ;sauvegarde de la derniere posx
  • ADD bx,2 ;BX sur posy
  • mov ax,tab_orga[bx]
  • mov saveposy,ax ;sauvegarde de la derniere posy
  • ADD bx,2 ;BX sur energie
  • @@TQ_trouvePasLibre:
  • mov ax,tab_orga[bx] ;bx sur energie
  • cmp ax,0
  • JLE @@libre
  • add bx,8
  • JMP @@TQ_trouvePasLibre
  • @@libre:
  • mov ax,saveEnergie
  • mov tab_orga[bx],ax ;Lenergie sera iddentike
  • sub bx,4 ;bx sur posx
  • push bx
  • @@Donne_coordonne_fils:
  • push 1
  • push 800
  • CALL random
  • cmp eax,96 ;=====1 er cas=======
  • jge @@suite1
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok1
  • mov tab_orga[bx],600 ;cas ou l'on depasse le tab en x -> passage autre bord
  • @@ok1:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de dépassement
  • jmp @@fincmp
  • @@suite1:
  • cmp eax,200 ;====2 eme cas======
  • jge @@suite2
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de depassement
  • jmp @@fincmp
  • @@suite2:
  • cmp eax,296 ;======3 eme cas=====
  • jge @@suite3
  • mov ax,saveposx
  • mov tab_orga[bx],ax
  • add tab_orga[bx],5 ;incremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,600 ; cas du depassement
  • jle @@ok2
  • mov tab_orga[bx],0
  • @@ok2:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0 ;cas du depassement
  • jge @@fincmp
  • mov tab_orga[bx],400
  • jmp @@fincmp
  • @@suite3:
  • cmp eax,400 ;=====4 eme cas=====
  • jge @@suite4
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • add tab_orga[bx],5 ;incremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,600 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite4:
  • cmp eax,496 ;========5eme cas=======
  • jge @@suite5
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,600
  • jle @@ok3
  • mov tab_orga[bx],0
  • @@ok3:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite5:
  • cmp eax,600 ;=====6eme cas===========
  • jge @@suite6
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posy
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite6: ;=======7eme cas===========
  • cmp eax,696
  • jge @@suite7
  • ADD bx,2 ;indice sur posx
  • mov ax,saveposx
  • mov tab_orga[bx],ax
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok4
  • mov tab_orga[bx],600
  • @@ok4:
  • add bx,2 ;indice sur posy
  • mov ax,saveposy
  • mov tab_orga[bx],ax
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite7:
  • cmp eax,800 ;===8eme cas================
  • jg @@probleme
  • mov ax,saveposx
  • mov tab_orga[bx],ax ;indice sur posx
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],600
  • jmp @@fincmp
  • @@probleme:
  • JMP @@Donne_coordonne_fils
  • @@fincmp: pop bx
  • mov ax,saveposx
  • mov posx,ax
  • mov ax,saveposy
  • mov posy,ax
  • mov al,12h
  • CALL carre
  • sub bx,2 ;bx sur age
  • mov tab_orga[bx],1
  • INC nb_Morga
  • @@suivant:
  • pop bx
  • ADD bx,8 ; Morga suivant (age)
  • Loop @@boucle
  • popa
  • RET
  • test_reproduction endp
  • ;-----------------------------------------------------------------------
  • test_correspondance proc
  • mov bx,6 ;position indice sur morga 1 , energie
  • mov si,0 ;position indice tab_orga posx initial
  • mov cx,nb_nouriture
  • @@boucle2:
  • push cx
  • mov cx,nb_Morga
  • @@boucle1: ;== Parcours Tab_orga et compare chaque Morga
  • push bx
  • push si
  • ; == Pour chaque nouriture
  • mov ax,tab_orga[bx] ;== TEst vivant ou non ? ==
  • cmp ax,0 ;========Morga=============
  • Jne @@vivant
  • INC cx
  • JMP @@endMorga ;on va a la fin de la premiere boucle
  • @@vivant:
  • sub bx,4 ;indice sur posx Morga
  • mov ax,tab_orga[bx]
  • cmp ax,tab_nouriture[si] ;si=posx Nouriture
  • JNE @@endMorga ;=goto fin si posxM != posxN
  • add bx,2 ;indice sur posy Morga
  • add si,2 ;indice sur posy Nouriture
  • mov ax,tab_orga[bx]
  • cmp ax,tab_nouriture[si]
  • JNE @@endMorga
  • @@Correspondance:
  • add bx,2
  • ADD tab_orga[bx],30
  • SUB si,2
  • MOV tab_nouriture[si],0
  • @@endMorga:
  • pop si
  • pop bx
  • ADD bx,8 ; indice placer sur Energie Morga suivant
  • Loop @@boucle1
  • ADD si,4
  • Mov bx,6
  • pop cx
  • Loop @@boucle2
  • ret
  • test_correspondance endp
  • ;-----------------------------------------------------------------------
  • mouvement proc
  • mov cx,nb_morga
  • mov bx,6
  • @@boucle_mouvement:
  • mov ax,tab_orga[bx] ;on va tester si on a afaire a un morga vivant
  • cmp ax,0 ;energie plus de zero
  • jg @@debutdeplacement ;=vivant on commence les coordonnées nouvelles
  • add bx,8 ; indice sur morga suivant (energie)
  • jmp @@boucle_mouvement ;= mort , on passe au morga suivant
  • mov nb_Morgarestant,1 ;utiliser pour le test de correspondance
  • @@debutdeplacement:
  • push 0 ;donne une des 8 cases aux alentours
  • push 800
  • call random
  • push bx ;sauvegarde de l'indice morga (energie)
  • cmp eax,96 ;=====1 er cas=======
  • jge @@suite1
  • sub bx,4 ;indice sur posx
  • sub tab_orga[bx],5 ;decremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok1
  • mov tab_orga[bx],600 ;cas ou l'on depasse le tab en x -> passage autre bord
  • @@ok1:
  • add bx,2 ;indice sur posy
  • sub tab_orga[bx],5 ;decremente d'une case
  • @@oksuperpo1: mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de dépassement
  • jmp @@fincmp
  • @@suite1:
  • cmp eax,200 ;====2 eme cas======
  • jge @@suite2
  • sub bx,2 ;indice sur posy
  • sub tab_orga[bx],5 ;decremente d'une case
  • @@oksuperpo2: mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],400 ;cas de depassement
  • jmp @@fincmp
  • @@suite2:
  • cmp eax,296 ;======3 eme cas=====
  • jge @@suite3
  • sub bx,4 ;indice sur posx
  • add tab_orga[bx],5 ;incremente d'une case
  • mov ax,tab_orga[bx]
  • cmp ax,600 ; cas du depassement
  • jle @@ok2
  • mov tab_orga[bx],0
  • @@ok2:
  • add bx,2 ;indice sur posy
  • sub tab_orga[bx],5 ;decremente d'une case
  • @@oksuperpo3: mov ax,tab_orga[bx]
  • cmp ax,0 ;cas du depassement
  • jge @@fincmp
  • mov tab_orga[bx],400
  • jmp @@fincmp
  • @@suite3:
  • cmp eax,400 ;=====4 eme cas=====
  • jge @@suite4
  • sub bx,4 ;indice sur posx
  • add tab_orga[bx],5 ;incremente d'une case
  • @@oksuperpo4:mov ax,tab_orga[bx]
  • cmp ax,600 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite4:
  • cmp eax,496 ;========5eme cas=======
  • jge @@suite5
  • sub bx,4 ;indice sur posx
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,600
  • jle @@ok3
  • mov tab_orga[bx],0
  • @@ok3:
  • add bx,2 ;indice sur posy
  • add tab_orga[bx],5
  • @@oksuperpo5: mov ax,tab_orga[bx]
  • cmp ax,400 ;test depassement
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite5:
  • cmp eax,600 ;=====6eme cas===========
  • jge @@suite6
  • sub bx,2 ;indice sur posy
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite6: ;=======7eme cas===========
  • cmp eax,696
  • jge @@suite7
  • sub bx,4 ;indice sur posx
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@ok4
  • mov tab_orga[bx],600
  • @@ok4:
  • add bx,2 ;indice sur posy
  • add tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,400
  • jle @@fincmp
  • mov tab_orga[bx],0
  • jmp @@fincmp
  • @@suite7:
  • cmp eax,800 ;===8eme cas================
  • jg @@probleme
  • sub bx,4 ;indice sur posx
  • sub tab_orga[bx],5
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • jge @@fincmp
  • mov tab_orga[bx],600
  • jmp @@fincmp
  • @@probleme: pop bx
  • jmp @@boucle_mouvement
  • @@fincmp:
  • pop bx ;indice replacé sur energie de morga traité
  • dec tab_orga[bx] ;decremente energie
  • mov ax,tab_orga[bx]
  • cmp ax,0
  • JG @@incage
  • sub bx,6
  • mov tab_orga[bx],0 ;*
  • CALL char
  • JMP @@endnow
  • @@incage: sub bx,6 ;indice sur l'age
  • inc tab_orga[bx] ;incremente son age
  • @@endnow: add bx,14 ;indice sur energie du morga suivant
  • mov superpose,0
  • INC nb_Morgarestant
  • loop @@boucle_mouvement
  • ret
  • mouvement endp
  • ;-----------------------------------------------------------------------
  • test_si_entoure proc
  • mov bx,6
  • ;lorsque l on rentre dans cette procedure l'indice BX est positionnée sur l Energie du Tab_orga
  • ;in va faloir tester di autour de la case du Morga , il y en a d'autres si il ne sais plus bouger ->il meut
  • Mov cx,nb_Morga
  • @@Boucle_traite_TT_orga:
  • mov ax,tab_orga[bx] ;on va tester si on a afaire a un morga vivant
  • cmp ax,0 ;energie plus de zero
  • JNE @@ok
  • ADD bx,8
  • JMP @@Boucle_traite_TT_orga
  • @@ok:
  • mov proximite,0 ;init de la proximite pour chaque Morga
  • push bx
  • push cx
  • mov cx,nb_Morga
  • mov si,6 ;indice sur' Energie 1 ER Morga [ici utilisé est SI]
  • @@Test_tt_les_autres:
  • mov ax,tab_orga[si] ;on va tester si on a afaire a un morga vivant
  • cmp ax,0 ;energie plus de zero
  • JNE @@ok2
  • ADD si,8
  • @@ok2:
  • @@CAS_1: ;test si Morga au Nord a gauche
  • push bx ;Sauvegarde des Indices ->sur Energie
  • push si
  • sub bx,4 ;bx sur posx
  • mov ax,tab_orga[bx] ;
  • sub si,4 ;si sur posx
  • dec ax ;test sur X-1
  • cmp ax,tab_orga[si]
  • JNE @@CAS_2
  • ADD bx,2 ;bx sur posy
  • ADD si,2 ;si sur posy
  • mov ax,tab_orga[bx]
  • dec ax ;test sur Y-1
  • cmp ax,tab_orga[si]
  • JNE @@CAS_2
  • INC proximite
  • @@CAS_2: ;test si Morga au nord centre
  • pop si
  • pop bx ;-->on revient au indice sur Energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;bx,si sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@CAS_3
  • ADD bx,2 ;bx,si sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • dec ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_3
  • INC proximite
  • @@CAS_3: ;test avec la case nord DRoite
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp tab_orga[si],ax
  • JNE @@CAS_4
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • DEC ax
  • cmp tab_orga[si],ax
  • JNE @@CAS_4
  • INC proximite
  • @@CAS_4: ;test sur la case centre droite
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_5
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@CAS_5
  • INC proximite
  • @@CAS_5: ;test sur case SUD droite
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_6
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_6
  • INC proximite
  • @@CAS_6: ;Test sur case sud centre
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • SUB bx,4 ;indice sur posx
  • SUB si,4
  • mov ax,tab_orga[bx]
  • cmp ax,tab_orga[si]
  • JNE @@CAS_7
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,Tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_7
  • INC proximite
  • @@CAS_7: ;Test sur case Sud gauche
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si ;-->sauvegarde des indices
  • sub bx,4 ;indice sur posx
  • sub si,4
  • mov ax,tab_orga[bx]
  • DEC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_8
  • ADD bx,2 ;indice sur posy
  • ADD si,2
  • mov ax,tab_orga[bx]
  • INC ax
  • cmp ax,tab_orga[si]
  • JNE @@CAS_8
  • INC proximite
  • @@CAS_8: ;Test sur case gauche
  • pop si
  • pop bx ;recuperation des indices sur energie
  • push bx
  • push si
  • sub bx,4
  • sub si,4
  • mov ax,tab_orga[bx]
  • dec ax
  • cmp ax,tab_orga[si]
  • JNE @@fin_cas
  • add bx,2
  • add si,2
  • mov ax,tab_orga[bx]
  • inc ax
  • JNE @@fin_cas
  • INC proximite
  • @@fin_cas:
  • pop si
  • pop bx
  • ADD si,8
  • LOOP @@Test_tt_les_autres
  • pop cx
  • pop bx
  • @@Test_si_proximite_egal_8:
  • cmp proximite,8
  • JNE @@pas_egal
  • mov tab_orga[bx],0 ;=>si l orga a une proximite de 8
  • ; il dois mourir =>car plus de place pour vivre
  • @@pas_egal:
  • ADD bx,8 ;passage au Morga suivant
  • LOOP @@Boucle_traite_TT_orga
  • RET
  • test_si_entoure endp
  • ;-----------------------------------------------------------------------
  • donnecoordonneeimorga proc ;procedure d'initialisation du tab des morga
  • mov tab_orga[bx],1 ;age=1 il est donc vivant
  • push 0
  • push 119
  • call random
  • mul cinq ; appel random ds ax
  • add bx,2 ;indice en posx
  • mov tab_orga[bx],ax ;donne nbre aleatoire
  • push 0
  • push 79
  • call random
  • mul cinq ; appel random ds ax
  • add bx,2 ;indice en posy
  • mov tab_orga[bx],ax ;nbre aleatoire ds posy
  • add bx,2 ;indice en energie
  • push 150
  • push 250
  • CALL random
  • mov tab_orga[bx],ax ;energie=[150-250] initialisation
  • ret
  • donnecoordonneeimorga endp
  • ;-----------------------------------------------------------------------
  • donnecoordonneeinouriture proc
  • push 0
  • push 119
  • call random
  • mul cinq
  • mov tab_nouriture[bx],ax ;indice sur posx ,donne nbre aleatoire
  • push 0
  • push 79
  • call random
  • mul cinq
  • add bx,2 ;indice sur posy
  • mov tab_nouriture[bx],ax ;donne nbre aleatoire
  • ret
  • donnecoordonneeinouriture endp
  • ;-----------------------------------------------------------------------
  • add_nouriture proc ;nb_nouriture+=(nb_nouriture/nb_orga)
  • pusha
  • MOV si,0 ;indice sur posx de nouriture
  • mov ax,nb_Morga
  • sub dx,dx
  • DIV trente
  • MOV cx,ax ;nbre d de nouriture rajoutée
  • ;on va remplir le tableau de nouriture
  • @@Boucle:
  • ;== seul les cases posx=0 seront comblée ==;
  • mov ax,tab_nouriture[si]
  • cmp ax,0
  • JNE @@okp
  • push 0
  • push 120
  • CALL random
  • mul cinq
  • mov tab_nouriture[si],ax ;posx de tab_nouriture
  • mov posx,ax
  • push 0
  • push 80
  • CALL random
  • mul cinq
  • ADD si,2 ;posy de tab_nouriture
  • mov tab_nouriture[si],ax
  • mov posy,ax
  • mov al,02h
  • CALL carre
  • ADD si,2 ;posx suivant
  • JMP @@suivant
  • @@okp:
  • INC cx
  • ADD si,4
  • @@suivant:
  • Loop @@Boucle
  • popa
  • ret
  • add_nouriture endp
  • ;------------------------------------------------------------------------
  • dessine_nouriture proc ;procedure qui va parcourire le vecteur et dessiner
  • ;les cases avec nouritures
  • mov cx,nb_nouriture
  • mov si,0
  • @@boucle1:
  • mov ax,tab_nouriture[si] ;test pour voir si il y a de la nouriture
  • cmp ax,1 ;car impossible k il y en ai en posx=0
  • jge @@ok
  • add si,4
  • jmp @@boucle1
  • @@ok:
  • mov ax,tab_nouriture[si]
  • mov posx,ax
  • add si,2
  • mov ax,tab_nouriture[si]
  • mov posy,ax
  • mov al,02h
  • call carre
  • add si,2
  • loop @@boucle1
  • ret
  • dessine_nouriture endp
  • ;-----------------------------------------------------------------------
  • dessine_morga proc
  • ;== parcours du vecteur tab_orga ==
  • mov bx,6 ;indice sur energie Morga n°1
  • mov cx,nb_morga
  • @@bouclem:
  • push bx
  • mov ax,tab_orga[bx] ;== 1/ test si vivant ==
  • cmp ax,0
  • jg @@vivant
  • INC cx
  • jmp @@finboucle
  • @@vivant:
  • sub bx,4 ;indice sur posx
  • mov ax,tab_orga[bx]
  • mov posx,ax ;donne la coordonnée
  • add bx,2 ;indice sur posy
  • mov ax,tab_orga[bx]
  • mov posy,ax ;donne la coordonnée
  • pusha
  • mov ax,efface ;on va tester si il sagit de colorier
  • cmp ax,0 ;la case ou se trouve le morga ou de l'effacer
  • jne @@couleur_noir
  • @@couleur_rouge:
  • mov al,04h
  • jmp @@couleurok
  • @@couleur_noir:
  • mov al,00h
  • @@couleurok:
  • call carre ;appel procedure pour dessiner le carre
  • popa
  • @@finboucle:
  • pop bx
  • add bx,8 ;indice sur energie suivant
  • loop @@bouclem
  • ret
  • dessine_morga endp
  • ;--------------------------------------------------------
  • carre proc
  • push cx
  • mov cx,4
  • inc posy
  • inc posx
  • @@bouclecaseok: ;l'utilisation est tres simple,donner les coordonnées
  • call colorie_caseok2 ;du pixel en haut a gauche(max sup gauche)
  • inc posy ;avec posx & posy
  • loop @@bouclecaseok
  • sub posy,4
  • pop cx
  • ret
  • carre endp
  • ;--************phase_suiv*******************--
  • colorie_caseok2 proc ;comme on a afaire a une boucle impriqué
  • push cx ;le chois de ssroutine est plus judicieux
  • mov cx,4 ;colorie_caseok2 est donc relié a colorie_caseok
  • @@bouclecase2ok:
  • call pixel
  • inc posx
  • loop @@bouclecase2ok
  • sub posx,4
  • pop cx
  • ret
  • colorie_caseok2 endp
  • ;-----------------------------------------------------------
  • damier proc
  • mov al,07h
  • mov posx,0
  • mov posy,0
  • lignes_horizontales:
  • mov cx,82
  • @@boucle2h:
  • push cx
  • mov cx,605
  • @@boucle1h:
  • call pixel
  • inc posx
  • loop @@boucle1h
  • add posy,5
  • mov posx,0
  • pop cx
  • loop @@boucle2h
  • mov posx,0
  • mov posy,0
  • lignes_vertivales:
  • mov cx,122
  • @@boucle2v:
  • push cx
  • mov cx,405
  • @@boucle1v:
  • call pixel
  • inc posy
  • loop @@boucle1v
  • add posx,5
  • mov posy,0
  • pop cx
  • loop @@boucle2v
  • ret
  • damier endp
  • ;-----------------------------------------------------
  • titrelegende proc
  • mov posx,5
  • mov posy,26
  • call curseur
  • mov dx,offset titre2
  • call ecrit
  • mov posx,41
  • mov posy,27
  • call curseur
  • mov dx,offset mort
  • call ecrit
  • ret
  • titrelegende endp
  • ;-----------------------------------------------------
  • mode_graphique proc
  • mov al,12h ; mode graphique 12h->640*480
  • mov ah,00h
  • int 10h
  • ret
  • mode_graphique endp
  • ;------------------------------------------------------
  • pixel proc ;procédure permettant l'affichage
  • pushad ;d'un pixel,selon les coordonnées
  • mov ah,0ch ;ici posx et posy
  • ; mov al,01h ;01-->bleu
  • mov bx,0000h
  • mov cx,posx
  • mov dx,posy
  • int 10h
  • popad
  • ret
  • pixel endp
  • ;------------------------------------------------
  • ;***************************************
  • ;*Test si appui sur Q pour quitter *
  • ;***************************************
  • fin_prog proc
  • pusha
  • mov ah,0bh
  • int 21h
  • cmp al,0ffh
  • jne fin_test_q
  • mov ah,01
  • int 21h
  • cmp al,113 ;113 = valeur ascii de la lettre Q
  • jne fin_test_q
  • CALL clavier
  • JMP fin
  • fin_test_q:
  • popa
  • ret
  • fin_prog endp
  • ;---------------------------------------------------
  • clavier proc
  • pusha
  • mov ah,07h ; attente d'une touche
  • int 21h
  • popa
  • ret
  • clavier endp
  • ;-------------------------------------------------
  • curseur proc near ;ssroutine de positionnement du curseur
  • push ax ;utilisé pour l'affichage
  • mov dl,byte ptr posx
  • mov dh,byte ptr posy
  • mov ax,0200h
  • int 10h
  • pop ax
  • ret
  • curseur endp
  • ;-------------------------------------------------
  • ecrit proc ;écriture, va etre utilisé avec un mov dx,offset .nom.
  • pusha
  • mov ax,0900h
  • int 21h
  • popa
  • ret
  • ecrit endp
  • ;--------------------------------------------------
  • ; fin du programme**************************
  • fin:
  • ; création d'un fichier et ouverture
  • MOV AH,3CH
  • MOV CX,0000000b ; attibuts standards
  • MOV DX,offset fichier
  • int 21h
  • MOV handle,AX
  • ; écriture d'un buffer
  • MOV AH,40h
  • MOV BX,handle
  • MOV CX,lenght_tabOrga
  • mov dx,'0'
  • ADD tab_orga,dx
  • MOV DX,offset tab_orga
  • int 21h
  • ; femeture du fichier
  • MOV AH,3Eh
  • MOV BX,handle
  • int 21h
  • mov al,03h ;modevideo 03h (texte)
  • mov ah,00h
  • int 10h
  • mov ax,04c00h
  • int 21h
  • end main
  • ;-------------------------------------------------------------
.model small
.stack 100h
.486
jumps
locals
extrn random : proc
extrn InitRnd : proc

;==========================================
; donne
;==========================================
.data
asci             db 47 ;va etre utilisé pour le compteur de mort ;)-->la faucheuse [init='0']
asci2            db 48 ;deuxieme chiffre du compteur
proximite        DW 0  ;Nombre de Micro orga qui sont suceptibles d entourer un congenère
handle           dw ?  ;Handle utiliser pour la manipulation de fichier

cinq		 dw 5   ; |
deux		 dw 2   ; |-> variables utilisées pour les divisions
trente           dw 30  ; |

posx		 dw ?   ; Coordonnée en abscisse
posy		 dw ?   ; Coordonnée en Ordonnée

superpose       DW 0  ; Boolean , declarant si il y a supperposition ou non
efface		 dw 0 ;boolean reglant la couleur 1=colorie en noir :)
reproduction	 dw 0 ;boolean reglant le check reproduction
entoure          dw ? ; Boolean , renvoir 0-> pas entouré , 1-> entouré

saverandom	 dw ? ;Sauvegarde du retours AX (random)
saveEnergie	 dw ? ;Sauvegarde des Energie , posx , posy
saveposx	 dw ? ;Sauvegarde de la coordonne en X
saveposy	 dw ? ;Sauvegarde de la coordonne en Y

cpt		 dw ? ; compteur
nb_morga	 dw 30   ;nombre de micro orga initials
nb_Morgarestant  dw 30   ;id nb_Morga mais utiliser pour le test de superposition
nb_nouriture	 dw 576 ; nombre initial de nouriture

tab_orga	 dw	(13000)   dup (0)   ;tab contenant les infos sur les morga initialisé a zero
lenght_tabOrga   dw  $-tab_orga             ;Longueur du vecteur
tab_nouriture	 dw	(120*40)   dup (0)  ; tableau contanant les coordonnées de nouritures initialisé a zero
lenght_tabNouriture dw  $-tab_nouriture     ;Longueur du vecteur

fichier          db       'Organismes.txt',0  ; Nom du fichier qui va recevoir les info des Morga

;*******Variables de TXT *********
enplus		       db " enfant ok$"
mort                   db " Morts :'($"
titre2		       db 'Legende................',10,13
                       db 'Rouge = Micro-Organisme ...',10,13
                       db 'Vert  = Nouriture .........',10,13,'$'


Intro	     db    ' ',10,13
             db    ' ',10,13
             db    ' ',10,13
             db    '	 **********	  ************	   ******   ******     ************',10,13
	     db    '	 ***    ***	  ****		   ******* *******	       ****',10,13
	     db    '	 ***    ***	  ****		   ***************	       ****',10,13
	     db    '	 **********	  ************	   *****     *****     ************',10,13
	     db    '	 **********	  ************	   *****     *****     ************',10,13
	     db    '	 ***    ***		  ****	   *****     *****     ****	   ',10,13
	     db    '	 ***    ***		  ****	   *****     *****     ****	   ',10,13
	     db    '	 ***    ***	  ************	   *****     *****     ************',10,13
	     db    ' ',10,13
             db    ' ',10,13
             db    ' ',10,13
             db    ' Auteur : Digital snake 		  ',10,13
	     db    ' ------ |  		  ',10,13
	     db    '        |  Prof : PBT	 	  ',10,13
	     db    '        |  Version : 26/03/03   ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    '                     ->  Etude de la vie de MicroBacteries  <-   ',10,13
	     db    '				                ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    ' ',10,13
	     db    '	[Pour quitter appuyer sur la touche Q]    ',10,13
	     db    '				   ',10,13
	     db    '				   ',10,13
	     db    '				   ',10,13,'$'

;==========================================
; code
;==========================================
.code
main proc
  mov ax,@data
  mov ds,ax
;================================ repete 1 foi =================================
  call mode_graphique	  ;on appel le mode video 640*480	              ;*
;----------------------                                                       ;*
  mov dx,offset Intro     ;Affiche l intro a l'ecran                          ;*
  CALL ecrit                                                                  ;*
  CALL clavier            ;attente d'une touche au clavier pour commancer     ;*
;----------------------                                                       ;*
  call mode_graphique	  ;on appel le mode video 640*480	              ;*
  call damier		  ;affichage de la zone de vie des Micro orga	      ;*
;----------------------                                                       ;*
    mov posx,40         ;compteur du nombre de mort                           ;*
    mov posy,27                                                               ;*
    CALL curseur                                                              ;*
    CALL char						                      ;*
  call titrelegende	 ;========================================	      ;*
;----------------------  ; ==initialisation tableau micro orga ==	      ;*
			 ;========================================	      ;*
  mov bx,0		 ; donne le morga de départ bx=indice du tab_orga     ;*
  mov cx,nb_morga							      ;*
									      ;*
  @@bouclecoordonneemorga:						      ;*
  push cx								      ;*
		       call donnecoordonneeimorga			      ;*
		       add bx,2  ; passe au morga suivant		      ;*
  pop cx								      ;*
  loop @@bouclecoordonneemorga						      ;*
			 ;=========================================	      ;*
;----------------------  ; == initialisation tableau micro orga ==	      ;*
			 ;=========================================	      ;*
mov bx,0		 ;indice de départ				      ;*
mov cx,nb_nouriture	 ;traitement des 150 premiers nouritures	      ;*
									      ;*
@@bouclecoordonneenouriture:						      ;*
push cx 							              ;*
		       call donnecoordonneeinouriture			      ;*
		       add bx,2 ;on passe a la nouriture suivante	      ;*
pop cx								              ;*
loop @@bouclecoordonneenouriture					      ;*
;----------------------
CALL test_si_entoure   ;au cas ou initialement un Morga est entouré           ;*
;=============================================================================
  call dessine_nouriture     ;ecran de base , affiche les morga 	      ;*
  call dessine_morga	     ; et les nouritures			      ;*
		       ;**************                                        ;*
;====================== boucle de jeux =======================================
		       ;**************                                        ;*
CALL InitRnd               ;initialisation pour le random
@@debut:		   ;début de la boucle

    mov efface,1		       ;booleen 1-> on efface
  call dessine_morga	       ;dessine carre noir
  call test_correspondance     ;test visant a voir si les coordonnées morga
			       ;sont les meme que celle de la nouriture
  call test_reproduction       ;on test si les Morga sont aptes a se reproduire

  call mouvement	       ;détermine la nouvelle coordonnée des morga

  CALL test_si_entoure         ;test si un Morga est entourer par d autres Morga
  call add_nouriture	       ;add de la nouriture et la desine (celle en plus)

    mov efface,0		       ;booleen 0->on efface pas
  call dessine_morga	       ;dessine carre rouge
  call fin_prog                ;test si on a appuyer sur Q pour une pause clavier ,->go out

;----------------------

  mov ax,nb_morga              ;test de sortie du programme (2000 -> on sortirais du vecteur !)
  cmp ax,2000
  jge fin
;----------------------
JMP @@debut                    ;Boucle-->on recommance

;=======================================================================
  call clavier	   ;procédure de pause
  jmp fin	   ;goto fin
main endp
;==========================================
;== Procedures				 ==
;==========================================
test_superposition proc
;on va parcourir le tableau des Micro orga en partant du premier et analyser de
;cette facon les suivant et leur position
;-> si il y a meme position on s'arrangera pour donner de nouvelle coordonnées
;->!!! le BX DOIT etre positionner sur posx !!!

           push cx
           mov si,bx
           mov si,2         ;si est l indice du Morga suivant celui k on analyse
           cmp si,bx
                  JE @@finICI
           mov cx,nb_Morgarestant
           cmp cx,0
           JE @@finICI
           @@boucle:
                         cmp tab_orga[si],0
                         JNE @@vivant
                         ADD si,8
                         JMP @@boucle
              @@vivant:
                 push bx
                 push si                    ;au depart les indices sont sur posx
                      mov ax,tab_orga[bx]
                      cmp ax,tab_orga[si]
                      JNE @@suivant
                            ADD bx,2                      ;indice sur posy
                            ADD si,2
                        mov ax,tab_orga[bx]
                        cmp ax,tab_orga[si]
                        JNE @@suivant
                            mov superpose,1

               @@suivant:
                  pop si
                  pop bx
                  ADD si,8
                  cmp si,bx
                  JE @@finICI
           LOOP @@boucle

    @@finICI: pop cx
RET
test_superposition endp
;-----------------------------------------------------------------------
char proc                          ;Procédure qui fais un compte du nombre de morts
	pusha
	cmp asci,57                ;si on est au dessus de 9
	JL @@premierchiffre        ;->on continue car <9
        mov asci,47                ;->remise a zero
        CALL char2                 ;->on passe au second chiffre

@@premierchiffre:
                mov posx,40
                mov posy,27
                CALL curseur
	mov	ah,09h		; Affichage
	INC     asci
        mov	al,asci 	; D'un char correspondant au code ascii
	mov	bh,0
	mov	bl,01000011b	; couleur
	mov	cx,1		; Un seul caractère
	int	10h
	popa
	ret
char endp
char2 proc
	pusha
	cmp asci2,57
	JL @@premierchiffre
        mov asci2,47


@@premierchiffre:
                mov posx,39         ;compteur du nombre de mort
                mov posy,27
                CALL curseur
	mov	ah,09h		; Affichage
	INC     asci2
        mov	al,asci2 	; D'un char correspondant au code ascii
	mov	bh,0
	mov	bl,01000011b	; couleur
	mov	cx,1		; Un seul caractère
	int	10h
	popa
	ret
char2 endp
;-----------------------------------------------------------------------
test_reproduction proc
pusha
			 mov bx,0 ;indice positionner sur l age
			 mov cx,1500

			 @@Boucle:
			     push bx

				   mov ax,tab_orga[bx]	 ; test si plus de 400 ans
				   cmp ax,400
				   JL @@suivant 	 ;si non aller a suivant

				   ADD bx,6		 ;test si Energie + de 400E
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   JL @@suivant 	 ;si non passer a suivant

                 @@A_maturite:
                 @@Fils_1:         sub dx,dx		 ;car on fais une div
				   div deux		;l'énergie du pere est diviser par 2
				   mov tab_orga[bx],ax	;==1er fils== prend la 1/2 de l energie
				   mov saveEnergie,ax	;sauvegarde du niveau d energie
				   SUB bx,6		;indice remis sur age
				   mov tab_orga[bx],1	;Age reinitialisé a 1
				   ADD bx,2		;BX surr posx

                                   mov ax,tab_orga[bx]
				   mov saveposx,ax	;sauvegarde de la derniere posx
				   ADD bx,2		;BX sur posy
				   mov ax,tab_orga[bx]
				   mov saveposy,ax	;sauvegarde de la derniere posy
				   ADD bx,2		;BX sur energie

				     @@TQ_trouvePasLibre:

							   mov ax,tab_orga[bx]	;bx sur energie
							   cmp ax,0
							   JLE @@libre
							   add bx,8
							   JMP @@TQ_trouvePasLibre

						      @@libre:

							    mov ax,saveEnergie
							    mov tab_orga[bx],ax ;Lenergie sera iddentike
							    sub bx,4		;bx sur posx

							    push bx
                @@Donne_coordonne_fils:
                                                            push 1
							    push 800
							    CALL random

				  cmp eax,96		;=====1 er cas=======
		      jge @@suite1
		                  mov ax,saveposx
				  mov tab_orga[bx],ax	;indice sur posx
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@ok1
				  mov tab_orga[bx],600	;cas ou l'on depasse le tab en x -> passage autre bord
			    @@ok1:
				  add bx,2		;indice sur posy
				  mov ax,saveposy
				  mov tab_orga[bx],ax
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	;cas de dépassement
				  jmp @@fincmp

		   @@suite1:
				  cmp eax,200		;====2 eme cas======
		      jge @@suite2
				  add bx,2		;indice sur posy
				  mov ax,saveposy
				  mov tab_orga[bx],ax
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	 ;cas de depassement
				  jmp @@fincmp


		   @@suite2:
				  cmp eax,296	       ;======3 eme cas=====
		      jge @@suite3
				  mov ax,saveposx
				  mov tab_orga[bx],ax
				  add tab_orga[bx],5   ;incremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,600	       ; cas du depassement
				  jle @@ok2
				  mov tab_orga[bx],0
			    @@ok2:
				  add bx,2	       ;indice sur posy
				  mov ax,saveposy
				  mov tab_orga[bx],ax
				  sub tab_orga[bx],5   ;decremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,0	       ;cas du depassement
				  jge @@fincmp
				  mov tab_orga[bx],400
				  jmp @@fincmp


		   @@suite3:
				   cmp eax,400		 ;=====4 eme cas=====
		      jge @@suite4
				   mov ax,saveposx
				   mov tab_orga[bx],ax		 ;indice sur posx
				   add tab_orga[bx],5	 ;incremente d'une case
				   mov ax,tab_orga[bx]
				   cmp ax,600		  ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite4:
				   cmp eax,496		 ;========5eme cas=======
		      jge @@suite5
				   mov ax,saveposx
				   mov tab_orga[bx],ax		  ;indice sur posx
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,600
				   jle @@ok3
				   mov tab_orga[bx],0
			     @@ok3:
				   add bx,2		 ;indice sur posy
				   mov ax,saveposy
				   mov tab_orga[bx],ax
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400		 ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite5:
				   cmp eax,600		;=====6eme cas===========
		      jge @@suite6
				   mov ax,saveposx
				   mov tab_orga[bx],ax		;indice sur posy
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite6:			       ;=======7eme cas===========
				   cmp eax,696
		      jge @@suite7
				   ADD bx,2	      ;indice sur posx
				   mov ax,saveposx
				   mov tab_orga[bx],ax
                                   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@ok4
				   mov tab_orga[bx],600
			      @@ok4:
				   add bx,2	      ;indice sur posy
				   mov ax,saveposy
				   mov tab_orga[bx],ax
                                   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite7:
				   cmp eax,800	      ;===8eme cas================
		   jg @@probleme
				   mov ax,saveposx
				   mov tab_orga[bx],ax	      ;indice sur posx
				   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@fincmp
				   mov tab_orga[bx],600
				   jmp @@fincmp
                  @@probleme:
                  JMP @@Donne_coordonne_fils

                                               @@fincmp:    pop bx

                                                            mov ax,saveposx
                                                            mov posx,ax
                                                            mov ax,saveposy
                                                            mov posy,ax
							    mov al,12h
							    CALL carre

							    sub bx,2	      ;bx sur age

							     mov tab_orga[bx],1

							     INC nb_Morga

			      @@suivant:
			     pop bx
				       ADD bx,8 ; Morga suivant (age)

			 Loop @@boucle
popa
RET
test_reproduction endp
;-----------------------------------------------------------------------
test_correspondance proc
			mov bx,6	  ;position indice sur morga 1 , energie
			mov si,0	  ;position indice tab_orga posx initial
mov cx,nb_nouriture
@@boucle2:
	push cx
	    mov cx,nb_Morga
	    @@boucle1:	      ;== Parcours Tab_orga et compare chaque Morga
		    push bx
		    push si
					    ; == Pour chaque nouriture
		       mov ax,tab_orga[bx]  ;== TEst vivant ou non ? ==
		       cmp ax,0 	    ;========Morga=============
		       Jne @@vivant
		       INC cx
		       JMP @@endMorga	    ;on va a la fin de la premiere boucle
		 @@vivant:
		       sub bx,4    ;indice sur posx Morga
		       mov ax,tab_orga[bx]
		       cmp ax,tab_nouriture[si] ;si=posx Nouriture
		       JNE @@endMorga	;=goto fin si posxM != posxN

		       add bx,2    ;indice sur posy Morga
		       add si,2    ;indice sur posy Nouriture
		       mov ax,tab_orga[bx]
		       cmp ax,tab_nouriture[si]
		       JNE @@endMorga
		    @@Correspondance:
				     add bx,2
				     ADD tab_orga[bx],30
				     SUB si,2
				     MOV tab_nouriture[si],0


		 @@endMorga:

		    pop si
		    pop bx

		    ADD bx,8   ; indice placer sur Energie Morga suivant
	     Loop @@boucle1
	 ADD si,4
	 Mov bx,6
     pop cx
  Loop @@boucle2
ret
test_correspondance endp
;-----------------------------------------------------------------------
mouvement proc
	      mov cx,nb_morga
	      mov bx,6
	      @@boucle_mouvement:

		    mov ax,tab_orga[bx]    ;on va tester si on a afaire a un morga vivant
		    cmp ax,0		   ;energie plus de zero
		    jg @@debutdeplacement  ;=vivant on commence les coordonnées nouvelles
		    add bx,8		   ; indice sur morga suivant (energie)
		    jmp @@boucle_mouvement ;= mort , on passe au morga suivant

                 mov nb_Morgarestant,1  ;utiliser pour le test de correspondance
		 @@debutdeplacement:
				  push 0	 ;donne une des 8 cases aux alentours
				  push 800
				  call random
				  push bx	 ;sauvegarde de l'indice morga (energie)


				  cmp eax,96		;=====1 er cas=======
		      jge @@suite1
				  sub bx,4		;indice sur posx
				  sub tab_orga[bx],5	;decremente d'une case
				  mov ax,tab_orga[bx]
				  
                                  cmp ax,0
				  jge @@ok1
				  mov tab_orga[bx],600	;cas ou l'on depasse le tab en x -> passage autre bord
			    @@ok1:
				  add bx,2		;indice sur posy
				  sub tab_orga[bx],5	;decremente d'une case


                    @@oksuperpo1: mov ax,tab_orga[bx]
                                  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	;cas de dépassement
				  jmp @@fincmp


		   @@suite1:
				  cmp eax,200		;====2 eme cas======
		      jge @@suite2
				  sub bx,2		;indice sur posy
				  sub tab_orga[bx],5	;decremente d'une case
				  
                     @@oksuperpo2:  mov ax,tab_orga[bx]
				  cmp ax,0
				  jge @@fincmp
				  mov tab_orga[bx],400	 ;cas de depassement
				  jmp @@fincmp


		   @@suite2:
				  cmp eax,296	       ;======3 eme cas=====
		      jge @@suite3
				  sub bx,4	       ;indice sur posx
				  add tab_orga[bx],5   ;incremente d'une case
				  mov ax,tab_orga[bx]
				  cmp ax,600	       ; cas du depassement
				  jle @@ok2
				  mov tab_orga[bx],0
			    @@ok2:
				  add bx,2	       ;indice sur posy
				  sub tab_orga[bx],5   ;decremente d'une case


                    @@oksuperpo3: mov ax,tab_orga[bx]
				  cmp ax,0	       ;cas du depassement
				  jge @@fincmp
				  mov tab_orga[bx],400
				  jmp @@fincmp


		   @@suite3:
				   cmp eax,400		 ;=====4 eme cas=====
		      jge @@suite4
				   sub bx,4		 ;indice sur posx
				   add tab_orga[bx],5	 ;incremente d'une case


                      @@oksuperpo4:mov ax,tab_orga[bx]
				   cmp ax,600		  ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite4:
				   cmp eax,496		 ;========5eme cas=======
		      jge @@suite5
				   sub bx,4		  ;indice sur posx
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,600
				   jle @@ok3
				   mov tab_orga[bx],0
			     @@ok3:
				   add bx,2		 ;indice sur posy
				   add tab_orga[bx],5

                     @@oksuperpo5: mov ax,tab_orga[bx]
				   cmp ax,400		 ;test depassement
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite5:
				   cmp eax,600		;=====6eme cas===========
		      jge @@suite6
				   sub bx,2		;indice sur posy
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite6:			       ;=======7eme cas===========
				   cmp eax,696
		      jge @@suite7
				   sub bx,4	      ;indice sur posx
				   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@ok4
				   mov tab_orga[bx],600
			      @@ok4:
				   add bx,2	      ;indice sur posy
				   add tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,400
				   jle @@fincmp
				   mov tab_orga[bx],0
				   jmp @@fincmp

		   @@suite7:
				   cmp eax,800	      ;===8eme cas================
		   jg @@probleme
				   sub bx,4	      ;indice sur posx
				   sub tab_orga[bx],5
				   mov ax,tab_orga[bx]
				   cmp ax,0
				   jge @@fincmp
				   mov tab_orga[bx],600
				   jmp @@fincmp

	 @@probleme: pop bx
		     jmp @@boucle_mouvement


	 @@fincmp:

		  pop bx	    ;indice replacé sur energie de morga traité

		  dec tab_orga[bx]  ;decremente energie
		  mov ax,tab_orga[bx]
		  cmp ax,0
		  JG @@incage
                  sub bx,6
                  mov tab_orga[bx],0                                                                                                                            ;*
                CALL char
                  JMP @@endnow

	@@incage:	  sub bx,6	    ;indice sur l'age
		          inc tab_orga[bx]  ;incremente son age
	@@endnow:	  add bx,14	    ;indice sur energie du morga suivant
	                  mov superpose,0
	                  INC nb_Morgarestant

       loop @@boucle_mouvement
ret
mouvement endp
;-----------------------------------------------------------------------
test_si_entoure proc
                    mov bx,6
  ;lorsque l on rentre dans cette procedure l'indice BX est positionnée sur l Energie du Tab_orga
  ;in va faloir tester di autour de la case du Morga , il y en a d'autres si il ne sais plus bouger ->il meut
  Mov cx,nb_Morga
  @@Boucle_traite_TT_orga:
                    mov ax,tab_orga[bx]    ;on va tester si on a afaire a un morga vivant
		    cmp ax,0		   ;energie plus de zero
		    JNE @@ok
		    ADD bx,8
		    JMP @@Boucle_traite_TT_orga

              @@ok:
              mov proximite,0     ;init de la proximite pour chaque Morga
              push bx
              push cx
              mov cx,nb_Morga
              mov si,6             ;indice sur' Energie 1 ER Morga  [ici utilisé est SI]
              @@Test_tt_les_autres:
                            mov ax,tab_orga[si]    ;on va tester si on a afaire a un morga vivant
		            cmp ax,0		   ;energie plus de zero
		            JNE @@ok2
		            ADD si,8

		            @@ok2:
		              @@CAS_1:        ;test si Morga au Nord a gauche
		                   push bx       ;Sauvegarde des Indices ->sur Energie
		                   push si
		                       sub bx,4              ;bx sur posx
                                       mov ax,tab_orga[bx]   ;
                                       sub si,4              ;si sur posx
                                       dec ax                ;test sur X-1
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_2
                                          ADD bx,2           ;bx sur posy
                                          ADD si,2           ;si sur posy
                                          mov ax,tab_orga[bx]
                                          dec ax             ;test sur Y-1
                                          cmp ax,tab_orga[si]
                                          JNE @@CAS_2
                                           INC proximite

                              @@CAS_2:        ;test si Morga au nord centre
                                   pop si
                                   pop bx    ;-->on revient au indice sur Energie
                                   push bx
                                   push si   ;-->sauvegarde des indices
                                       sub bx,4         ;bx,si sur posx
                                       sub si,4
                                       mov ax,tab_orga[bx]
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_3
                                          ADD bx,2         ;bx,si sur posy
                                          ADD si,2
                                          mov ax,tab_orga[bx]
                                          dec ax
                                          cmp ax,tab_orga[si]
                                          JNE @@CAS_3
                                           INC proximite



                              @@CAS_3:       ;test avec la case nord DRoite
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                       sub bx,4       ;indice sur posx
                                       sub si,4
                                       mov ax,tab_orga[bx]
                                       INC ax
                                       cmp tab_orga[si],ax
                                       JNE @@CAS_4
                                          ADD bx,2     ;indice sur posy
                                          ADD si,2
                                          mov ax,tab_orga[bx]
                                          DEC ax
                                          cmp tab_orga[si],ax
                                          JNE @@CAS_4
                                            INC proximite


                              @@CAS_4:        ;test sur la case centre droite
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                        sub bx,4     ;indice sur posx
                                        sub si,4
                                        mov ax,tab_orga[bx]
                                        INC ax
                                        cmp ax,tab_orga[si]
                                        JNE @@CAS_5
                                           ADD bx,2  ;indice sur posy
                                           ADD si,2
                                           mov ax,tab_orga[bx]
                                           cmp ax,tab_orga[si]
                                           JNE @@CAS_5
                                              INC proximite


                              @@CAS_5:       ;test sur case SUD droite
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                      sub bx,4    ;indice sur posx
                                      sub si,4
                                      mov ax,tab_orga[bx]
                                      INC ax
                                      cmp ax,tab_orga[si]
                                      JNE @@CAS_6
                                        ADD bx,2   ;indice sur posy
                                        ADD si,2
                                        mov ax,tab_orga[bx]
                                        INC ax
                                        cmp ax,tab_orga[si]
                                        JNE @@CAS_6
                                          INC proximite



                              @@CAS_6:         ;Test sur case sud centre
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                       SUB bx,4   ;indice sur posx
                                       SUB si,4
                                       mov ax,tab_orga[bx]
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_7
                                         ADD bx,2   ;indice sur posy
                                         ADD si,2
                                         mov ax,Tab_orga[bx]
                                         INC ax
                                         cmp ax,tab_orga[si]
                                         JNE @@CAS_7
                                            INC proximite


                              @@CAS_7:        ;Test sur case Sud gauche
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si  ;-->sauvegarde des indices
                                       sub bx,4    ;indice sur posx
                                       sub si,4
                                       mov ax,tab_orga[bx]
                                       DEC ax
                                       cmp ax,tab_orga[si]
                                       JNE @@CAS_8
                                         ADD bx,2  ;indice sur posy
                                         ADD si,2
                                         mov ax,tab_orga[bx]
                                         INC ax
                                         cmp ax,tab_orga[si]
                                         JNE @@CAS_8
                                            INC proximite



                              @@CAS_8:       ;Test sur case gauche
                                   pop si
                                   pop bx  ;recuperation des indices sur energie
                                   push bx
                                   push si
                                      sub bx,4
                                      sub si,4
                                      mov ax,tab_orga[bx]
                                      dec ax
                                      cmp ax,tab_orga[si]
                                      JNE @@fin_cas
                                         add bx,2
                                         add si,2
                                         mov ax,tab_orga[bx]
                                         inc ax 
                                         JNE @@fin_cas
                                            INC proximite


     @@fin_cas:
              pop si
              pop bx
                  ADD si,8
              LOOP @@Test_tt_les_autres

              pop cx
              pop bx

        @@Test_si_proximite_egal_8:
                                    cmp proximite,8
                                    JNE @@pas_egal
                                    mov tab_orga[bx],0  ;=>si l orga a une proximite de 8
                                                        ;  il dois mourir =>car plus de place pour vivre
        @@pas_egal:
              ADD bx,8           ;passage au Morga suivant
  LOOP @@Boucle_traite_TT_orga


RET
test_si_entoure endp
;-----------------------------------------------------------------------
donnecoordonneeimorga proc	  ;procedure d'initialisation du tab des morga

	      mov tab_orga[bx],1    ;age=1 il est donc vivant

	      push 0
	      push 119
	      call random
	      mul cinq		  ; appel random ds ax

	      add bx,2		    ;indice en posx
	      mov tab_orga[bx],ax   ;donne nbre aleatoire

	      push 0
	      push 79
	      call random
	      mul cinq		  ; appel random ds ax

	      add bx,2		   ;indice en posy
	      mov tab_orga[bx],ax  ;nbre aleatoire ds posy

	      add bx,2		    ;indice en energie
	      push 150
	      push 250
	      CALL random
	      mov tab_orga[bx],ax   ;energie=[150-250] initialisation
ret
donnecoordonneeimorga endp
;-----------------------------------------------------------------------
donnecoordonneeinouriture proc

	      push 0
	      push 119
	      call random
	      mul cinq
	      mov tab_nouriture[bx],ax	;indice sur posx ,donne nbre aleatoire

	      push 0
	      push 79
	      call random
	      mul cinq
	      add bx,2			;indice sur posy
	      mov tab_nouriture[bx],ax	;donne nbre aleatoire
ret
donnecoordonneeinouriture endp
;-----------------------------------------------------------------------
add_nouriture proc		     ;nb_nouriture+=(nb_nouriture/nb_orga)
  pusha
		  MOV si,0    ;indice sur posx de nouriture
		  mov ax,nb_Morga
		  sub dx,dx
		  DIV trente
		  MOV cx,ax    ;nbre d de nouriture rajoutée

				;on va remplir le tableau de nouriture
		  @@Boucle:
			     ;== seul les cases posx=0 seront comblée ==;
			  mov ax,tab_nouriture[si]
			  cmp ax,0
			  JNE @@okp

			  push 0
			  push 120
			  CALL random
			  mul cinq
			  mov tab_nouriture[si],ax   ;posx de tab_nouriture

			  mov posx,ax

			  push 0
			  push 80
			  CALL random
			  mul cinq
			  ADD si,2		     ;posy de tab_nouriture
			  mov tab_nouriture[si],ax

			  mov posy,ax

			  mov al,02h
			  CALL carre

			  ADD si,2		     ;posx suivant

			  JMP @@suivant
		     @@okp:
			  INC cx
			  ADD si,4
		     @@suivant:


		  Loop @@Boucle
  popa
ret
add_nouriture endp
;------------------------------------------------------------------------
dessine_nouriture proc		   ;procedure qui va parcourire le vecteur et dessiner
				   ;les cases avec nouritures
    mov cx,nb_nouriture
    mov si,0
    @@boucle1:
		mov ax,tab_nouriture[si]   ;test pour voir si il y a de la nouriture
		cmp ax,1		   ;car impossible k il y en ai en posx=0
		jge @@ok
		add si,4
		jmp @@boucle1
	   @@ok:
		mov ax,tab_nouriture[si]
		mov posx,ax

		add si,2
		mov ax,tab_nouriture[si]
		mov posy,ax

		mov al,02h
		call carre
		add si,2
    loop @@boucle1
ret
dessine_nouriture endp
;-----------------------------------------------------------------------
dessine_morga proc
		       ;== parcours du vecteur tab_orga ==

		       mov bx,6    ;indice sur energie Morga n°1
		       mov cx,nb_morga

		       @@bouclem:
			 push bx
				     mov ax,tab_orga[bx]     ;== 1/ test si vivant ==
				     cmp ax,0
				     jg @@vivant
				     INC cx
				     jmp @@finboucle

				@@vivant:
					   sub bx,4    ;indice sur posx
					   mov ax,tab_orga[bx]
					   mov posx,ax ;donne la coordonnée

					   add bx,2   ;indice sur posy
					   mov ax,tab_orga[bx]
					   mov posy,ax ;donne la coordonnée



			  pusha
				  mov ax,efface   ;on va tester si il sagit de colorier
				  cmp ax,0	  ;la case ou se trouve le morga ou de l'effacer
				  jne @@couleur_noir
		     @@couleur_rouge:
				  mov al,04h
				  jmp @@couleurok
		     @@couleur_noir:
				  mov al,00h
		     @@couleurok:
				  call carre	  ;appel procedure pour dessiner le carre
			  popa

		     @@finboucle:

		     pop bx
		     add bx,8  ;indice sur energie suivant

		     loop @@bouclem

ret
dessine_morga endp
;--------------------------------------------------------
carre proc
	 push cx
	 mov cx,4
	 inc posy
	 inc posx
   @@bouclecaseok:		;l'utilisation est tres simple,donner les coordonnées
	 call colorie_caseok2	;du pixel en haut a gauche(max sup gauche)
	 inc posy		;avec posx & posy
	 loop @@bouclecaseok
	 sub posy,4
	 pop cx
	 ret
carre endp
;--************phase_suiv*******************--
colorie_caseok2 proc	  ;comme on a afaire a une boucle impriqué
	 push cx	  ;le chois de ssroutine est plus judicieux
	 mov cx,4	  ;colorie_caseok2 est donc relié a colorie_caseok
    @@bouclecase2ok:
	 call pixel
	 inc posx
	 loop @@bouclecase2ok
	 sub posx,4
	 pop cx
	 ret
colorie_caseok2 endp
;-----------------------------------------------------------
damier proc
  mov al,07h
    mov posx,0
    mov posy,0
   lignes_horizontales:
			 mov cx,82
			 @@boucle2h:
				     push cx
				     mov cx,605

				     @@boucle1h:
						call pixel
						inc posx
				     loop @@boucle1h

				     add posy,5
				     mov posx,0
				     pop cx
			loop @@boucle2h
    mov posx,0
    mov posy,0
   lignes_vertivales:
			mov cx,122
			@@boucle2v:
				    push cx
				    mov cx,405

				    @@boucle1v:
					       call pixel
					       inc posy
				    loop @@boucle1v

				    add posx,5
				    mov posy,0
				    pop cx
			loop @@boucle2v
	   ret
damier endp
;-----------------------------------------------------
titrelegende proc

mov posx,5
mov posy,26
call curseur
mov dx,offset titre2
call ecrit

mov posx,41
mov posy,27
call curseur
mov dx,offset mort
call ecrit
	    ret
titrelegende endp
;-----------------------------------------------------
mode_graphique proc
	mov	al,12h ; mode graphique 12h->640*480
	mov	ah,00h
	int	10h
	ret
mode_graphique endp
;------------------------------------------------------
pixel proc	     ;procédure permettant l'affichage
  pushad	     ;d'un pixel,selon les coordonnées
  mov ah,0ch	     ;ici posx et posy
		  ;   mov al,01h	     ;01-->bleu
  mov bx,0000h
  mov cx,posx
  mov dx,posy
  int 10h
  popad
  ret
pixel endp
;------------------------------------------------
;***************************************
;*Test si appui sur Q pour quitter     *
;***************************************
fin_prog proc
pusha
mov     ah,0bh
int     21h
cmp     al,0ffh
jne     fin_test_q

mov     ah,01
int     21h
cmp     al,113  ;113 = valeur ascii de la lettre Q
jne     fin_test_q
CALL clavier
JMP  fin


fin_test_q:

     popa
     ret
fin_prog endp
;---------------------------------------------------
clavier proc
	pusha
	mov	ah,07h	     ; attente d'une touche
	int	21h
	popa
	ret
clavier endp
;-------------------------------------------------
curseur proc near		 ;ssroutine de positionnement du curseur
		 push ax	 ;utilisé pour l'affichage
		 mov dl,byte ptr posx
		 mov dh,byte ptr posy
		 mov ax,0200h
		 int 10h
		 pop ax
		 ret
curseur endp
;-------------------------------------------------
ecrit proc			  ;écriture, va etre utilisé avec un mov dx,offset .nom.
		 pusha
		 mov  ax,0900h
		 int  21h
		 popa
		 ret
ecrit endp
;--------------------------------------------------
; fin du programme**************************
fin:
  ; création d'un fichier et ouverture
  MOV	AH,3CH
  MOV	CX,0000000b		; attibuts standards
  MOV	DX,offset fichier
  int	21h
  MOV	handle,AX

  ; écriture d'un buffer
  MOV	AH,40h
  MOV	BX,handle
  MOV	CX,lenght_tabOrga
  mov dx,'0'
  ADD tab_orga,dx
  MOV	DX,offset tab_orga
  int	21h

  ; femeture du fichier
  MOV	AH,3Eh
  MOV	BX,handle
  int	21h

	mov	al,03h	      ;modevideo 03h (texte)
	mov	ah,00h
	int	10h
	mov	ax,04c00h
	int	21h
end main
;-------------------------------------------------------------



 Sources de la même categorie

Source avec Zip Source avec une capture MINI DEBUG par parki
Source avec une capture DESSIN DE RECTANGLES (POSITION, TAILLE, COULEUR, ÉPAISSEUR) par macsou01
RECHERCHE DES PALINDROMES D'UN TEXTE SAISI. par PCBill
Source avec Zip LIBRAIRIE GRAPHIQUE (ET PLUS) EN MODE RÉEL par epineurien
Source avec Zip Source avec une capture LIB PROGRESSBAR (PERSONNALISABLE , DÉGRADÉ DE COULEUR,POURCE... par knetus

Commentaires et avis

Commentaire de sibi12 le 28/04/2004 13:08:11

Quel assembleur utilises-tu?

Commentaire de Bombela le 29/04/2004 23:03:30

C'est surement MASM !

Commentaire de Bombela le 30/04/2004 14:36:11

Heu... Tu peux pas mettre un zip avec les fichiers objets utilisé par ton prog (comme Random par exemple) et puis aussi mettre dedans une version compilée ?

Ce serais sympa.
Ton prog m'interresse beaucoup. Surtout pour la gestion des petites bactéries, et leur petites intélligence.

bye.

Commentaire de Dax_digital le 04/05/2004 11:31:30

alors le compilateur c est
TASM

--&gt; et pour les fichiers je vous fais un chti zip et j envoi tt ca !! :D

pour l enoncé il se trouve ici :
http://pittt.free.fr/brol/asm03_04/enonce.pdf

le RANDOM sera fournis avec le zipos !:D

en vous remerciant
Digital snake...

Commentaire de Dax_digital le 04/05/2004 11:43:38

je n'ai pas réussi a uploader mon ZIP sur le site meme , je le met donc sur mon ftp :)

il est accesible ici ;
http://membres.lycos.fr/digitalsnake/ASM/

ou

http://membres.lycos.fr/digitalsnake/ASM/Bacterie.zip


vala :D bonne comprehension

Commentaire de Bombela le 04/05/2004 14:42:15

Merci !

Et me suis trompé pour Tasm !

@+

Commentaire de soumpro le 07/05/2004 17:49:36

ahahaha

Commentaire de BlackWizzard le 17/05/2004 16:11:12 administrateur CS

j'adore!
c cool d'avoir mis l'enoncé :)

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales