@@ -4,14 +4,14 @@ section .text
4
4
; Принимает код возврата и завершает текущий процесс
5
5
6
6
exit:
7
- mov rax , 60 ; 'exit' syscall number
7
+ mov rax , 60 ; 'exit' syscall number
8
8
syscall
9
- ret
9
+ ret
10
10
11
11
; Принимает указатель на нуль-терминированную строку, возвращает её длину
12
12
13
13
string_length:
14
- xor rax , rax
14
+ xor rax , rax
15
15
.main_loop:
16
16
cmp byte [ rdi + rax ], 0
17
17
je .end
@@ -25,7 +25,7 @@ string_length:
25
25
print_string:
26
26
call string_length
27
27
mov rsi , rdi
28
- mov rdx , rax
28
+ mov rdx , rax
29
29
mov rax , 1 ; 'write' syscall number
30
30
mov rdi , 1 ; stdout descriptor
31
31
syscall
@@ -34,65 +34,65 @@ print_string:
34
34
; Принимает код символа и выводит его в stdout
35
35
36
36
print_char:
37
- xor rax , rax
37
+ xor rax , rax
38
38
push rdi
39
39
mov rsi , rsp
40
40
pop rax
41
41
mov rdx , 1
42
42
mov rax , 1 ; 'write' syscall number
43
43
mov rdi , 1 ; stdout descriptor
44
44
syscall
45
- ret
45
+ ret
46
46
47
47
; Переводит строку (выводит символ с кодом 0xA)
48
48
49
49
print_newline:
50
50
mov rdi , 0xA
51
51
call print_char
52
- ret
52
+ ret
53
53
54
54
; Выводит беззнаковое 8-байтовое число в десятичном формате
55
55
; Совет: выделите место в стеке и храните там результаты деления
56
56
; Не забудьте перевести цифры в их ASCII коды.
57
57
58
58
print_uint:
59
59
xor rcx , rcx
60
- xor rdx , rdx
60
+ xor rdx , rdx
61
61
mov rbx , 10 ; divider to get digits
62
- mov rax , rdi
62
+ mov rax , rdi
63
63
.stack_filling:
64
- xor rdx , rdx
65
- div rbx ; next digit
66
- add rdx , '0' ; offset to save ascii-code
67
- push rdx
68
- inc rcx
69
- test rax , rax ; loop while rax has content
70
- jnz .stack_filling
64
+ xor rdx , rdx
65
+ div rbx ; next digit
66
+ add rdx , '0' ; offset to save ascii-code
67
+ push rdx
68
+ inc rcx
69
+ test rax , rax ; loop while rax has content
70
+ jnz .stack_filling
71
71
.print_from_stack:
72
- pop rdx
73
- mov rdi , rdx
74
- push rcx ; save reg value before calling
75
- call print_char
76
- pop rcx
77
- dec rcx
78
- test rcx , rcx ; loop while rcx > 0
79
- jnz .print_from_stack
72
+ pop rdx
73
+ mov rdi , rdx
74
+ push rcx ; save reg value before calling
75
+ call print_char
76
+ pop rcx
77
+ dec rcx
78
+ test rcx , rcx ; loop while rcx > 0
79
+ jnz .print_from_stack
80
80
xor rbx , rbx ; respect convention :)
81
- ret
81
+ ret
82
82
83
83
; Выводит знаковое 8-байтовое число в десятичном формате
84
84
85
85
print_int:
86
86
or rdi , rdi ; set flags
87
87
jns .end ; if number is positive just print it!
88
88
push rdi ; else add '-'
89
- mov rdi , '-'
90
- call print_char
91
- pop rdi
92
- neg rdi
89
+ mov rdi , '-'
90
+ call print_char
91
+ pop rdi
92
+ neg rdi
93
93
.end:
94
94
jmp print_uint
95
- ret
95
+ ret
96
96
97
97
; Принимает два указателя на нуль-терминированные строки, возвращает 1 если они равны, 0 иначе
98
98
0 commit comments