-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pythagore.asm
122 lines (98 loc) · 1.93 KB
/
Pythagore.asm
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
111
112
113
114
115
116
117
118
119
120
121
122
bits 64
%include "atoi.asm"
%include "itoa.asm"
section .bss
firstValue resb 16
secondValue resb 16
result resb 16
section .data
txt1 db "Length of the first side : "
txt1_l equ $-txt1
txt2 db "Length of the second side : "
txt2_l equ $-txt2
res db "Length of the hypotenuse : "
res_l equ $-res
aa db 0xa
section .text
extern le_sqrt
global _start
_start:
mov rax, 0x1
mov rdi, 0x1
mov rsi, txt1
mov rdx, txt1_l
syscall ; Ask for a length
mov rax, 0x0
mov rdi, 0x0
mov rsi, firstValue
mov rdx, 16
syscall ; input a
mov rax, 0x1
mov rdi, 0x1
mov rsi, txt2
mov rdx, txt2_l
syscall ; Ask for b length
mov rax, 0x0
mov rdi, 0x0
mov rsi, secondValue
mov rdx, 16
syscall ; input b
mov r10, firstValue
call _atoi
mov rax,r11
mov rbx,r11
mul rax
mov r12,rax
mov r10, secondValue
call _atoi
mov rax,r11
mov rbx,r11
mul rax
add r12,rax ;r12 contains a²+b²
mov rdi,r12
call le_sqrt
mov r12, rax
call _lenght_int
mov r11, r14
push r14
mov r14, rax
mov r15, result
call _itoa
mov rax, 0x1
mov rdi, 0x1
mov rsi, res
mov rdx, res_l
syscall
mov rax, 0x1
mov rdi, 0x1
pop rdx
mov rsi, r15
syscall
mov rax, 0x1
mov rdi, 0x1
mov rdx, 0x1
mov rsi, aa
syscall
_exit:
mov rax,0x3c
mov rsi,0x0
syscall
_lenght_int:
mov r14,0
push rax ; divisor
push rbx ; dividend
push r12 ; Result c (a²+b²=c²)
_lenght_int_loop:
mov rax,r12
mov rbx,10
cqo
idiv rbx
mov r12,rax
inc r14
cmp r12, 0xa
jge _lenght_int_loop
inc r14
pop r12
pop rbx
pop rax
ret