---
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# Metadata for debuggers and other tools
|
||||
.global main
|
||||
.type main, @function
|
||||
.extern printf
|
||||
.extern scanf
|
||||
|
||||
.section .text # Begins code and data
|
||||
# Label that marks beginning of main function
|
||||
main:
|
||||
# Function stack setup
|
||||
pushq %rbp
|
||||
movq %rsp, %rbp
|
||||
subq $128, %rsp # Reserve 128 bytes of stack space
|
||||
|
||||
# Read an integer into -8(%rbp)
|
||||
movq $scan_format, %rdi # 1st param: "%ld"
|
||||
leaq -8(%rbp), %rsi # 2nd param: (%rbp - 8)
|
||||
callq scanf
|
||||
# If the input was invalid, jump to end
|
||||
cmpq $1, %rax
|
||||
jne .Lend
|
||||
|
||||
# Read another integer into -16(%rbp)
|
||||
movq $scan_format, %rdi
|
||||
leaq -16(%rbp), %rsi
|
||||
callq scanf
|
||||
# If the input was invalid, jump to end
|
||||
cmpq $1, %rax
|
||||
jne .Lend
|
||||
|
||||
|
||||
# Add the two integers together
|
||||
movq -8(%rbp), %rax # Load first integer into %rax
|
||||
addq -16(%rbp), %rax # Add second integer to %rax
|
||||
|
||||
# Call function 'printf("%ld\n", %rsi)'
|
||||
# to print the number in %rsi.
|
||||
movq $print_format, %rdi
|
||||
movq %rax, %rsi
|
||||
callq printf
|
||||
|
||||
# Labels starting with ".L" are local to this function,
|
||||
# i.e. another function than "main" could have its own ".Lend".
|
||||
.Lend:
|
||||
# Return from main with status code 0
|
||||
movq $0, %rax
|
||||
movq %rbp, %rsp
|
||||
popq %rbp
|
||||
ret
|
||||
|
||||
# String data that we pass to functions 'scanf' and 'printf'
|
||||
scan_format:
|
||||
.asciz "%ld"
|
||||
print_format:
|
||||
.asciz "%ld\n"
|
||||
Reference in New Issue
Block a user