g++ && gcc && gdb && intel
Как известно на настоящий момент времени писать на чистом ассемблере не очень выгодно,на это есть несколько причин:
1)Долго
2)Дорого
Но без него не обойтись, если вспомнить про sse,mmx,3Dnow! и прочие инструкции 64-bit ++ которые толком не реализованы в Си . Для этого выгодно делать вставки ассемблерного кода прямо в код на C/С++ . Об этом сегодня и пойдёт речь,а так же о том,как завести весь инструментарий в линуксе .
GDB - Как известно стандартно использует синтаксис AT&T (ибо unix-way). Поскольку я решил изучать nasm в intel синтаксисе,мне надо было перевести gdb в читабельный для меня режим. Собстно было найдено решение,оно оказалось весьма изящным,поскольку разработчики предусмотрели эту возможность. Для смены синтаксиса используется команда
1)Долго
2)Дорого
Но без него не обойтись, если вспомнить про sse,mmx,3Dnow! и прочие инструкции 64-bit ++ которые толком не реализованы в Си . Для этого выгодно делать вставки ассемблерного кода прямо в код на C/С++ . Об этом сегодня и пойдёт речь,а так же о том,как завести весь инструментарий в линуксе .
GDB - Как известно стандартно использует синтаксис AT&T (ибо unix-way). Поскольку я решил изучать nasm в intel синтаксисе,мне надо было перевести gdb в читабельный для меня режим. Собстно было найдено решение,оно оказалось весьма изящным,поскольку разработчики предусмотрели эту возможность. Для смены синтаксиса используется команда
set disassembly-flavor intel | att (на выбор)Что касается ассемблерных вставок кода в С++ , так и тут всё просто,нам нужно передать g++
-masm=intelВот пример кода с ассемблерной вставкой:
#include <iostream> using namespace std; int xasm = 0; int main() { //int xasm = 0; asm("mov eax, 5 \n" "inc eax \n" "mov [xasm], eax \n"); cout << xasm <<endl; return 0; }
Comments
Post a Comment