petite question facile en asm

petite question facile en asm - Programmation

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 ???  :fou:  
Quelqu un peu t il m expliquer ??????   :??:


---------------
Ben
Reply

Marsh Posté le 13-03-2002 à 15:46:13   

Reply

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 ... :D
// sinon,
 
add si, bx
mov bx, [si]

 

[jfdsdjhfuetppo]--Message édité par youdontcare--[/jfdsdjhfuetppo]

Reply

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. :gun:  :gun:  :eek2:  :eek2:  :cry:  :cry:


---------------
Ke jsuis movais en programmation
Reply

Marsh Posté le 13-03-2002 à 17:14:26    

le code que j'ai mis après 'solution' marche et n'utilise pas lea.

Reply

Marsh Posté le 13-03-2002 à 19:00:32    

ok merci !!! :)  :)

Reply

Marsh Posté le 14-03-2002 à 14:21:26    

bheuuu ca va paaaaaaas

Reply

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]
 
?

Reply

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)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed