Сборка x86: перед системным вызовом в Linux, следует ли сохранять все регистры?

У меня есть код ниже, который открывает файл, читает его в буфер, а затем закрывает файл.

Закрытие системного вызова требует, чтобы номер дескриптора файла был в регистре ebx. Регистр ebx получает номер дескриптора файла перед выполнением системного вызова read. Мой вопрос должен ли я сохранить регистр ebx в стеке или где-нибудь перед тем, как сделать системный вызов read, (может ли int 80h очистить регистр ebx?). А потом восстановить регистр ebx для системного вызова close? Или код ниже у меня хорошо и безопасно?

Я запустил приведенный ниже код, и он работает, я просто не уверен, считается ли это хорошей практикой сборки или нет, потому что я не сохраняю регистр ebx перед вызовом чтения int 80h.

;; open up the input file 
mov eax,5        ; open file system call number
mov ebx,[esp+8]  ; null terminated string file name, first command line parameter
mov ecx,0o       ; access type: O_RDONLY
int 80h          ; file handle or negative error number put in eax
test eax,eax
js Error         ; test sign flag (SF) for negative number which signals error

;; read in the full input file
mov ebx,eax            ; assign input file descripter
mov eax,3              ; read system call number
mov ecx,InputBuff      ; buffer to read into
mov edx,INPUT_BUFF_LEN ; total bytes to read
int 80h
test eax,eax
js Error               ; if eax is negative then error
jz Error               ; if no bytes were read then error
add eax,InputBuff      ; add size of input to the begining of InputBuff location
mov [InputEnd],eax     ; assign address of end of input

;; close the input file
;; file descripter is already in ebx
mov eax,6       ; close file system call number
int 80h         

Ответы на вопрос(2)

Ваш ответ на вопрос