2017-08-05 1 views
0

Je suis sur Debian 9. Ce sont les erreurs:nasm "erreur: virgule, deux-points, décorateur ou fin de ligne prévu après opérande"

[email protected]:~/Assembly/sandbox$ nasm -f elf -g -F stabs sandbox.asm 
sandbox.asm:8: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:9: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:11: error: comma, colon, decorator or end of line expected after operand 
sandbox.asm:12: error: comma, colon, decorator or end of line expected after operand 

Voici le code:

section .data 
section .text 

global _start 

_start: 
    nop 
    mov eax 10 
    mov ebx 12 

    mov eax 1 
    mov ebx 0 
    int 80H 
    nop 

section .bss 

Quel est le problème à l'origine de ces erreurs et comment puis-je le réparer?

Si j'utilise le code suivant où je fixe les virgules entre opérandes je reçois une autre erreur:

section .data 
section .text 

    global_start 

_start: 
    nop 
    mov eax,10 
    mov ebx,12 

    mov eax,1 
    mov ebx,0 
    int 80H 
    nop 

section .bss 

L'erreur que je reçois est:

sandbox.asm:4: warning: label alone on a line without a colon might be in error 

Pourquoi ai-je cette erreur et comment puis-je le réparer?

+0

Dans le code que vous avez décrit comme "correct", il y a 'global_start', qui semble incorrect. Comme je l'ai écrit dans ma réponse, il devrait plutôt être «global _start». Après cette correction, obtenez-vous le même ensemble d'erreurs en essayant de compiler le code? –

Répondre

2

Je suppose qu'il ya un espace manquant et il devrait être:

global _start 

en ligne 4.

Je soupçonne aussi que la constante hexadécimale peut être au format incorrect, en raison du préfixe 0 manquant, mais il devrait être ok tant que le nombre commence par un chiffre, comme Michael Petch mentionné dans les commentaires (et selon la documentation de NASM disponible ici: http://www.nasm.us/doc/nasmdoc3.html).

+0

Mon erreur, j'ai posté le nouveau code, l'ancien manquait de virgules après le mnemonics.sorry.global _start était en erreur aussi. – Andrea

+1

Il n'est pas nécessaire de mettre un zéro supplémentaire devant ce 'int 080h'. Int 80h est très bien. Il suffit de mettre le zéro initial au début si le premier chiffre n'est pas compris entre 0 et 9. Si le nombre avait été A0 hex, il aurait dû être 0A0h car le chiffre hexadécimal A n'est pas compris entre 0 et 9. –

+0

Oui, tu as raison, je vais corriger ça. –