addr_size = 4 int32_size = 4 .data message: .asciz "Hello, World!\n" .text .global _start _start: pushl $message call sub1 addl $4,%esp movl $0,%ebx movl $1,%eax int $0x80 sub1: oldBP = 0 retAddr = oldBP + 4 pMess = retAddr + addr_size pChar = oldBP - addr_size pushl %ebp movl %esp,%ebp # snapshot of SP as frame pointer addl $pChar,%esp # reserve for pChar movl pMess(%ebp),%eax movl %eax,pChar(%ebp) # pChar = pMess anotherChar: movl pChar(%ebp),%eax cmpb $0,(%eax) jz noMoreChar # need to print whatever eax points to movl %eax,%ecx movl $1,%edx movl $1,%ebx movl $4,%eax int $0x80 # write(1, pChar, 1) addl $1,pChar(%ebp) jmp anotherChar noMoreChar: subl $pChar, %esp # free the four bytes reserved for pChar popl %ebp ret