169 похожих чатов

Всем привет. Хочу у Вас спросить. Вот код: ;hello.asm section .data

msg db "hello, world",0

section .bss
section .text

global main main:

mov rax, 1 ; 1 = запись.

mov rdi, 1 ; 1 = в поток стандартного вывода stdout.

mov rsi, msg ; Выводимая строка в регистре rsi.

mov rdx, 12 ; Длина строки без конечного 0.

syscall ; Вывод строки.

mov rax, 60 ; 60 = код выхода из программы.

mov rdi, 0 ; 0 = код успешного завершения программы.

syscall ; Выход из программы.

А вот вопрос:

Интересно, а зачем два раза указывать код выхода: один успешный, а другой просто?

7 ответов

25 просмотров

rax = 60 это подфункция для syscall. 60 это номер функции завершения программы (точно название не помню) rdi = аргумент, в данном случае "0" - обозначает, что программа завершилась успешно. Можешь положить в rdi что угодно, это в принципе чисто для себя. Чтобы понять, с каким кодом завершилась программа (ошибка была, или нет)

Alan 🔝-Бэброу Автор вопроса
Entusiast
rax = 60 это подфункция для syscall. 60 это номер ...

И это... Как система не путается? Там же два одинаковых символа в регистрах: один в rdi, другой в rax. У всех по 1. Как ОС знает, что одна единичка - это stdout, а другая - write-код?

Alan 🔝 Бэброу
И это... Как система не путается? Там же два одина...

Это параметры, вызывающий код знает какой параметр в каком регистре

Alan 🔝-Бэброу Автор вопроса
Oleksij Kyslytsja
Это параметры, вызывающий код знает какой параметр...

Т.е. для stdout есть специальный регистр, как и для write-кода? Или вообще пофиг в какой регистр какой код ложить?

Alan 🔝 Бэброу
Т.е. для stdout есть специальный регистр, как и дл...

После syscall ты передаёшь управление ядру. Ядро видит, что ты ей передал(положил) в RAX, RBX, RCX, и т.д И обрабатывает

Alan 🔝 Бэброу
Т.е. для stdout есть специальный регистр, как и дл...

Есть соглашение о передаче параметров. В какой регистр класть определяет вызываемая сторона, в данном случае сискол из ядра

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта