# Example: linking C and assembler code (gcc+as) # Written by Petr Grygarek, Dep. of Computer Science, www.cs.vsb.cz/grygarek # Note: 'as' treats all undefined symbols as external .data asmText: .string "This is a text from the assember module" # instructs ld to compose all instances of aVar (used in different # modules) to one memory location (of size 4) .comm aVar,4 # make aVar visible to ld .global aVar .text # make aFn and aCall_cFn visible to ld .global aFn .global aCall_cFn # int aFn(int x, int y) aFn: pushl %ebp movl %esp,%ebp movl 8(%ebp),%eax # param a addl 12(%ebp),%eax # add param b addl cVar,%eax # function result remains in eax popl %ebp ret # int aCall_cFn(int aVarInitValue); aCall_cFn: pushl %ebp movl %esp,%ebp mov 8(%ebp),%eax # get initial value for aVar mov %eax,aVar # call cFn() pushl $asmText # c pushl $20 # b pushl $30 # a call cFn addl $12,%esp # return value remains in %eax popl %ebp ret