Last active
February 21, 2024 15:19
-
-
Save CodeByAidan/7fb4f3d6f8952e322ba33c102ef87e16 to your computer and use it in GitHub Desktop.
fibonacci sequence in 64-bit Linux (Debian distro) assembly, fixed compile errors (integrates with a C library)!! (Works with Debian WSL on Windows!)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; ----------------------------------------------------------------------------- | |
; A 64-bit Linux application that writes the first 90 Fibonacci numbers. To | |
; assemble and run: | |
; | |
; nasm -f elf64 _fib.asm && gcc _fib.o -no-pie -o a.out && ./a.out | |
; ----------------------------------------------------------------------------- | |
global main | |
extern printf | |
section .note.GNU-stack noalloc noexec nowrite progbits | |
section .text | |
main: | |
push rbx ; we have to save this since we use it | |
mov ecx, 90 ; ecx will countdown to 0 | |
xor rax, rax ; rax will hold the current number | |
xor rbx, rbx ; rbx will hold the next number | |
inc rbx ; rbx is originally 1 | |
print: | |
; We need to call printf, but we are using rax, rbx, and rcx. printf | |
; may destroy rax and rcx so we will save these before the call and | |
; restore them afterwards. | |
push rax ; caller-save register | |
push rcx ; caller-save register | |
mov rdi, format ; set 1st parameter (format) | |
mov rsi, rax ; set 2nd parameter (current_number) | |
xor rax, rax ; because printf is varargs | |
; Stack is already aligned because we pushed three 8 byte registers | |
call printf ; printf(format, current_number) | |
pop rcx ; restore caller-save register | |
pop rax ; restore caller-save register | |
mov rdx, rax ; save the current number | |
mov rax, rbx ; next number is now current | |
add rbx, rdx ; get the new next number | |
dec ecx ; count down | |
jnz print ; if not done counting, do some more | |
pop rbx ; restore rbx before returning | |
ret | |
format: | |
db "%20ld", 10, 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
nasm -f elf64 _fib.asm && gcc _fib.o -no-pie -o a.out && ./a.out |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
aidan@aidan:~/asm$ nasm -f elf64 fib.asm | |
aidan@aidan:~/asm$ gcc fib.o -no-pie -o a.out | |
aidan@aidan:~/asm$ ./a.out | |
0 | |
1 | |
1 | |
2 | |
3 | |
5 | |
8 | |
13 | |
21 | |
34 | |
55 | |
89 | |
144 | |
233 | |
377 | |
610 | |
987 | |
1597 | |
2584 | |
4181 | |
6765 | |
10946 | |
17711 | |
28657 | |
46368 | |
75025 | |
121393 | |
196418 | |
317811 | |
514229 | |
832040 | |
1346269 | |
2178309 | |
3524578 | |
5702887 | |
9227465 | |
14930352 | |
24157817 | |
39088169 | |
63245986 | |
102334155 | |
165580141 | |
267914296 | |
433494437 | |
701408733 | |
1134903170 | |
1836311903 | |
2971215073 | |
4807526976 | |
7778742049 | |
12586269025 | |
20365011074 | |
32951280099 | |
53316291173 | |
86267571272 | |
139583862445 | |
225851433717 | |
365435296162 | |
591286729879 | |
956722026041 | |
1548008755920 | |
2504730781961 | |
4052739537881 | |
6557470319842 | |
10610209857723 | |
17167680177565 | |
27777890035288 | |
44945570212853 | |
72723460248141 | |
117669030460994 | |
190392490709135 | |
308061521170129 | |
498454011879264 | |
806515533049393 | |
1304969544928657 | |
2111485077978050 | |
3416454622906707 | |
5527939700884757 | |
8944394323791464 | |
14472334024676221 | |
23416728348467685 | |
37889062373143906 | |
61305790721611591 | |
99194853094755497 | |
160500643816367088 | |
259695496911122585 | |
420196140727489673 | |
679891637638612258 | |
1100087778366101931 | |
1779979416004714189 | |
aidan@aidan:~/asm$ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Fixed errors:
(painful)