Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1729 • Страница 82 из 87<  1 ... 79  80  81  82  83  84  85 ... 87  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 31.05.2010
Откуда: Минск
Фото: 4
Industrialice, oxy , спасибо за ответы.
Industrialice, ассемблер пока не проходили...

_________________
Идущий осилит дорогу



Партнер
 

Member
Статус: Не в сети
Регистрация: 08.07.2006
Откуда: СПБ
Industrialice писал(а):
Visual Studio 2012 зафейлила этот код выдав откровенный бред.

А что написала? У меня просто нету под рукой проверить.


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
Char88 писал(а):
А что написала? У меня просто нету под рукой проверить.

2010
Код:
int main()
{
    int a = rand();
    int b;
    if( a == 2 | a == 0 )
        b = 0;
    else
        b = 1;

    printf( "%d\n", b );
   return 0;
}

Код:
main proc near
call    ds:__imp__rand
xor     ecx, ecx
cmp     eax, 2
setz    cl
xor     edx, edx
test    eax, eax
setz    dl
or      ecx, edx
neg     ecx
sbb     ecx, ecx
lea     eax, [ecx+1]
push    eax
push    offset Format   ; "%d\n"
call    ds:__imp__printf
add     esp, 8
xor     eax, eax
retn
main endp



 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
Industrialice А на C++ можно консольные приложения создавать?
Только так чтоб в итоге был только один исполняемый файл с возможностью запуска на любом компьютере.


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
silent_assassin писал(а):
А на C++ можно консольные приложения создавать? Только так чтоб в итоге был только один исполняемый файл с возможностью запуска на любом компьютере

Для этого нужно включить статическую линковку CRT( для вс2010 Свойства конфигурации -> С/С++ -> Создание кода -> Библиотека времени выполнения, выбрать вариант без DLL ) и не юзать никаких специфичных библиотек. Для компьютеров с разными ОС нужна перекомпиляция, но не более если не юзать ничего за пределами ANSI C++( который включает в себя достаточно функций для работы с консолью, которые и реализуются этой самой CRT )


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
Industrialice писал(а):
Char88 писал(а):
А что написала? У меня просто нету под рукой проверить.

2010

Думал только я в универе на асме быдлокод писал. Оказывается мелоксофт тоже умеет быдлокодить. Полчаса въезжал в асм, всё же въехал. Можно было всё енто нарисовать на асме в 5 строк. Думаю icc так и рисует в 4-5 строк.


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
oxy писал(а):
Можно было всё енто нарисовать на асме в 5 строк. Думаю icc так и рисует в 4-5 строк

GCC делает всё отлично - у меня только к 1 инструкции вопросы
ICC делает даже хуже VC++, используя условные ветвления для проверок - по мне так это уже полный бред, неправильный переход по ветвлению будет стоить очень дорого, к тому же это наглое игнорирование побитового оператора( код при использовании | генерируется 1 в 1 как при использовании || )

ICC 2011 или как там правильно - не самый новый
Код:
call    ds:__imp__rand
cmp     eax, 2
jz      short loc_401034
test    eax, eax
jnz     short loc_401038

loc_401038:
mov     eax, 1

loc_40103D:
push    eax
push    offset Format   ; "%d\n"
call    ds:__imp__printf

///////////////

loc_401034:
xor     eax, eax
jmp     short loc_40103D

Как-то так если представить в виде плоского листинга, loc_401034 доступно только через прыжок, остальные идут линейно в коде


 

Member
Статус: Не в сети
Регистрация: 27.12.2011
Откуда: Краснодар
Industrialice Буду русифицировать VS2010


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
silent_assassin писал(а):
Буду русифицировать VS2010

Нафиг это надо, это моя копия русскоязычная с самого первого дня, переставлял бы поставил бы английскую


 

Member
Статус: Не в сети
Регистрация: 17.10.2005
Вопрос по дебагу в эклипсе. Есть аппликуха, есть дамп при падении (.core) и символы (.sym). При дебаге дампа из-за разницы в сорцах (на моей машине и на той, что строили билд для тестирования) стек-трейс не корректен, видимо нужно к дебагу подцепить еще и символы. как это сделать?


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
oxy писал(а):
Думал только я в универе на асме быдлокод писал. Оказывается мелоксофт тоже умеет быдлокодить

