|
|
|
| Есть несколько общих вопросов по поводу действий над очень большими числами (порядка 10 в степени 1000 000 000).
1) Как работать с такими числами, в переменную никакого типа, я так понимаю, такое число не запишешь. Поэтому видимо надо разбивать на несколько переменных каким то образом.
2) Если например у меня Win XP 32-битная, а проц атлон Х2 64, можно ли оперировать 64-х разрядными переменными?
3) Возможно ли использовать видеокарту для вычислений?
4) Что почитать, чтобы найти ответы на эти вопросы? =) | |
|
|
|
|
|
|
|
для: sasha1133
(26.02.2010 в 19:07)
| | Помогите кто-нибудь. Кстати, насколько помню, в delphi кажется была такая вещь, что можно было писать ассемблерный код внутри программы. А в Visual C++ такое есть? | |
|
|
|
|
|
|
|
для: sasha1133
(27.02.2010 в 12:03)
| | Да! Для примера приведу небольшой код:
// qeqwrew.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int a = 3; // объявляем переменную a и кладем туда значение 1
int b = 2; // объявляем переменную a и кладем туда значение 1
int c; // объявляем переменную c, но не инициализируем ее
// начало ассемблерной вставки
__asm{
mov eax, a ;// загружаем значение переменной a в регистр EAX
mov ebx, b ;// загружаем значение переменной b в регистр EBX
add eax, ebx ;// складываем EAX с EBX, записывая результат в EAX
mov c, eax ;// загружаем значение EAX в переменную c
}
// конец ассемблерной вставки
// выводим содержимое c на экран
// с помощью привычной нам функции printf
printf("a + b = %x + %x = %x\n",a,b,c);
}
насчет чисел не знаю максимум использовал для решения задачи на с++ double, даже long double использовать не приходилось. Найдешь ответ пиши самому интересно, может пригодится. | |
|
|
|
|
|
|
|
для: sasha1133
(27.02.2010 в 12:03)
| | Подскажите пожалуйста как правильно организовать ассемблерные вставки в DevCpp(писать в байт коде не предлагать :). | |
|
|
|
|
|
|
|
для: Miha_drinking_bout
(01.03.2010 в 14:46)
| | с примером что-то не понял , 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)); немного разбирался, но быстро бросил это дело и забыл :)
Есть возможность просто на ассемблере компилировать объектный файл с функциями и прилинковывать к проекту. | |
|
|
|