2009-12-07 5 views
1

J'ai essayé les formes suivantes et masm n'aime pas l'un d'eux:masm mode d'adressage indirect pour la commande MOV

mov byte [myVariable], al 
mov byte ptr [myVariable], al 
mov [byte myVariable], al 

Qu'est-ce que je manque? Pourquoi ne puis-je pas utiliser l'adressage indirect?

l'erreur que je reçois de masm est « opérateur manquant dans l'expression » sur certaines lignes, certains d'entre eux disent « champ structure attendue »

Répondre

0
mov [myVariable], al 

devrait être suffisant, ou même simplement:

mov myVariable, al 

Mais là encore octet mov ptr [myVariable], al devrait aussi travail, ce qui me fait me demander "ce qui est« myVariable"?

+0

il est une adresse qui est déclarée au sommet, comme myVariable EQU 0404h. alors certains des appels utilisent des registres avec des décalages tels que pb + 10 –

+0

l'adressage indirect isnt de travail et soit: et [pb + 22 h], les résultats de 77h dans « opérandes d'instruction non valide » –

+0

Changé à mov ds: [mavariable], al et obtenu: "opérandes d'instruction non valide" –

1
myVariable equ 0404h 

ne déclare pas une variable, il déclare une constante. L'assembleur remplace simplement toutes les constantes avec leurs valeurs dans le fichier objet. Par conséquent,

mov [myVariable], al 

devient

mov [0404h], al 

qui est invalide.

Vous devez attribuer la valeur à un registre, comme suit:

mov di,0404h 
mov byte ptr [di],al 
+0

Vous pouvez utiliser juste une valeur de base immédiate. Vous pouvez le faire en tant que '' mov [ds: myVariable], al' (spécifiez le segment relatif à la base) –