#ассемблер #компиляция #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
Комментариев нет:
Отправить комментарий