forked from UTPB-COSC/UTPB-COSC-3310-Project2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfib2.asm
More file actions
110 lines (98 loc) · 1.61 KB
/
Copy pathfib2.asm
File metadata and controls
110 lines (98 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
; This file contains a version of the fibonacci code which uses function calls to handle printing characters, and is formatted to work within the JASM interpreter (no QWORD)
section .data
newline db 0x0a, 0x00
nl_len equ $ - newline
nums db '0123456789'
num0 dq 1
num1 dq 1
num2 dq 1
count dq 2
iter dq 10
section .text
global _start
_start:
init:
mov rax, 1
push rax
push rax
call fn_print_number
call fn_print_number
loop_head:
mov r10, [iter]
cmp [count], r10
jge loop_exit
loop_body:
mov r10, [num0]
mov [num2], r10
mov r10, [num1]
add [num0], r10
mov r10, [num2]
mov [num1], r10
push [num0]
call fn_print_number
loop_tail:
add [count], 1
jmp loop_head
loop_exit:
mov rax, 1
int 0x80
fn_print_digit:
pop rax
pop rdx
push rax
mov rcx, nums
add rcx, rdx
mov rdx, 1
mov rbx, 1
mov rax, 4
int 0x80
ret
fn_print_number:
pop rax
pop rdx
push rax
cmp rdx, 10
push rdx
jge decomp
call fn_print_digit
mov rdx, nl_len
mov rcx, newline
mov rbx, 1
mov rax, 4
int 0x80
ret
decomp:
decomp_loop_init:
mov r13, 0
pop r11
decomp_loop_head:
cmp r11, 0
je decomp_loop_exit
decomp_loop_body:
mov rdx, 0
mov rcx, 0
mov rbx, 10
mov rax, r11
div rbx
mov r11, rax
push rdx
decomp_loop_tail:
add r13, 1
jmp decomp_loop_head
decomp_loop_exit:
decomp_print_loop_init:
decomp_print_loop_head:
cmp r13, 0
je decomp_print_loop_exit
decomp_print_loop_body:
call fn_print_digit
decomp_print_loop_tail:
sub r13, 1
jmp decomp_print_loop_head
decomp_print_loop_exit:
mov rdx, nl_len
mov rcx, newline
mov rbx, 1
mov rax, 4
int 0x80
ret