Знающие люди подскажите максимально подробно как работает данный код. Буду рад если у кого то выйдет объяснить сложные вещи простыми словами.
Я не уверен что верно понимаю как происходит обращение к системным функциям посредством прерываний... у каждой функции есть свой h код? Предположу что так... следовательно аргументы в них передаются всегда заранее в четко определенные регистры посредством mov.
; секция определения переменных
SECTION .DATA
hello: db 'Hello world!',10
helloLen: equ $-hello
; Насколько я понял... точка входа
SECTION .TEXT
GLOBAL _start
_start:
mov eax,4 ; 'write' system call = 4 если верно понял то вызываем api функцию для записи
mov ebx,1 ; file descriptor 1 = STDOUT
mov ecx,hello ; string to write записываем нашу строку в регистр ECX
mov edx,helloLen ; length of string to write пишем длину нашей строки в регистр EDX
int 80h ; call the kernel здесь все это выполняем посредством вызова необходимого прерывания?
; Terminate program заканчиваем программу
mov eax,1 ; 'exit' system call ; передаем аргументы в нашу будущую функцию?
mov ebx,0 ; exit with error code 0 ; передаем аргументы в нашу будущую функцию?
int 80h ; call the kernel ;вызываем нашу функцию посредством вызова необходимого прерывания?