
form:
	.string	"%d\n"

.globl main
main:
        pushl %ebp	# Saving base pointer
        movl %esp,%ebp	# Making stack pointer new base pointer

	pushl %ebx	# %ebx is "callee save"
	pushl %esi	# %esi is "callee save"
	pushl %edi	# %edi is "callee save"

	movl $42,%ebx	# ebx := 42
	addl $45,%ebx	# ebx :	= 45 + ebx

			# %eax is return value; should not be in use
	pushl %ecx	# %ecx is "caller save"
	pushl %edx	# %edx is "caller save"
	
	pushl %ebx	# pushing 2. argument
	pushl $form	# pushing 1. argument
	call printf	# calling function printf
	addl $8,%esp	# popping both arguments

	popl %edx	# Restoring "caller save" register
	popl %ecx	# Restoring "caller save" register

	popl %edi	# Restoring "callee save" register
	popl %esi	# Restoring "callee save" register
	popl %ebx	# Restoring "callee save" register

        movl %ebp,%esp	# Restoring stack pointer
        popl %ebp	# Restoring base pointer
        ret		# Return from call
