Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Ассемблер в Linux

#ассемблер #компиляция #cpp


Доброго времени суток, уважаемые гуру! 
Возникла необходимость обучиться ассемблеру, а работать в Windows на старом хламе
в универе не хочется, поэтому выбирают ноут с установленной Ubuntu 11.04. Подскажите
пожалуйста какие пакеты мне необходимо установить для написания программ на ассеблере,
а также как собирать и компилировать это проги из консоли? В дальнейшем планируется
связать ассемблер с C++, что для этого нужно и какую литературу необходимо почитать?    


Ответы

Ответ 1



Вам нужны binutils. В них есть или as86/ld86, или gas (GNU Assembler). Особенностью ассемблера gas является использование AT&T синтаксиса. Т.е. это означает следующее: прямой порядок операндов (т.е. src, dst, а не наоборот, как на платформе Wintel); все инструкции ассемблера имеют суффикс, определяющий размер операндов. например, movb. Никаких ужасных конструкций вроде dword ptr как в TASM/MASM:-) другой (чем у MASM/TASM) формат адресации и многое другое С другой стороны, этот синтаксис приближен к синтаксису ассемблера на нормальных, "больших" машинах. В gcc, кстати, говоря используется именно AT&T синтаксис ассемблера, так что очень рекомендую его изучить.

Ответ 2



Самый популярный ассемблер для линукс - nasm. Ставится apt-get install nasm. Книг по ассемблеру в линуксе мало. Хорошая книга по-английски Sivarama P. Dandamudi. Guide to Assembly Language Programming in Linux. Поищи в интернете. Там описано, как работать в насме, как компилировать, структура программы, синтаксис, а также общие теоретические понятия о работе с памятью, регистры процессора и т.д. Вот еще есть книга на русском Столяров А.В. Язык ассемблера в ОС Unix. Она есть в интернете на сайте автора в свободном доступе. Погугли.

Ответ 3



Как вариант есть возможность использовать встроенный ассемблер GCC. Пример int main() { char *message = "Hello, world!\n"; __asm__("\ movl $4, %%eax\n\ movl $0, %%ebx\n\ push %0\n\ pop %%ecx\n\ movl $13,%%edx\n\ int $0x80" : :"g"(message) ); return 0; } И результат gcc message.c && ./a.out Hello, world! Linux Assembly HOWTO Using Assembly Language in Linux Introduction to UNIX assembly programming

Комментариев нет:

Отправить комментарий