begin process at 2012 05 25 03:57:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Aide et documentation

 > 

Executer 2 action en meme temps


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Executer 2 action en meme temps

jeudi 23 septembre 2010 à 09:08:10 | Executer 2 action en meme temps

HirOinEvOl

Bonjour,

je souhaite exécuter les deux codes suivant mais simultanément pour qu'ils puissent tournés en parrallèles. Je n'ai trouvé aucun moyen de le faire.

Code :
org 100h
     
;===================================================================================

boucle PROC     ; debut de la fonction


;===================affichage du message "appuyer sur Entree"=======================


    GOTOXY 30, 20  ; le curseur se rend au coordonnees 30,20
       
        jmp start      
        
             msg:    db      "Appuyez sur Entree", 0Dh,0Ah, 24h
            
             start:              
                    mov dx, msg  ; charge l'offset du message dans dx
                    mov ah, 09h  ; fonction d'affichage 9.
                    int 21h      ; on utilise l'interruption 21h pour afficher les 
                                 ; caractere a l'ecran     
                    
    GOTOXY 30, 20  ; le curseur se rend au coordonnees 30,20                  
           
        jmp effStart
             
            effmsg :  db    "                  ", 0Dh,0Ah, 24h
            
            effStart:         
                     mov dx, effmsg  ; charge l'offset du message dans dx
                     mov ah, 09h     ; fonction d'affichage 9.
                     int 21h         ; on utilise l'interruption 21h pour afficher les 
                                     ; caractere a l'ecran
                                          
            recup :
                    
                    mov ah, 01h   ; permet de recupere une frappe clavier
                    
                    int 16h      ; attente de la touche
                    
            
          
                    cmp al, 13   ; on compare la valeur  de al a celle de la touche 
                                 ; entrer qui correspond au caractere ASCii 13
                    je finProg   ; si egal fin du programme
                                                             
                                                             
    jmp boucle   ; boucle sur la fonction boucle

ENDP



finProg: ; fin du programme
     

en meme temps que celui-ci :
Code :
;initialisation de la memoire video 

MOV AX, 0B800h
MOV DS, AX



MOV AX,0
MOV DX,0
ADD BX,0
MOV CX,0 
 

;========================PROCEDURE REBOND========================




rebond1:   

    MOV BX,AX            
    MOV [01h+BX], 40h    ; couleur du tracer laisser par  la balle (rouge)
    
    MOV BX,DX            
    MOV [01h+BX], 0F0h   ; couleur de la balle 
    
    MOV AX,BX            
    ADD BX, 162          
    MOV DX,BX            
     

    
    INC CL 
    INC CH  
    
    
    ;on verifie si la balle est touche le bas de la fenetre
    
    CMP CL,24  
    JGE rebond2
    
    
    ;on verifie si la balle touche le cote droit de la fenetre
    
    CMP CH,79
    JGE rebond4
      
    
    ; si aucunes de ces 2 conditions n'est concretise on relance l'etiquette executee
    
    JMP rebond1



    
rebond2:  

    MOV BX,AX
    MOV [01h+BX], 40h   ;couleur du tracer laisser par  la balle (rouge)
    
    MOV BX,DX
    MOV [01h+BX], 0F0h 

    MOV AX,BX
    SUB BX,158
    MOV DX,BX 

    DEC CL
    INC CH    
    
    
    ;on verifie si la balle touche le haut de la fenetre   
    
    CMP CL,0
    JLE rebond1   
    
    
    ;on verifie si la balle touche le cote droit de la fenetre
    
    CMP CH,79
    JGE rebond3  
    
    
    ;si aucunes de ces 2 conditions n'est concretise on relance l'etiquette executee 
    
    JMP rebond2




