J'ai décidé d'apprendre l'assembleur pour le plaisir. J'ai codé en C pendant de nombreuses années.
J'ai suivi quelques tutoriels en ligne qui imprimaient "Hello world" et j'ai creusé un peu dans le manuel NASM. Tout est bien qui finit bien. Je me suis donc fixé comme tâche d'imprimer "hello world" dans une boucle. Je sais que je peux le faire avec la fonction loop
mais je voulais le coder explicitement et utiliser les variables définies dans l'opcode .bss
section.
Cependant, je n'ai manifestement pas compris comment fonctionne l'affectation de variables en assembleur, car je reçois le message d'erreur suivant :
nasm -felf -o hello.o hello.asm
hello.asm:16: error: invalid combination of opcode and operands
hello.asm:17: error: invalid combination of opcode and operands
hello.asm:28: error: invalid combination of opcode and operands
J'ai essayé de chercher sur le web des informations sur l'affectation variable, y compris dans le manuel NASM, mais je n'arrive pas à trouver les informations dont j'ai besoin. Quelqu'un peut-il m'aider ? Voici mon code (simple !):
; print "Hello world!" to the screen multiple times
section .data
msg: db 'Hello world!', 10
msglen: equ $ - msg
section .bss
iter: resb 1
section .text
global _start
_start:
; loop 10 times
mov iter, 0 ; initalise loop counter
FL: cmp iter, 10 ; is iter == 10?
jge LoopEnd
; write the message to STDOUT:
mov eax,4 ; code for write syscall
mov ebx,1 ; stdout fd
mov ecx,msg ; message to print...
mov edx,msglen ; ...and it's length
int 80h ; kernel interrupt
; increment loop iterator
inc iter
jp FL
LoopEnd:
; now exit, with return code 0:
mov eax,1
mov ebx,0
int 80h