Вопросы про регистры и какие значения надо в них вставлять

В общем есть такой код:

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: регистр флагов, содержит биты состояния процессора

Есть несколько вопросов:

  1. Почему большинство регистров используются не по назначению? Например,зачем мы вставляем (грубо говоря) переменную в регистр ECX? Ведь он является счётчиком цикла.
  2. Чтобы вывести на экран текст, мы должны вставить в EAX - 4, а в EBX - 1. Вопрос: зачем? Это типо системные вызовы (команды)? Какие есть ещё? Есть ли таблица этих команд?

Простите, если вопрос кажется глупым


Ответы (0 шт):