QCM Pile et appels de fonctions/Corrige affiche : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
m (apple plus supporté)
m
 
Ligne 37 : Ligne 37 :
 
fin_while:
 
fin_while:
 
// Restauration de registres non-scratch.
 
// Restauration de registres non-scratch.
movl -4(%ebp), %ebx
+
popl %ebx
 
leave
 
leave
 
ret
 
ret

Version actuelle en date du 26 juin 2013 à 12:30

	.globl main

main:
	pushl %ebp
	movl %esp, %ebp
	// Sauvegarde du registre non-scratch par
	// l'appelé
	pushl %ebx
	// On fait de la place pour :
	// 2 arguments du printf
	// 1 sauvegarde de registres
	subl $(8+4), %esp

	movl $chaine, %ecx
	
	// On n'utilise que %bl, mais on remplit
	// le reste de %ebx avec des 0.
	movl $0, %ebx
while:
	cmpb $0, (%ecx)
	je fin_while
	movb (%ecx), %bl
	// On empile les arguments de printf
	// Sauvegarde de %ecx
	pushl %ecx
	pushl %ebx
	pushl $fmt
	call printf
        // Dépilage des arguments
        addl $8, %esp
	// Restauration de %ecx
	popl %ecx
	incl %ecx // équivalent à addl $1, %ecx
	jmp while

fin_while:
	// Restauration de registres non-scratch.
	popl %ebx
	leave
	ret
.data
chaine: .asciz "Hello\n"
fmt:	.asciz "%c"