GNU assembler - читать всем кто хоть раз хотел это попробовать! файл: kog.S Code: .globl _start .data HAX: .ascii "HAX!\n"; .text _start: .func movq $5,%rdx /* gJLuHa cmpoku */ lea HAX,%rsi /* agpec HAX */ movq $1,%rdi /* stdout */ movq $1,%rax /* write */ syscall movq %rax,%rdi /* 3anucaHo B stdout */ movq $60,%rax /* exit */ syscall .endfunc кодировка, сборка, запуск и вывод кода выхода проги. as -o ./kog.o ./kog.S && ld -o ./cmapm ./kog.o && ./cmapm ; echo Ha Bblxoge: $? О том как соблюдать синтаксис читайте в info gas. Чего нет в инфо: 1) Символ _start является точкой входа програмы. При привращении объектов в эльф, ld ищет именно этот символ( попробуйте заменить на main ). 2) Порядок передачи аргументов в функцию для архитектуры x86_64: rdi,rsi,rdx,r10,r8,r9. 3) В rax передаётся номер системного вызова; список с номерами находится в фаиле /usr/include/x86_64-linux-gnu/asm/unistd_64.h 4) .globl function аналог extern void function(); Как из Си вызвать асм. фаил: main.c Code: extern int kog(const char *str, int n); extern int main(int argc, char *argv[], char *envp[]){ char* HAX="HAX!\n"; int ret; ret=kog(HAX,5); return(ret);} фаил: kog.S Code: .globl kog .text kog: .func movq %rsi,%rdx movq %rdi,%rsi movq $0x01,%rdi movq $0x01,%rax syscall movq $111,%rax retq .endfunc преобразование, запуск и результат. gcc -o ./cmapm main.c kog.S && ./cmapm ; echo Ha Bblxoge: $? P.S. Непонимаю почему в доках, когда хотят рассказать про ассемблер в *nix, говорят: "Есть gas и он уже в системе, но програмить будем на nasm. Ставим nasm." и дальше как ставить nasm;( Вспомнил девелоперский хэндбук к freebsd ).
Спешу огорчить, но первым на ачате в этой теме был я, еще несколько лет тому назад: https://forum.antichat.ru/nextoldesttothread125161.html . Го кодить для FreeBSD, есть интересная задача.