Wejście i wyjście z programu asemblerowego są, łagodnie rzecz ujmując, uciążliwe. Aby uprościć obsługę operacji wejścia/wyjścia, w programach asemblerowych można wywoływać funkcje C. Asemblerowy interfejs do funkcji printf i scanf został zaimplementowany w zamieszczonych na końcu tej strony bibliotekach asm_io (32bit), asm64_io (64bit), asm63_io_new (64bit, gcc wersja powyżej 5).
Po załadowaniu do rejestrów odpowiednich danych, procedury z Tabeli 2 woła się instrukcją call np.:
mov rax, 10
call print_int ; wypisze na ekran liczbę 10
Zastosowanie biblioteki asm64_io wymaga pobrania jednej wersji poniżej. Z zawartych w niej plików modyfikujemy tylko plik starter.asm.
starter.asm
%include "asm64_io.inc" ;odpowiednik dyrektywy #include z C
segment .data
;
; dane zainicjalizowane
;
segment .bss
;
; dane niezainicjalizowane
;
segment .text
global asm_main
asm_main:
enter 0,0 ; setup
; ----
; Właściwy kod wstawiamy tu.
; Nie należy modyfikować kodu przed i po tym komentarzu
; ---
mov eax, 0 ; kod zwracany z funkcji
leave
ret
Najpierw należy zbudować pliki driver.c i asm64_io.asm (wystarczy zrobić to tylko raz)
gcc -c driver64.c -o driver64.o
nasm -f elf64 asm64_io.asm -o asm64_io.o
Następnie kompilujemy własny program starter.asm i linkujemy go z biblioteką
nasm -felf64 -o starter.o starter.asm
gcc -o starter starter.o driver64.o asm64_io.o
Można też skorzystać z załączonego pliku Makefile i wywołać polecenie make
%include "asm64_io.inc"
segment .data
pytanie db "Podaj dwie liczby : ", 0 ; tekst musi kończyć się zerem
wynik db "Suma = ", 0
segment .bss
segment .text
global asm_main
asm_main:
enter 0,0
; ----
dump_regs 1 ; pierwsze wypisanie zawartości rejestrów
mov rax, pytanie
call print_string
call read_int ; wczytanie liczby int
mov ebx, eax
call read_int ; wczytanie drugiej liczby
cmp eax, ebx
dump_regs 2 ; drugie wypisanie zawartości rejestrów
call print_nl
add eax, ebx
call println_int ; wypisanie liczby int z rax
call print_nl
; ---
mov rax, 0 ; powrót do C
leave
ret
Najnowszą biblioteką jest asm64_io_new pozwala ona na tworzenie oprogramowania i w wersji PIE i NO-PIE. Starsza biblioteka ams64_io jest głownie dla starszych wersji Linuxa i nie wspiera ona PIE. Biblioteka asm_io jest dla systemów 32 bitowych.