2011-07-12 2 views
0

c'est en 16 bits, mode réel, NASM. J'ai des problèmes pour modifier cette variable dans la fonction où cursorRow est un paramètre. Une question que j'ai posté est pertinente: Updating variable that lives in the data segment from the stack and its segmentquelles sont les différences entre ces poussées nasm pile?

+0

Je pense que les deux vont pousser la valeur * de cursorRow en fonction de votre assembleur (vous pouvez toujours démonter le fichier pour être sûr). 'mov ax, offset cursorRow; push ax' devrait pousser l'adresse au moins. 'lds si, [curseurRow]; pousser ds; push si' devrait pousser un pointeur éloigné, mais ça fait longtemps que j'ai fait des programmes 16 bits multi-segments. – user786653

+0

J'utilise NASM et il n'a pas le mot-clé offset autant que je sache. la nuit dernière, j'ai eu mon programme à travailler en poussant l'adresse de cursorRow avec l'instruction suivante: 'push cursorRow' – TheFuzz

+0

Avez-vous lu nasmdoc? Je me souviens qu'il y avait une section décrivant spécifiquement cette partie comme étant différente des autres assembleurs tels que MASM et TASM. –

Répondre

1

cursorRow est la valeur et [cursorRow] est la valeur à l'emplacement cursorRow. Si vous devez placer l'adresse de cursorRow sur la pile, vous devez appuyer sur bp + 1 ou sur l'adresse réelle de la variable

1

Si cursorRow (pas [cursorRow]) est initialisé dans la section de données, il est comme un pointeur C. L'utilisation de [cursorRow] le déréférencerait et renverrait la valeur stockée là et vous devrez préfixer [cursorRow] avec la taille de la valeur comme mov al, byte [cursorRow].

Questions connexes