У меня появился ещё повод кинуть большой камень в этот огород. Сейчас переписываю на Асме рендерер для своего 3д-движка. Закончил функцию которая рисует 2д-прямоугольник( используется GUI ).
Вариант главной части функции от VS2010
Код:
mov     ecx, [ebp+arg_4]
mov     edi, [ebp+arg_0]
add     ecx, esi
mov     esi, p_Lock
mov     edx, [ebp+arg_8]
mov     word ptr [esp+28h+var_10+2], cx
mov     [esp+28h+var_14], ecx
mov     word ptr [esp+28h+var_10], di
mov     ebx, [esp+28h+var_10]
mov     ecx, eax
shl     ecx, 4
mov     [ecx+esi], ebx
mov     ebx, [esp+28h+var_C]
mov     [ecx+esi+4], ebx
mov     ebx, [esp+28h+var_8]
mov     [ecx+esi+8], ebx
add     ecx, esi
mov     [ecx+0Ch], edx
mov     cx, word ptr [ebp+arg_4]
mov     word ptr [esp+28h+var_10+2], cx
mov     word ptr [esp+28h+var_10], di
mov     ebx, [esp+28h+var_10]
add     edi, [esp+28h+var_18]
lea     ecx, [eax+1]
shl     ecx, 4
mov     [ecx+esi], ebx
mov     ebx, [esp+28h+var_C]
mov     [ecx+esi+4], ebx
mov     ebx, [esp+28h+var_8]
add     ecx, esi
mov     [ecx+8], ebx
mov     [ecx+0Ch], edx
mov     cx, word ptr [ebp+arg_4]
mov     word ptr [esp+28h+var_10+2], cx
lea     ecx, [eax+2]
shl     ecx, 4
add     ecx, esi
mov     word ptr [esp+28h+var_10], di
mov     ebx, [esp+28h+var_10]
mov     [ecx], ebx
mov     ebx, [esp+28h+var_C]
mov     [ecx+4], ebx
mov     ebx, [esp+28h+var_8]
mov     [ecx+8], ebx
mov     [ecx+0Ch], edx
movzx   ecx, word ptr [esp+28h+var_14]
mov     word ptr [esp+28h+var_10+2], cx
lea     ecx, [eax+3]
shl     ecx, 4
add     ecx, esi
mov     word ptr [esp+28h+var_10], di
mov     esi, [esp+28h+var_10]
mov     [ecx], esi
mov     esi, [esp+28h+var_C]
mov     [ecx+4], esi
mov     esi, [esp+28h+var_8]
pop     edi
mov     [ecx+8], esi
add     eax, 4
pop     esi
mov     [ecx+0Ch], edx
mov     VBufferSize, eax
pop     ebx
mov     esp, ebp
pop     ebp
retn    0Ch

Мой предварительный вариант
Код:
mov     VBufferSize, ecx
mov     edx, [ebp+arg_10]
mov     [eax+0Ch], edx
mov     [eax+1Ch], edx
mov     [eax+2Ch], edx
mov     [eax+3Ch], edx
mov     ecx, [ebp+arg_C]
mov     [eax+12h], cx
mov     [eax+22h], cx
add     ecx, [ebp+arg_4]
mov     [eax+2], cx
mov     [eax+32h], cx
mov     edx, [ebp+arg_8]
mov     [eax], dx
mov     [eax+10h], dx
add     edx, [ebp+arg_0]
mov     [eax+20h], dx
mov     [eax+30h], dx
add     eax, 40h
mov     p_Lock, eax
pop     ebp
retn    14h

Работает совершенно одинаково - как и задумано, на Intel Celeron 1.7 GHz @ 2.15 на ядре Willamette первый вариант при куче интерфейса даёт 593 фпс, второй вариант 640 фпс. Посмотрим что там будет когда я более часто вызываемые функции перепишу


 

Member
Статус: Не в сети
Регистрация: 15.02.2009
Откуда: Лангепас
"640K ought to be enough for anybody" (С) Bill Gates :D


 

Member
Статус: Не в сети
Регистрация: 31.05.2010
Откуда: Минск
Фото: 4
Одна из лабораторных задач :
"// №10. Найти все меньшие N числа-палиндромы,
// которые при возведении в квадрат дают
// палиндром. Число называется палиндромом,
// если его запись читается одинаково с начала и с конца."
Я её написал, но на числах с количеством знаков больше семи она таак неспеееешно их ищет. Десятизнак уже минут десять считает :crazy: Можно как-нибудь ускорить работу программы. Вот мой код :
Код:
#include <iostream>
#include <math.h>
typedef unsigned int UINT;
UINT x, y, i;
using namespace std;

