Invertion d'une chaine de caractère.

Signaler
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,

Voila je débute en ASM et je veu faire un bête programme qui inverse une chaine de caractère. Je l'ai fait, mais celui-ci, ne va pas vraiment très bien. Je l'ai tester sur papier, tout doit aller, je l'ai filer à un gars, il n'a rien trouver non plus :s . Voici le code :

.386
assume SS:pile,CS:code,DS:donnees

pile segment stack use16
    DB 1024 DUP(0)
pile ends

donnees segment use16
   acStr1 DB "zorro$"
donnees ends

code segment use16
main :

    mov AX,donnees
    mov DS,AX

   mov SI,0
   mov BX,5
   dec BX
   mov AX,0

   deb_bcl_1 :
             CMP SI,BX
             JE fin_bcl_1 ;Si les deux compteurs sont égaux, on arrête la boucle.

             mov AL,acStr1[SI]
             
             Xchg AL,acStr1[BX]
             
             mov acStr1[SI],AL

             inc SI
             dec BX
   fin_bcl_1:

   mov AH,09h
   LEA DX,acStr1
   int 21h

    mov ah,4ch
    int 21h
code ends
end main

Au lieu d'afficher orroz il affiche oorrz, il ne fait pas une fois assez l'invertion, mais j'ignore pourquoi , j'ai esseye de remplacer le Je pas JA ou JAE, mais rien n'y fait.

Merci d'avance.
++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

2 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

et ça, ça donne quoi ?

...
mov SI,0
mov DI,5
dec DI
mov AX,0
lea BX,acStr1

   deb_bcl_1 :
             CMP SI,DI
             JAE fin_bcl_1 ;above obligatoire si le mot est de taille paire.

             mov AL,[BX+SI]
             
             Xchg AL,[BX+DI]
             
             mov [BX+SI],AL

             inc SI
             dec DI
   fin_bcl_1:

...
@++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
xchg est à bannir, bouffeur de cycles issu du temps du mono pilpeline qui se remplace aisément par 2 mov qui seront eux parallelisables.


SI et DI me semblent aussi inutiles, voir nuisibles ici car l'adressage indexé est couteux en taille de code, autant s'en passer quand on peut.


lea AX, acStr1
mov BX, AX
add AX, 5


deb_bcl_1 :
cmp  BX, AX
jae short fin_bcl_1
mov  dl, [AX]
mov  cl, [BX]
mov  [AX], cl
mov  [BX], dl
dec  AX
inc BX
jmp  short deb_bcl_1
fin_bcl_1:

ciao...
BruNews, MVP VC++