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