rebond3: 

    MOV BX,AX
    MOV [01h+BX], 40h              ;couleur du tracer laisser par  la balle (rouge)
    
    MOV BX,DX
    MOV [01h+BX], 0F0h 
    
    
    MOV AX,BX
    SUB BX,162
    MOV DX,BX 
    
    DEC CL
    DEC CH   
    
          
    ;on verifie si la balle touche le haut de la fenetre 
    
    CMP CL,0
    JLE rebond4 
    
    
    ;on verifie si la balle touche le cote gauche de la fenetre
    
    CMP CH,0
    JLE rebond2 
    
    
    ;si aucunes de ces 2 conditions n'est concretise on relance l'etiquette executee
    
    JMP rebond3




rebond4:      

    MOV BX,AX
    MOV [01h+BX], 40h         ;couleur du tracer laisser par  la balle (rouge)
    
    MOV BX,DX
    MOV [01h+BX], 0F0h 
    
    MOV AX,BX
    ADD BX,158
    MOV DX,BX 

    INC CL
    DEC CH  
    
    
    ;on verifie si la balle touche le bas de la fenetre 
    
    CMP CL,24
    JGE rebond3
    
    
    ;on verifie si la balle touche le cote gauche de la fenetre
    
    CMP CH,0
    JLE rebond1 
    
    
    ;si aucunes de ces 2 conditions n'est concretise on relance l'etiquette executee  
    
    JMP rebond4

RET


merci de votre réponse :)
vendredi 24 septembre 2010 à 09:18:30 | Re : Executer 2 action en meme temps

patatalo

Membre Club Administrateur CodeS-SourceS
salut,


Du multiprocesseur en mode réel, chaud bouillant. Les 2 codes ne pourront s'executer que simultanément en donnant seulement l'impression de tourner en même temps.

J'ai déjà vu des codes sur le net pour faire du multitâche en mode réel sous DOS. Par contre, je ne suis pas du tout sûr que l'on puisse utiliser plusieurs processeurs.

@++
vendredi 24 septembre 2010 à 09:25:45 | Re : Executer 2 action en meme temps

HirOinEvOl

arf c'est chiant. Jdois faire une animation en asm alors si je peut pas exécuter plusieurs actions en même temps, je peut faire comment pour afficher plusieurs choses différentes à l'écran ?

(c'est un programme de rattrapage pour des 1ère année de Supinfo hein...) si c'est chaud comme ca et beh.*

Mais chez moi j'ai un quad-core alors peut etre que ca passe mais bon jdois l'uploader sur une platforme supinfo donc eux si ils ont des bécanes pourries ca sert a rien.

Si tu peut éclairé...
vendredi 24 septembre 2010 à 09:26:51 | Re : Executer 2 action en meme temps

patatalo

Membre Club Administrateur CodeS-SourceS
re,


Oups, j'avais mal lu. Utilise le Timer 0 (interruption 8 ou 1Ch des vecteurs du mode réel) en le surchargeant. Par defaut, le temps entre chaque interruption est de 18 ms en gros.

A chaque interruption, tu sauvegardes les registres d'execution courant et tu restaures ceux de l'execution suivante. Tu retournes sur le code a executer avec un iret, retf ou jmp far, suivant ton implémentation.

@++
vendredi 24 septembre 2010 à 09:37:31 | Re : Executer 2 action en meme temps

HirOinEvOl

WAAAAAAAHhH va falloir que je potasse, j'capte que dalle -_- mais je vais test
vendredi 24 septembre 2010 à 10:03:09 | Re : Executer 2 action en meme temps

HirOinEvOl

j'ai trouvé ca sur le net

IT 8 : tic horloge (timer) appelé toutes les 55 ms (18,2 fois/s.). Elle sert par exemple à arrêter
le moteur de l'unité de disquette lorsque aucun accès à la disquette n'est exécuté. Cette interruption
08H, après avoir lancé le programme correspondant, appelle l'interruption 1CH. Cette dernière ne
contient qu'un retour IRET afin de permettre aux programmeurs d'implanter leurs propres
programmes d'interruption (objectifs : programmation concurrente, multitâche,....)



je le code comme ca en gros : non ?
Code :
org 100h

; 1er prog ici non ??

mov ah, 08h

iret mon prog ; la je met mon 2eme prog ??

ret

mais surement avec des MOV a certains endroits ?

(dsl je pose bcp de questions :) )
vendredi 24 septembre 2010 à 18:27:03 | Re : Executer 2 action en meme temps

