This commit is contained in:
2026-06-24 17:24:04 +02:00
commit 00c38a12d9
41 changed files with 7289 additions and 0 deletions
+55
View File
@@ -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"