Say I have this assembly code below. So like how does the call printf knows what to print? Does it just print out whatever is at the address that is pushed just above it all the time? In this case "push msg"?
SECTION .data
msg: db "Hello World!",10,0
SECTION .text
extern printf
global main
main:
     push ebp
     move ebp, esp
     push msg
     call printf
     move esp, ebp
     pop ebp
     ret