Correction d'un code assembleur

Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
- - Dernière réponse : cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
- 16 oct. 2010 à 22:45
Bonjour,
j'ai ce code assembleur qui permet la creation d'un tableau de 10 cases et les remplir avec le chiffre 5.en l'utlisant avec tasm,il s'avère qu'il présente des erreurs .si vous pouvez les corriger et comment je peux modifier ce code pour demander à l'utlisateur de donner des valeurs pour remplir le tableau...Merci d'avance
voici le code
.MODEL SMALL
.STACK
.DATA

TABLEAU DB 10 DUP (?)
.CODE

MOV AX,0
BOUCLE:
MOV TABLEAU[AX],5
INC AX
CMP AX,9
JNE BOUCLE
MOV AX,0
BOUCLE2:
MOV DX,TABLEAU[AX]
INC AX
CMP AX,9
JNE BOUCLE2
MOV AX,4C00H
INT 21H
END


les erreurs affichées par TASM:
<13>illegal indexing mode
<21>operand types do not match
Afficher la suite 

12 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Non testé, mais devrait fonctionner :
.MODEL SMALL
.STACK
.DATA

TABLEAU DB 10 DUP (?)
.CODE

XOR AX,AX
BOUCLE:
MOV BYTE PTR [TABLEAU+AX], 5
INC AX
CMP AX,9
JNE BOUCLE
XOR AX, AX
BOUCLE2:
MOV DX, WORD PTR [TABLEAU+AX]
INC AX
CMP AX, 9
JNE BOUCLE2
MOV AX,4C00H
INT 21H
END 


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
0
Merci
merci de votre reponse mais en compilant tasm affiche de nouvelles erreures :
<10>illegal indexing mode
<16>illegal indexing mode
Commenter la réponse de marooh
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Mode d'adressage pourri, j'y avais même pas pensé. Voilà la liste des modes d'adressage sans l'octet SIB dans la doc Intel (colonne de gauche) :


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
0
Merci
j'ai pas bien compris ce que ce document représente,l'origine de l'erreur comment je peux la corriger?
Commenter la réponse de marooh
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
salut,


oui parce qu'il t'indique les instructions assembleur qui permettent un acces à la mémoire et les registres utilisés. [AX+?] n'existe pas.

@++
Commenter la réponse de cs_patatalo
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
0
Merci
donc je doit tout remplacer par bx??
Commenter la réponse de marooh
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci
Gare aux 8086,..286 8 16 bits.
Il distingue les registres généraux,d'adresse et d'indexage.
si di pointeurs d'adresses
bx index
mov [di+bx],..
c'est pour ça que l'assembleur actuel est si utilisable.
OUI bx est le registre d'index.
Après il faut encore se préoccuper des segments,de la pile,de la ...SOS
Commenter la réponse de ToutEnMasm
Messages postés
122
Date d'inscription
vendredi 8 octobre 2010
Statut
Membre
Dernière intervention
16 novembre 2011
0
Merci
Après il faut encore se préoccuper des segments,de la pile,de la ...SOS
Commenter la réponse de marooh
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci
je n'ai que 53 ans et le 8086 commence à devenir un vieux souvenir.
Il me semble que DS doit être positionner sur le registre des data.
L'adresse complète en 8086 est:
Segment + pointeur + index

Un segment en 8086 a une valeur.
cette valeur représente (Valeur * 16) bytes
Commenter la réponse de ToutEnMasm
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci
correction;
.MODEL SMALL
.STACK
.DATA

TABLEAU DB 10 DUP (?)
.CODE
mov bx,0
MOV AX,0
BOUCLE:
MOV BYTE PTR [DS:TABLEAU+BX], 5
INC BX
CMP AX,9
JNE BOUCLE
MOV AX,0
BOUCLE2:
MOV DL,BYTE PTR [DS:TABLEAU+BX] ;Dl et non pas DX=word
;si vous préférez word TABLEAU word 10 DUP (?)
INC BX
CMP AX,9
JNE BOUCLE2
MOV AX,4C00H
INT 21H
END
Commenter la réponse de ToutEnMasm
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
11
0
Merci
Il me semble que DS doit être positionné sur le registre des data.
C'est un segment qui compose l'adresse physique. Comme tu le dis plus loin dans ton post, on fait Segment*16+Offset pour calculer cette dernière.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Commenter la réponse de cs_ghuysmans99
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
les segments utilisés sont par défaut:
ds avec bx,si et di.
ds:si, es:di lors d'instructions movsX,scasX,...
ss avec sp et bp.

dans le modèle flat, cs=ds=es=ss.

@++
Commenter la réponse de cs_patatalo