2016-12-12 2 views
0

J'ai un ancien code d'assemblage en 16 bits et je veux le "traduire" en un nouveau code 32 bits pour MSNA.Assemblage: Définir un mot en 32 bits (Intel + NASM)

Dans l'ancien code 16 bits les mots sont définis comme:

dseg   segment para public 'data' 
i word ? 
j word ? 

Maintenant, je voudrais définir dans le nouveau code 32 bits "i" & "j".

SECTION .data 

Voilà comment je suis la définition .data section et je belive c'est la bonne voie, mais je voudrais un peu d'aide avec le mot chose.

Répondre

0
SECTION .data 
i dw 1 
j dw 2 

Je crois avoir trouvé la bonne solution pour cela.

"j" en tant que nom de variable, "dw" pour la taille de 2 octets, et "1" pour la valeur .

+1

'1' est la valeur du mot défini. L'emplacement lui est assigné par l'assembleur + l'éditeur de liens + le chargeur de système d'exploitation. 'j' est une étiquette pointant sur le premier octet de la valeur du mot' 2'. Je ne sais pas ce que «variable» devrait signifier, n'a pas beaucoup de sens dans le nasme. Continuez également à utiliser les deux-points même pour ces étiquettes avant les données, comme 'j: dw 2'. Cela vous évitera de frapper des bogues d'analyse ambivalents, comme faire par erreur 'loop db 1' (' loop' est une instruction x86, confusion nasm. 'Loop: db 1' sera compilé correctement comme label) – Ped7g

+0

@ Ped7g Merci pour l'information, je vais éditer la réponse. Sera sûr d'utiliser ces conseils dans le code. –

+0

L'utilisation de 'i' et de' j' pour les noms de variables statiques dans assembly est tout aussi mauvais style que d'utiliser global 'int i' dans un programme C. En outre, en fonction de la façon dont vous transférez ce code à partir de 16 bits, vous pouvez définir des valeurs DWORD 32 bits (avec 'dd') afin de pouvoir y stocker un registre 32 bits. Si vous savez que vos valeurs vont toujours dans 16 bits, vous pouvez utiliser des magasins 16 bits et des charges d'extension zéro ou de signe comme 'movzx eax, [i]' –