Вопросы про регистры и какие значения надо в них вставлять
В общем есть такой код:
section .data
msg db 'Hello,world!',0xa
len equ $ - msg
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
И есть вот такие типы регистров:
EAX (Accumulator): для арифметических операций
ECX (Counter): для хранения счетчика цикла
EDX (Data): для арифметических операций и операций ввода-вывода
EBX (Base): указатель на данные
ESP (Stack pointer): указатель на верхушку стека
EBP (Base pointer): указатель на базу стека внутри функции
ESI (Source index): указатель на источник при операциях с массивом
EDI (Destination index): указатель на место назначения в операциях с массивами
EIP: указатель адреса следующей инструкции для выполнения
EFLAGS: регистр флагов, содержит биты состояния процессора
Есть несколько вопросов:
- Почему большинство регистров используются не по назначению? Например,зачем мы вставляем (грубо говоря) переменную в регистр ECX? Ведь он является счётчиком цикла.
- Чтобы вывести на экран текст, мы должны вставить в EAX - 4, а в EBX - 1. Вопрос: зачем? Это типо системные вызовы (команды)? Какие есть ещё? Есть ли таблица этих команд?
Простите, если вопрос кажется глупым