patatalo

Membre Club Administrateur CodeS-SourceS
re,

oui, je me suis trompé entre fréquence et nombre d'appels par seconde.

Old_int8:
dw 0,0 ; cs:ip vers ancien vecteur.

Current_context:
dw 0; bascule code 0, code 1

Save_context_Code1:
dw 0,0,0,... ; ax, bx, cx, ...
dw Code1,0 ; ip, cs
dw 0 ; flags

Save_context_Code2:
dw 0,0,0,... ; ax, bx, cx, ...
dw Code2,0 ; ip, cs.
dw 0 ; flags

Hook_int8:
; quand une interruption survient, les registres cs:ip et flags se retrouvent dans la pile.
pop Save_context[Current_context].ip
pop Save_context[Current_context].cs
pop Save_context[Current_context].flags
mov Save_context[Current_context].ax,ax
...

Current_context += 1;

push Save_context[Current_context].flags
push Save_context[Current_context].cs
push Save_context[Current_context].ip
mov ax,Save_context[Current_context].ax
...

jmp far [Old_int8]


Code1:
...

Code2:
...


@++
vendredi 24 septembre 2010 à 18:40:37 | Re : Executer 2 action en meme temps

patatalo

Membre Club Administrateur CodeS-SourceS
re,

chaque thread devra avoir obligatoirement sa propre pile. Il faudra la mettre a jour avant de pusher les nouvelles valeurs dans le hook de l'interruption 8.

@++
vendredi 24 septembre 2010 à 18:54:18 | Re : Executer 2 action en meme temps

patatalo

Membre Club Administrateur CodeS-SourceS
Old_int8:
dw 0,0 ; cs:ip vers ancien vecteur.

Current_context:
dw 0; bascule code 0, code 1

reg_sp:
dw 0, 0 ; sp1, sp2

Hook_int8:
; quand une interruption survient, les registres cs:ip et flags se retrouvent dans la pile.
pusha
mov reg_sp[Current_context & 1],sp

Current_context += 1

mov sp,reg_sp[Current_context & 1]
popa

jmp far [Old_int8]

la pile du code2 devra être initialisée pour simuler une interruption précedente

mov sp, stack_code2
pushf
push cs
push offset Code2
pusha
mov reg_sp[1], sp
mov sp, stack_code1
mov reg_sp[0], sp
call HookInt8
Code1:
...
jmp Code1
Code2:
...
jmp Code2

un truc comme ça en gros.

@++
vendredi 24 septembre 2010 à 21:11:48 | Re : Executer 2 action en meme temps

HirOinEvOl

ok merci je mettrait ca en application ce week end

1 2

Cette discussion est classée dans : mov, ax, bx, balle, dx


Répondre à ce message

Sujets en rapport avec ce message

Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 verification d'un code [ par marooh ] Bonjour, j'ai écrit un code assembleur qui consiste à créer un tableau de 20 cases , de les remplir,de trouver le maximum et de faire la moyenne.mais Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ] [code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3 ERREUR DE SEGMENTATION en asm [ par tahsgh ] salam; jai le code suivant ----------------------------------------- global main SECTION . text main : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique) [ par dogloop ] J'ouvre ce topic pour essayer de mieux comprendre quelles sont les différentes façons pour accéder à toute la RAM (et aussi peut être la ROM) de mon P Addition ASM [ par GibsonUSA ] Bonjour a tous, je débute en ASM 16bits et je bloque pour faire une addition de deux chiffres saisis par l'utilisateur. Voila ce que j'ai fais. A l' boot system [ par henri12 ] salut je viens de trouver ce code qui permer de lancer un fichier sur une disquettr a: exemple systemje voudrais qu il me lance le jeu pong sur a:  j


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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,234 sec (4)

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