Code assembleur 80x86
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Code assembleur 80x86



  1. #1
    maxime10

    Code assembleur 80x86


    ------

    Bonjour,

    Voici mon problème :

    J'ai un exercice où je dois dédoubler une chaîne de caractère :

    Ex : a b c a devient a b c a a b c a

    L'énoncé me dit que BX pointe vers la chaîne à traiter et CX contient sa taille.

    Mon code est :
    Code:
    section.txt
    
    mov SI , 0                              : Si va me permettre de parcourir ma chaîne.
    cmp CX , 0                             : Je vérifie que ma chaine existe
    JE FIN                                    :  Si CX=0 , je vais à FIN.
    
    Boucle: add BP,SI                   : Je place SI dans BP pour pouvoir faire des opérations sans perdre SI par la suite
               mov AX, [BX+SI]         : Je place dans AX la case courante de la chaine
               Add BP,CX                   : BP=BP+CX pour savoir où réecrire le caractère courant
               Mov [BP],AX                 : Je place ma case courant à la suite de la chaine , à la case valeur de BP
               INC SI                         : J'incrémente SI pour passer à la case suivante de ma chaine
               Loop Boucle
    
    Fin: ret
    Le problème c'est qu'il faudrait pour bien faire que :

    en début de boucle BP pointe vers la première case de la chaine.

    et que avant d'incrémenter SI à la fin de la boucle, il faut remettre BP en début de chaine.

    Avez-vous une idée de comment faire ?
    Est-ce que mon code semble correct ?

    Merci d'avance,

    Maxime 10

    -----
    Dernière modification par Jack ; 08/08/2015 à 15h31. Motif: Ajout balises code

  2. #2
    maxime10

    Re : Code assembleur 80x86

    Si je fais ceci , est-ce correct ?

    section.txt

    mov SI,0
    cmp CX,0
    JE FIN

    BOUCLE : mov BP,BX
    ADD BP,SI
    ADD BP,CX
    mov AX, [BX+SI]
    mov [BP],AX
    INC SI
    LOOP BOUCLE

    FIN: ret

  3. #3
    Jack
    Modérateur

    Re : Code assembleur 80x86

    je ne vais pas te mettre les balises code à chaque fois. Il faut que tu le fasses tout seul à présent
    Le problème c'est qu'il faudrait pour bien faire que :

    en début de boucle BP pointe vers la première case de la chaine.
    Sinon, il faudrait que la chaine apparaisse dans le code, ainsi que la chaine de destination. Ainsi, tu pourrais charger BX avec l'adresse de la chaine (ou son label)
    Dernière modification par Jack ; 08/08/2015 à 16h00.

  4. #4
    ranarama

    Re : Code assembleur 80x86

    salut !

    Pour le texte l'instruction movsb est meilleure :

    http://www.esaracco.fr/documentation...de-chaine.html

  5. A voir en vidéo sur Futura
  6. #5
    polo974

    Re : Code assembleur 80x86

    là, comme ça, pour dire:
    80x86, c'est quoi?
    8086
    80286
    80386
    80486
    (ok, j’arrête)...

    le jeu d'instruction étant chaque fois un peu plus grand. (sans parler des modes à partir du 286)
    Jusqu'ici tout va bien...

  7. #6
    Bluedeep

    Re : Code assembleur 80x86

    Citation Envoyé par polo974 Voir le message
    là, comme ça, pour dire:
    80x86, c'est quoi?
    8086
    80186
    80286
    Il manquait une étape
    Bon, de mémoire(ça remonte très loin) cette étape ne comprenait que 8 instructions supplémentaires (je me souviens de ENTER et LEAVE mais pas des autres).

  8. #7
    polo974

    Re : Code assembleur 80x86

    je n'ai pas mis le 80186, car c'était un microcontrôleur, pas vraiment un microprocesseur...

    souvenirs, souvenirs...
    Jusqu'ici tout va bien...

  9. #8
    Ludwig1

    Re : Code assembleur 80x86

    Citation Envoyé par maxime10 Voir le message
    Si je fais ceci , est-ce correct ?

    section.txt

    mov SI,0
    cmp CX,0
    JE FIN

    BOUCLE : mov BP,BX
    ADD BP,SI
    ADD BP,CX
    mov AX, [BX+SI]
    mov [BP],AX
    INC SI
    LOOP BOUCLE

    FIN: ret

    Salut

    Code:
    
    
    LABEL  U<
    403B5F   EBX 0 [EBP] CMP                395D00
    403B62   EBX EBX SBC                    19DB
    403B64   4 # EBP ADD                    83C504
    403B67   RET                            C3 
    
    
    LABEL    CMOVE>
    
    404B9F   EBX EBX TEST                   85DB
    404BA1   404BB4 JZ                      7411
    404BA3   0 [EBP] EDX MOV                8B5500
    404BA6   4 [EBP] ECX MOV                8B4D04
    
    Mettre   Label ici pour JNZ
    
    404BA9   -1 [EBX] [ECX] AL MOV          8A440BFF
    404BAD   AL -1 [EBX] [EDX] MOV          884413FF
    404BB1   EBX DEC                        4B
    404BB2   404BA9 JNZ                     75F5
      
    Mettre Label ici pour le JZ
    
    404BB4   8 [EBP] EBX MOV                8B5D08
    404BB7   C # EBP ADD                    83C50C
    404BBA   RET                            C3 ok
    
    
    LABEL   CMOVE
    
    404B6F   EBX EBX TEST                   85DB
    404B71   404B82 JZ                      740F
    404B73   0 [EBP] EDX MOV                8B5500
    404B76   4 [EBP] ECX MOV                8B4D04
    
    ici Label pour Junp If not Zéro
    
    404B79   0 [ECX] AL MOV                 8A01
    404B7B   AL 0 [EDX] MOV                 8802
    404B7D   ECX INC                        41
    404B7E   EDX INC                        42
    404B7F   EBX DEC                        4B
    404B80   404B79 JNZ                     75F7
    
     ici Label pour jump if zéro
    
    404B82   8 [EBP] EBX MOV                8B5D08
    404B85   C # EBP ADD                    83C50C
    404B88   RET                            C3 ok
    
    
    
    
    PP
    
    404BCF    EBX PUSH                          53
    404BD0   0 [EBP] EBX MOV                8B5D00
    404BD3   4 # EBP ADD                       83C504
    404BD6   8 # EBP SUB                       83ED08
    404BD9   EBX 4 [EBP] MOV                895D04
    404BDC   8 [EBP] EAX MOV                8B4508
    404BDF   EAX 0 [EBP] MOV                 894500
    404BE2   403B5F ( U< ) CALL             E878EFFFFF
    404BE7   EBX EBX OR                         09DB
    404BE9   0 [EBP] EBX MOV                 8B5D00
    404BEC   4 [EBP] EBP LEA                  8D6D04
    404BEF   404C06 JZ                           0F8411000000
    404BF5   4 # EBP SUB                        83ED04
    404BF8   EBX 0 [EBP] MOV                 895D00
    404BFB   EBX POP                              5B
    404BFC   404B9F ( CMOVE> ) CALL   E89EFFFFFF
    404C01   404C12 JMP                       E90C000000
    404C06   4 # EBP SUB                      83ED04
    404C09   EBX 0 [EBP] MOV                895D00
    404C0C   EBX POP                            5B
    404C0D   404B6F ( CMOVE ) CALL     E85DFFFFFF
    404C12   RET                                  C3 ok

    cordialement

    Ludwig

  10. #9
    Bluedeep

    Re : Code assembleur 80x86

    Citation Envoyé par polo974 Voir le message
    je n'ai pas mis le 80186, car c'était un microcontrôleur, pas vraiment un microprocesseur...
    Désolé, mais c'est faux.
    Le 80186 était une evolution du 8086, mais il n'a pas été utilisé longtemps car le 80286 est sorti très vite. La seule série de machine notables qui l'a utilisé à assez grande échelle (pour l'époque : 300 000 vendus) ce sont les Convergent Techonologies NGen fonctionnant sous système CTOS, vendus sous licence OEM par Burrough/Unisys sous le nom de B25/B26, par Bull sous le nom de Questar 400, et pas MDS sous le nom de Hero;

    http://www.computinghistory.org.uk/d...n-workstation/

    Il y eu aussi des PC français de marque Goupil avec ce proc.

    souvenirs, souvenirs...
    Idem.

  11. #10
    ranarama

    Re : Code assembleur 80x86

    'Soir
    Une des particularités du 186 c'est qu'il n'était pas 100% compatible avec la génération précédente, car imaginé par la R&D pour permettre l'élargissement de son champ d'application : une sorte de batard µC/µP , un processeur permettant de réduire le nombres de chip externes.
    Le succès de l'IBM-PC basé sur le 8086 amena Intel a sortir rapidement un µP évolué et particulièrement dédié au PC soit 100% compatible avec l'architecture 80x86, lui permettant de sceller l'alliance avec Microsoft et son DOS en posant les bases d'une domination du marché grand public qui allait rapidement devenir outrancière.

  12. #11
    polo974

    Re : Code assembleur 80x86

    Citation Envoyé par Bluedeep Voir le message
    Désolé, mais c'est faux.
    ...
    Ben si c'est vrai, le 80186 comporte le contrôleur d'irq, des timers, donc c'est un microcontrôleur...
    Jusqu'ici tout va bien...

Discussions similaires

  1. compréhension code assembleur (13 lignes)
    Par erwannomar dans le forum Électronique
    Réponses: 17
    Dernier message: 27/09/2014, 23h29
  2. portage code assembleur pic16f883 vers pic18f24k22
    Par vincent-pimousse dans le forum Électronique
    Réponses: 4
    Dernier message: 27/06/2012, 21h03
  3. A propos un code assembleur
    Par sahar91 dans le forum Électronique
    Réponses: 0
    Dernier message: 19/02/2012, 23h19
  4. code assembleur sur isis
    Par invitef0165562 dans le forum Électronique
    Réponses: 1
    Dernier message: 04/07/2011, 03h53
  5. [PIC] Utiliser des routines assembleur dans le code C
    Par pseudoblogeus dans le forum Électronique
    Réponses: 4
    Dernier message: 29/12/2008, 23h29