1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. M0rg0t

    M0rg0t Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    523
    SadKo, мне в С++ нравятся неймспейсы. Т.е. чтобы не писать что-то вида file_get_contents, http_upload_filе, можно кодить красивые File::GetContent,HTTP::Get и прочее. ООП я почему-то не люблю, даже в РНР пишу в процедурном стиле.
     
  2. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.539
    Адрес:
    г. Санкт-Петербург
    Неймспейсы - всего лишь синтаксический сахар, RTL им не нужна.
     
  3. d1337spy

    d1337spy New Member

    Публикаций:
    0
    Регистрация:
    12 май 2018
    Сообщения:
    2
    Есть задача! Есть решение но неверное помогите решить!
    Задача.png
    Как умножить число 5 и поместить его в массив char и потом вывести??

    Неверное решение!
    Код (C):
    1.  
    2. #include <iostream>
    3. #include <Windows.h>
    4.  
    5. unsigned long long int text[] = { 'n','u','m','b','e','r','5',' ' };
    6. DWORD meal = 0xDEADBEEF;
    7.  
    8. char new_text[sizeof text];
    9.  
    10. int main()
    11. {
    12.     for (int x = 0; (char)text[x]; x++)
    13.     {
    14.         new_text[x] = text[x];
    15.     }
    16.     snprintf(new_text + 8, sizeof new_text, "%x", meal);
    17.     for (int x = 0; new_text[x]; x++)
    18.     {
    19.         new_text[x] != '5' ? std::cout << new_text[x] : std::cout << ((new_text[x] - 48) * 5);
    20.     }
    21.     std::cin.get();
    22. }
     
  4. ReadMyName

    ReadMyName New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2018
    Сообщения:
    1
    Так не катит ?
    Код (C):
    1.  
    2. #include <iostream>
    3. #include <Windows.h>
    4. unsigned long long int text[] = { 'n','u','m','b','e','r','5',' ' };
    5. DWORD meal = 0xDEADBEEF;
    6. char new_text[sizeof text+1];
    7. int main()
    8. {
    9. for (int x = 0,  i=0; x < 8; x++)
    10. {
    11.     if (text[x] == '5')
    12.     {
    13.          itoa((text[x] - 48)*(text[x] - 48), &new_text[x], 10);
    14.          i = i + 2;
    15.          continue;
    16.     }
    17.        new_text[i] = text[x];
    18.         i++;
    19. }
    20. snprintf(new_text + 9, sizeof new_text, "%x", meal);
    21. std::cout << new_text << std::endl;;
    22. std::cin.get();
    23. }
    24.  
     
    d1337spy нравится это.
  5. d1337spy

    d1337spy New Member

    Публикаций:
    0
    Регистрация:
    12 май 2018
    Сообщения:
    2
    Катит!
     
  6. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    108
    Возможно уже было. Вопрос?
    Как узнать разрядность и тип целевого процессора в С++? Нужен именно #define, попробовал size_t частично помогло, но sizeof(size_t) не срабатывает в препроцессоре.
    Ещё попробовал так:
    Код (C++):
    1. #ifdef _M_AMD64
    2. #define     __PLATFORM__     64   //разрядность целевого процессора
    3. #define     _I586_           //команда RDTSC доступна
    4. #elif  _M_IX86
    5. #define     __PLATFORM__     32   //разрядность целевого процессора
    6. #define     _I586_           //команда RDTSC доступна
    7. #else
    8. #define     __PLATFORM__     16   //разрядность целевого процессора
    9. #endif
    Работает в VS C++, но не уверен, что, код сработает на всех компиляторах С++, да, нужно чтобы и TurboC иже с ним, тоже работало как надо.
    ЗЫ
    Только что мысль торкнула, псевдо-условная компиляция.
    Код (C++):
    1.  
    2. const int _PLATFORM_ = sizeof(size_t);
    3. ....
    4. if (_PLATFORM_==64){
    5.    код для 64 битного варианта
    6. }else if(_PLATFORM_==32){
    7.    код для 32 битного варианта
    8. }
    Должно работать, если компилятор более или менее оптимизирующий, и догадается удалить мёртвый код. :):umnik2:
     
    Последнее редактирование: 15 мар 2019
  7. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    521
    Это штоле, или я не понимаю?:)

    #ifdef _WIN64

    #else

    #endif
     
  8. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.539
    Адрес:
    г. Санкт-Петербург
    Я в своё время поступил так:
    https://github.com/sadko4u/lsp-plug...38670c2d3a28ab97c419a4754/include/dsp/types.h
    Пример conditional-кода:
    https://github.com/sadko4u/lsp-plug...c419a4754/src/test/utest/dsp/pcomplex/mul.cpp
    --- Сообщение объединено, 15 мар 2019 ---
    Ну и вы перепутали понятие платформы и архитектуры. Платформа - это ОС, под которой запускаете, а архитектура - это ЦП, на котором запускаете.
     
  9. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    108
    Понятно, спасибо!
    Тут ещё проблема, есть ли интринстик __popcnt64 в GCC, _popcnt64 есть, но там прототип не правильный(u8 __popcnt64(u64)), надо u64 __popcnt64(u64), чтобы не делать лишнее преобразования, из-за этого выполняется лишний такт, для меня это много.
     
  10. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.539
    Адрес:
    г. Санкт-Петербург
    На крайний случай можете при помощи inline-ассемблера накодить, если текущий прототип не устраивает.
     
  11. Intro

    Intro Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    108
    Ассемблер использовать нежелательно, т.к. плохо оптимизируется. Интересно, а сам gcc 8.2 можно поковырять? Если подправить исходники, то проблема отпадёт само собой.
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    4.420
    https://github.com/gcc-mirror/gcc ковыряй :)