.extern _printf, __strlen
.global _print, _a, _b, _add, _str, _str1, _print_str_len
_a: .int 200
_b: .int 300
_str: .string "Hello, World!\n"
_str1: .string "\n%d\n"
_print: #void print(const char* s);
pushl %ebp
movl %esp, %ebp
pushl 8(%esp)
call _printf
addl $4, %esp
popl %ebp
ret
_add: #int add(int a, int b);
pushl %ebp
movl %esp, %ebp
movl 12(%esp), %eax
addl 8(%esp), %eax
popl %ebp
ret
_print_str_len: # void print_str_len(const char* s);
pushl %ebp
movl %esp, %ebp
pushl 8(%esp)
call __strlen
addl $4, %esp
pushl %eax
pushl $_str1
call _printf
addl $8, %esp
popl %ebp
ret
#include <stdio.h>
int _strlen(const char* s) {
int len = 0;
while(*s++) {
len++;
}
return len;
}
extern int a;
extern int b;
extern char str;
extern char str1;
int add(int a, int b);
void print(const char* s);
void print_str_len(const char* s);
int main(void) {
print(&str);
printf(&str1, add(a, b));
print_str_len(&str);
}