Master
4 unresolved threads
+ 231
- 21
commit don't lie
47 | mov rsi, rsp | |
48 | pop rdi | |
49 | ||
50 | ; задать system call number и descriptor | |
51 | mov rdi, 1 | |
52 | mov rax, 1 | |
53 | ||
54 | syscall | |
22 | 55 | ret |
23 | 56 | |
24 | 57 | ; Переводит строку (выводит символ с кодом 0xA) |
25 | 58 | print_newline: |
26 | xor rax, rax | |
59 | mov rdi, 0xA | |
60 | call print_char | |
27 | 61 | ret |
Please register or sign in to reply |
36 | 101 | ; Выводит знаковое 8-байтовое число в десятичном формате |
37 | 102 | print_int: |
38 | xor rax, rax | |
103 | or rdi, rdi | |
104 | jns .print_positive | |
105 | ||
106 | ; case negative - print "-" followed by rdi's two's complement negate | |
107 | push rdi | |
108 | mov rdi, 45 | |
109 | call print_char | |
110 | pop rdi | |
111 | neg rdi | |
112 | ||
113 | .print_positive: | |
114 | call print_uint | |
39 | 115 | ret |
|
3 | 3 | |
4 | 4 | ; Принимает код возврата и завершает текущий процесс |
5 | 5 | exit: |
6 | xor rax, rax, | |
7 | ret | |
6 | mov rax, 60 | |
7 | syscall | |
|
26 | xor rax, rax | |
59 | mov rdi, 0xA | |
60 | call print_char | |
27 | 61 | ret |
28 | 62 | |
29 | 63 | ; Выводит беззнаковое 8-байтовое число в десятичном формате |
30 | 64 | ; Совет: выделите место в стеке и храните там результаты деления |
31 | 65 | ; Не забудьте перевести цифры в их ASCII коды. |
32 | 66 | print_uint: |
33 | xor rax, rax | |
67 | push r15 | |
68 | ||
69 | mov rax, rdi; by requirements, the parameter is passed through rdi, but we need it in rax to do math | |
70 | mov r15, rsp; r11 - initial rsp | |
71 | mov rdi, rsp | |
72 | sub rdi, 500; | |
|
@D23Alex ревью получено. ждем фиксы
@andrew фиксы сделаны
Принято
closed
Preferences
Files with large changes are collapsed by default.
Желательно добавить строку xor rdi, rdi
, т.к. вторым аргументом системного вызова exit является код возврата
При вызове функции в конце другой функции стоит использовать jmp f
вместо call f; ret
. Это помогает нам не загружать стек, что очень важно при рекурсивных вызовах.
Опять же call + ret
следует заменить на jmp