UINT incremental(UINT x);
UINT reverse (UINT x, UINT i);
UINT palindrome (UINT x);

int main()
{
   cout << "\nEnter your number "<< endl;
   cin >> x;
   --x;
   while(x > 0)
   {
      x--;
      i = incremental(x);
      y = reverse(x, i);
//      cout << "err x " << x << "err y " << y ;
      if ((x == y)&&(x > 10)) // palindrom lists
      {
         y = palindrome(x);
         if(y == 1)
         {
            cout << "Palindrom(s) list : " << x << endl;
         }
      }
   }
   char response;
   cin >> response;
   return 0;
}

UINT incremental(UINT x)
{
   i = 0;
   for(; x >= 10; i++)
   {
      x = x/10;
   }
   return i;
}

UINT reverse (UINT x, UINT i)
{
   y = 0;
   for(; x > 0; i--)
   {
      y += (x%10)*pow(10, i);
      x /= 10;
   }
   return y;
}

UINT palindrome (UINT x)
{
   x *=x;
   i = incremental(x);
   y = reverse(x, i);
   cout << "y :" << y;
   if(x == y)
   {
      return 1;
   }
   else
      return 2;
}

_________________
Идущий осилит дорогу


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
zanac то ли я задание не понял, то ли прога работает неправильно. Также возможно и то и другое
Пользователь вводит число. Допустим 1000. Все целые положительные числа которые меньше этого числа и являющиеся палиндромами, при возведении которых в квадрат также получается палиндром, вывести на экран - так?


 

Member
Статус: Не в сети
Регистрация: 31.05.2010
Откуда: Минск
Фото: 4
Industrialice , да.

Добавлено спустя 6 часов 55 минут 28 секунд:
Industrialice, прога вроде нормально работает, есть один баг - она числа от 1 до 9 не признает за палиндромы, но это мелочь. Ответ на твой вопрос - ты все правильно понял.

_________________
Идущий осилит дорогу


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
zanac я бы поглядел повнимательнее, но задачка уж больно скучна. Вы учтите что деление - адски дорогая операция если компилятор не может его оптимизировать( вряд ли деление на 10 он оптимизирует как-либо ), хотите скорость - уменьшайте их количество. Приблизительные цифры: +/- стоят 0.25 такта, целочисленное деление 40-80 тактов процессора. Будет разница в зависимости от ЦП, но ситуация не изменится. На большинстве ЦП с архитектурой АРМ деление аппаратно не поддерживается вообще и там все будет куда хуже. Вобщем стоит учиться обходиться без него


 

Member
Статус: Не в сети
Регистрация: 14.02.2011
Откуда: Kaliningrad
Фото: 32
Хочу с полного 0ля начать изучать С++.
1) Реально ли это осились самому в домашних условиях ?
2) Хотелось бы найти дельные учебники, и тех кто сможет в этом помочь !

_________________
10940X +13700KF | 8x8Gb DDR4 + 2x16 DDR5 | GV-N3080EAGLE OC-10GD | 970Pro 512Gb+980Pro 1Tb | SF-1200F14MP | WD20PURZ | WD2000FYYZ | MG07ACA12TE


 

Member
Статус: Не в сети
Регистрация: 12.09.2010
Откуда: Калининград
Cyborg39rus писал(а):
Реально ли это осились самому в домашних условиях ?

Лучше условий чем дома вы впринципе вряд ли найдёте
Cyborg39rus писал(а):
Хотелось бы найти дельные учебники, и тех кто сможет в этом помочь !

Герберт Шилдт Базовый курс С++, офигенный учебник. Его одного хватит надолго и будет достаточно для многого. Очень важно при этом остерегаться российской литературы, российских форумов по программированию - тогда всё будет ок


 

Member
Статус: Не в сети
Регистрация: 14.02.2011
Откуда: Kaliningrad
Фото: 32
Industrialice
Спасибо !

_________________
10940X +13700KF | 8x8Gb DDR4 + 2x16 DDR5 | GV-N3080EAGLE OC-10GD | 970Pro 512Gb+980Pro 1Tb | SF-1200F14MP | WD20PURZ | WD2000FYYZ | MG07ACA12TE


 

Member
Статус: Не в сети
Регистрация: 31.05.2010
Откуда: Минск
Фото: 4
Industrialice, а где можно почитать о такой оптимизации?

_________________
Идущий осилит дорогу


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1729 • Страница 82 из 87<  1 ... 79  80  81  82  83  84  85 ... 87  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan