Para o estudo do livro Low-Level Programming, eu precisei fazer uma lib para facilitar a manipulação de entrada/saida. A lib no geral é bem simples, porém é bastante útil. Abaixo as funções que a lib oferece.
Os argumentos das funções seguem o mesmo padrão das syscalls x86-64. RAX é o registrador de retorno.
| call | rdi | rsi | rdx | rax(return) |
|---|---|---|---|---|
| exit | signed int code | |||
| string_length | char *string | int sizeofstring | ||
| print_string | char *string | |||
| print_char | char ch | |||
| print_newline | ||||
| print_uint | unsigned int number | |||
| print_int | signed int number | |||
| read_char | char ch | |||
| read_word | char *buf | size_t bufsize | 0 - something wrong size_t bufsize - sucess | |
| string_equals | char *string1 | char *string2 | 0 - not equal 1 - equal | |
| string_copy | char *string | char *buf | size_t bufsize |
%include "lib.inc"
section .text
global _start
_start:
mov rdi, 12345
call print_uint ; int unsigned
call print_newline
mov rdi, -12345
call print_int ; int signed
call print_newline
call exit