Erreur QWORD PTR ASM : Exemple NASM

L'assembleur est un utilitaire qui traduit chaque instruction du programme source en une instruction machine. L'opération d'assemblage traduit chaque instruction du programme source en une instruction machine. On ne peut passer du code source vers le code objet que si le programme source ne présente aucune erreur.

Introduction à l'assembleur et NASM

Qu'est-ce que l'assembleur ?

L'assembleur est un utilitaire qui traduit chaque instruction du programme source en une instruction machine. Lorsque l'on doit lire ou écrire un programme en langage machine, il est difficile d'utiliser la notation hexadécimale. On écrit les programmes à l'aide des instructions en mnémonique comme MOV, ADD, etc.

NASM : Un assembleur populaire

Il existe un certain nombre d'assembleurs sur le marché tels que le très populaire MASM de Microsoft, NASM (issu d'une équipe dirigée à l'origine par Simon Tatham et Julian Hall), TASM de Borland et enfin, A386 de Eric Isaacson. De mon point de vue, aucun de ces assembleurs ne peut être considéré comme parfait dans le cadre de la programmation Windows. Certains ont même des défauts gênants.

NASM est un excellent assembleur open source.

Syntaxe et directives en assembleur

Directives

Pour programmer en assembleur, on doit utiliser, en plus des instructions assembleur, des directives ou pseudo-instructions : Une directive est une information que le programmeur fournit au compilateur. Elle n'est pas transformée en une instruction en langage machine. Elle n'ajoute donc aucun octet au programme compilé.

Déclaration de variables

Ces directives sont utilisées pour déclarer les variables : L'assembleur attribue à chaque variable une adresse. Dans le programme, on repère les variables grâce à leurs noms. Les noms des variables sont composés d'une suite de 31 caractères au maximum, commençant obligatoirement par une lettre.

Segments de code et de données

Les instructions sont placées dans un autre segment, le segment de code. Sert à déclarer le segment code. La première instruction du programme (dans le segment d'instruction) doit toujours être repérée par une étiquette (dans notre cas : PROG). Comme nous l'avons vu, les directives SEGMENT et ENDS permettent de définir les segments de codes et de données.

Netwide Assembler

Erreurs courantes et débogage

Erreur QWORD PTR

Ben, ton assembleur semble buter sur toutes les variables définies par "resd". c'est bien des doubles, les variables windows ?

Conseils de débogage

Lors de l'écriture initiale de GoAsm, j'ai réfléchi à la possibilité de construire une syntaxe entièrement compatible avec celle d'autres assembleurs, mais j'ai dû rapidement y renoncer en raison d'écarts trop importants susceptibles de se traduire par d'importantes incohérences. Vous reconnaîtrez la syntaxe d'autres assembleurs. Lorsque cela était possible, j'ai essayé de rester proche de ce que je considère être la meilleure syntaxe de l'assembleur d'usage général. Vous reconnaîtrez également certaines syntaxes empruntées à la programmation en C.

Utilisation des éditeurs de texte

La saisie se fait par des logiciels qui s'appellent éditeurs de texte, donc on peut utiliser n'importe quel éditeur de textes (tel que EDLINE sous MSDOS de Microsoft) sauf les éditeurs sous Windows car ces éditeurs ajoutent dans le fichier des informations (la taille des caractères, la police utilisée, la couleur etc...) que l'assembleur ne peut pas comprendre .Pour utiliser les éditeurs sous Windows il est conseiller d'enregistrer les fichiers sous forme RTF.

Liens et ressources

permet de lier plusieurs codes objets en un seul exécutable.

Je linke avec alink, tres puissant, mais "abandonware" et non-documenté...

Le fichier .OBJ n'est pas directement exécutable. En effet, il arrive fréquemment que l'on construise un programme exécutable à partir de plusieurs fichiers sources. Il faut (relier) les fichiers objets à l'aide d'un utilitaire nommé éditeur de lien (même si l'on a qu'un seul). Le fichier .EXE est directement exécutable.

Tableau récapitulatif des outils

Outil Description
NASM Assembleur open source
ALINK Éditeur de liens puissant
GCC Compilateur portable et performant
Bochs Émulateur d'architecture i386

En conclusion, la programmation en assembleur, bien que complexe, offre un contrôle précis sur le matériel. Comprendre les erreurs comme QWORD PTR et savoir utiliser les outils appropriés sont essentiels pour réussir dans ce domaine.

tags: #qword #ptr #asm #error #nasm #exemple

Articles populaires: