Bonjour,
Des excuses s'imposent. Je suis sincèrement désolé d'avoir mis autant de temps à remercier les personnes qui m'ont aidé. Il s'est écoulé presque un mois avant que je donne signe de vie. C'est donc avec humilité que je vous présente mes plus plates excuses. Je aussi suis venu donner la solution de mon problème afin que cela profite à ceux qui, comme moi, ont débuté en assembleur et qui souhaite exploiter la ligne de commande, plus particulièrement avec nasm.
Tout d'abord, un grand merci à BruNews, patatalo et dune2 pour votre accueil et vos réponses. Concrètement, vos réponses n'ont pas pu aider le débutant que je suis ^^. J'avais besoin d'un exemple de code. directement utilisable. Je n'ai, depuis mon premier message, fait que 2 à 3 heures d'asm, mais je commence maintenant à comprendre un peu mieux.
Maintenant, je remet le code ente les mains des débutant en espérant que ça leur servira.
Le code suivant affiche les arguments envoyés par la ligne de commande dans la console. Un argument par ligne. J'ai rappelé les instructions de compilation dans le code, pour un assemblage sous linux (donc le format d'exécutable ELF). Je recommande à ce propos de mettre des instruction dans un script (qu'on nommera par exemple 'assemble.sh') cela simplifie les choses.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; PARSE.ASM (nasm)
;
; définition:
; -----------
;
; Affiche les arguments envoyés par la ligne de commande
;
; instructions de compilation:
; ----------------------------
;
; nasm -f elf -o parse.o parse.asm
; ld -O0 -o parse parse.o
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
section .data
new_line_char:
db 0x0A
section .text
global _start
align 4
_start:
mov ebp,esp ; store esp in ebp
again:
add esp,4 ; esp ---> next parameter on stack
mov eax,[esp] ; move next parameter into eax
test eax,eax ; eax (parameter) == NULL pointer?
jz end_again ; get out of loop if yes
call putstring ; output parameter to stdout.
jmp again ; repeat loop
end_again:
xor eax,eax ; eax = 0
inc eax ; eax = 1, system call _exit ()
xor ebx,ebx ; ebx = 0, normal program exit.
int 0x80 ; execute _exit () system call
; prints string to stdout
putstring:
push ebp
mov ebp,esp
mov ecx,[ebp+8]
xor edx,edx
count_chars:
mov al,[ecx+edx]
test al,al
jz done_count_chars
inc edx
jmp count_chars
done_count_chars:
mov eax,4
xor ebx,ebx
inc ebx
int 0x80
mov eax,4
mov ecx,new_line_char
xor edx,edx
inc edx
int 0x80
mov esp,ebp
pop ebp
ret
Ce code n'est peut-être pas parfait. Cependant, c'est à mon humble avis une base suffisante, vous devriez pouvoir vous débrouiller avec.
Pour ceux qui veullent aller plus loin, vous serez comblez par 'The Art of Assembly', une référence en la matière, disponible en anglais à l'adresse :
http://courses.ece.uiuc.edu/ece390/books/artofasm/artofasm.html
Je crois que tous ce qu'on a besoin de savoir ce trouve là, à mettre dans les favoris ^^. Plus précisément, le chapitre 13.3.12 traite de la ligne de commande et des arguments :
http://courses.ece.uiuc.edu/ece390/books/artofasm/CH13/CH13-9.html
Sur ce, je renouvelles mes excuses pour mon manque de politesse et de rapidité, et souhaite à tous les développeurs assembleur une très bonne continuation.
Kevin68