;  hello.asm  premier programme en assembleur
;
; assemble :	nasm -f elf   hello.asm
; assemble avec listing :	nasm -f elf  -l hello.lst hello.asm
; link:		ld -e debut hello.o -o hello
; run:	        ./hello 
; sortie:	Hello World 

	SECTION .data		; section pour les données
	
msg:	db "Hello World",10	; la chaîne de caractères à afficher
				; 10=code ascii retour à la ligne	
	
	SECTION .text		; section pour le code

	global debut		; rend le label visible de l'extérieur

debut:
	mov     ebx,0
        mov     eax,msg
	add     eax,6
	mov     bl,[eax]
        sub     bl,0xa
	mov     [eax],bl
	add     eax,2
	mov     bl,[eax]
        sub     bl,4
        mov     [eax],bl
	add     eax,2
	mov     bl,[eax]
	sub     eax,1
	mov     [eax],bl
        add     bl,1
	add     eax,1
        mov     [eax],bl	
	
	mov	edx,0xc         ; arg3, nombre de caractères à afficher
				; de manière equivalente  mov edx,12
	mov	ecx,msg		; arg2, adresse du premier charactere a afficher
	mov	ebx,1		; arg1, num de la sortie pour l'affichage
				; 1 = sortie standard
	mov	eax,4		; num. de la commande write
				; pour l'interruption 80h
	int	0x80		; interruption 80 hex, appel au noyau
	
	mov	ebx,0		; code de sortie, 0=normal
	mov	eax,1		; num. de la commande exit
	int	0x80		; interruption 80 hex, appel au noyau