Автор: exp (02.03.2010 в 22:37)
с примером что-то не понял , eax,ebx,ecx,edx это 32x битные регистры, в них умещается только 4 байта, как и в int, long, DWORD ....
в 64х-битных системах юзаются 64x-битные rax,rbx,rcx,rdx, возможно даже от проца зависит
на С иногда просто две переменные иногда используют чтобы записать больше , в win32 например кое-где размер файла лежит в структуре в двух dword.
есть и 64х-битный тип
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
, такие структуры
typedef struct _FLOAT128 {
__int64 LowPart;
__int64 HighPart;
} FLOAT128;
правда там везде с отписками типа "__int64 is only supported by 2.0 and later midl. (Microsoft Interface Definition Language я так понял)" или что-то похожее
Есть ещё уже готовые библиотеки ещё для работы с большими числами
А в gcc AT&T-синтаксис ассемблера, вроде традиционно под motorola процессоры кодили таким синтаксисом,
ссылку на описание синтаксиса не нашёл, но отличается сильно, хотя можно и более-менее привычно делать,
вот здесь было например
тут была тема
> автор: exp (05.06.2009 в 21:12)
Поторопился со вставками asm кода, и
оказалось компилируется ,) например такой код
main() {
char *buf = "Строка";
__asm__ ("push esi \n\
mov esi, %0"::"m"(buf));
__asm__ ("push 1 \n\
push esi \n\
push esi \n\
push 0 \n"
"call _MessageBoxA@16 \n"
"xor eax,eax\n\
pop esi"
);
printf("%s\n", buf);
getch();
putch(7); // символ 0x07
} |
так-же вез #include`sов
только нужно кроме кроме выключения
"Проект-параметры-Компилятор-Компилятор С-поддержка стандартных ..."
ещё добавлять строку -masm=intel ? там где
"Проект-параметры-Параметры-'Компилятор'"
непонятно почему кроме messagebox ничего не показывает :) но работает
читать всёравно где-то нужно, а везде AT&T
, я только по поводу того как передать переменную из c в asm >mov esi, %0"::"m"(buf)); немного разбирался, но быстро бросил это дело и забыл :)
Есть возможность просто на ассемблере компилировать объектный файл с функциями и прилинковывать к проекту.