Раздел «Язык Ассемблера».SumWithGlibc:

Вызов функций scanf и printf из Nasm

Функции scanf и printf определены в библиотеке glibc. Эти функции можно указать в ассемблерной программе как внешние с помощью директивы extern. Объектный файл получается стандартным образом. А вот при компоновке (линковке) необходимо указать библиотеку libc.so либо использовать для компоновки gcc, который, в отличие от ld по умолчанию компонует все объектные файлы с библиотекой libc.so

global _start

;Объявляем используемые внешние функции из libc
extern exit
extern puts
extern scanf
extern printf

;Сегмент кода:
section .text
 
;Функция main:
_start:
 
;Параметры передаются в стеке:
push dword msg
call puts
 
;По конвенции Си вызывающая процедура должна
;очищать стек от параметров самостоятельно:
sub esp, 4
 
push dword a
push dword b
push dword msg1
call scanf
sub esp, 12
 
mov eax, dword [a]
add eax, dword [b]
 
push eax
push dword msg2
 
call printf
add esp, 8
 
;Завершение программы с кодом выхода 0:
push dword 0
call exit
 
ret
 
;Сегмент инициализированных данных
section .data
msg  : db "An example of interfacing with GLIBC.",0xA,0
msg1 : db "%d%d",0
msg2 : db "%d", 0xA, 0
 
; Сегмент неинициализированных данных
section .bss
a resd 1
b resd 1