 <p>Here are some fixes to apply to your program:</p> <pre><code>.text string: .asciz "Your first program\n" number1in: .asciz "%u" #use different format strings for input and output number2in: .asciz "%d" number1out: .asciz "%u\n" #added "\n" to flush stdout. number2out: .asciz "%d\n" #same .global main main: movq $0, %rax movq $string, %rdi push %rbp #dummy push to satisfy 16-byte alignment requirements call printf call adding call end adding: pushq %rbp #must preserve %rbp before... movq %rsp, %rbp #...%rbp is overwritten here subq $16, %rsp #must subtract 16 from %rsp to satisfy 16-byte alignment leaq -8(%rbp), %rsi movq $number1in, %rdi movq $0, %rax call scanf movq -8(%rbp), %rsi #this line must be edited... movq $number1out, %rdi movq $0, %rax call printf movq $0, %rdi leaq -8(%rbp), %rsi movq $number2in, %rdi movq $0, %rax call scanf movq -8(%rbp), %rsi #as must this... movq $number2out, %rdi movq $0, %rax call printf movq %rbp, %rsp popq %rbp ret end: pushq %rbp #dummy push to satisfy 16-byte alignment movq $0, %rdi call exit </code></pre>