petite question facile en asm - Programmation
Marsh Posté le 13-03-2002 à 15:58:09
yep, il multiplie la valeur du pointeur, qui doit pointer vers qq chose comme [ds:ax*2].
il y a un truc magique avec lea, comme lea bx, [V+ax*2] ... mais ça doit marcher qu'en 32b.
solution :
mov si, offset V
mov ax, 1
shl ax, 1 // ton ax*2
mov bx, [si+bx]
// je sais même plus si ça marche si + bx ...
// sinon,
add si, bx
mov bx, [si]
[jfdsdjhfuetppo]--Message édité par youdontcare--[/jfdsdjhfuetppo]
Marsh Posté le 13-03-2002 à 16:53:49
vi mais je problème c k'on travaille sur 16 bits et ke le " lea " on connais po du tout.
Marsh Posté le 13-03-2002 à 17:14:26
le code que j'ai mis après 'solution' marche et n'utilise pas lea.
Marsh Posté le 14-03-2002 à 15:11:03
et spécifiquement ?
mov si, offset V
mov bx, ds:[si]
ça renvoie quoi ?
mov si, offset V
add si, 2 // 2 ème entrée
mov bx, ds:[si]
?
Marsh Posté le 14-03-2002 à 15:52:40
pour les .asm tu mets un:
.MODEL 386
et tu accès à des modes d'addressages évolués.
sinon la synthaxe standard serait plustôt:
mov ax,1
mov bx,WORD PTR[offset V+ax*2]
ou:
mov si,offset V
mov ax,1
mov bx,WORD PTR[si+ax*2]
mais tu fais de l'assembleur en ligne dans ton CPP ?
ou dans un fichier asm séparé ? (dans un cpp aparemment)
Marsh Posté le 13-03-2002 à 15:46:13
en cpp j initialize un vecteur V[8] composé de int
Ma ces 1 en ini a 3, ...
Ensuite qd je passe en asm, si je fait:
mov bx, V[1*2]
mov temp,bx
il n'y a aucun problème ! il me met dans temp la case 1 de V et de meme si je remplace le 1 par 2, 3 ,...
MAIS si je fait:
mov ax, 1
mov bx, V[ax*2]
mov temp,bx
il me met dans temp la valeur 2786 ???
Quelqu un peu t il m expliquer ??????
---------------
Ben