Разница между EAX, 1 и EBX, 1 в сборке?

section     .text
global      _start                              ;must be declared for linker (ld)

_start:                                         ;tell linker entry point

    mov     edx,len                             ;message length
    mov     ecx,msg                             ;message to write
    mov     ebx,1                               ;file descriptor (stdout)
    mov     eax,4                               ;system call number (sys_write)
    int     0x80                                ;call kernel

    mov     eax,1                               ;system call number (sys_exit)
    int     0x80                                ;call kernel

section     .data

msg     db  'Hello, world!',0xa                 ;our dear string
len     equ $ - msg                             ;length of our dear string

Ссылки на исходные коды ядра:

Как система узнает, что она должна выйти, когда она читает EAX, 1, а не EBX, 1? Поскольку 1 означает Sys_Exit.


person bhuvanesh arasu    schedule 20.01.2016    source источник
comment
Обработчик прерывания для int 0x80 в операционной системе ожидает код функции в eax, так что вы должны поместить его туда. Не уверен, что вы не уверены, что mov eax,1 на самом деле закрывается, это не так, он просто загружает 1 в eax. Это ядро ​​будет проверять значение eax после того, как вы вызовете его с помощью int 0x80.   -  person Jester    schedule 20.01.2016
comment
Функция sys_write требует дополнительной информации, которая находится в ebx, ecx и edx. Загрузка mov ebx,1 не имеет ничего общего с более поздним mov eax,1, который определяет функцию sys_exit.   -  person Weather Vane    schedule 20.01.2016
comment
Спасибо :) Я вроде понимаю! Я новичок в сборке. Я думаю, что по мере того, как я продолжу, я пойму это лучше. Но ваш ответ дал мне то, что я хотел   -  person bhuvanesh arasu    schedule 20.01.2016
comment
Для микропроцессора каждый регистр (eax, ebx, ecx и т. Д.) Является отдельным независимым местом, где может храниться число. Многие внешние функции (например, вызовы прерывания операционной системы) имеют соглашение о видах информации, хранящейся в определенных регистрах. Некоторые регистры имеют особое функциональное значение или режимы использования также для самого микропроцессора.   -  person lurker    schedule 20.01.2016


Ответы (1)


Этот компонент определяется в том, что мы называем ABI (двоичный интерфейс приложения). Это должно помочь: Что такое двоичный интерфейс приложения (ABI)?

person Pierre    schedule 21.01.2016