segment .text global main extern printf ; void print_max ( long a, long b ) ; { a equ local1 b equ local2 print_max: push rbp; ; normal stack frame mov rbp, rsp frame 2, 3, 4 sub rsp, frame_size ; leave space for a, b and max ; int max; max equ local3 mov [rbp+a], rdi ; save a mov [rbp+b], rsi ; save b ; max = a; mov [rbp+max], rdi ; if ( b > max ) max = b; cmp rsi, rdi jng skip mov [rbp+max], rsi skip: ; printf ( "max(%ld,%ld) = %ld\n", ; a, b, max ); segment .data fmt db 'max(%ld,%ld) = %ld',0xa,0 segment .text lea rdi, [fmt] mov rsi, [rbp+a] mov rdx, [rbp+b] mov rcx, [rbp+max] xor eax, eax call printf ; } leave ret main: push rbp mov rbp, rsp ; print_max ( 100, 200 ); mov rdi, 100 ; first parameter mov rsi, 200 ; second parameter call print_max xor eax, eax ; to return 0 leave ret