Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2021, 13:20   #1
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию Ассемблерная вставка

Доброго времени суток!
Если кто-то знает, то объясните что не так. Выводит все правильно, но в конце появляется сообщение Run-Time Check Failure #2 - Stack around the variable 'W_CPU' was corrupted
Есть следующий код программы на С++, с использованием ассемблерной вставки, он возвращает результат выполнения команды CPUID
Код:
void main()
{

    int MAXCOM;
   int W_CPU;
//   int W_CPU1;
//   int W_CPU2;
   
    
    _asm
   {
         nop; 
         xor eax, eax
         CPUID
         mov MAXCOM, EAX;
         mov DWORD PTR[W_CPU],EBX;
         mov DWORD PTR[W_CPU+4], ECX;
        mov DWORD PTR[W_CPU + 8], EDX;
  end_prov:
        nop
 }
   
   std::cout << MAXCOM<<"\n";
   int *p = & W_CPU;
   std::cout << *p<<"\n";
   std::cout << *(p+1) << "\n";
   std::cout << *(p +2) << "\n";


}
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 21.11.2021 в 16:18.
Sweta вне форума Ответить с цитированием
Старый 22.11.2021, 12:34   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

А что так?
Код:
         mov DWORD PTR[W_CPU+4], ECX;
        mov DWORD PTR[W_CPU + 8], EDX;
Куда по вашему эти команды пишут?
ForenLi вне форума Ответить с цитированием
Старый 22.11.2021, 22:49   #3
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

char W_CPU[4]; да там была ошибка( в адреса, смещенные на 4 и 8 байт соответственно), но ошибка не ушла.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 22.11.2021, 23:33   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Цитата:
Сообщение от wikipedia
При EAX = 0 процессор возвращает идентификатор производителя процессора (англ. Vendor ID) в виде 12 символов ASCII в регистрах EBX, EDX, ECX (именно в таком порядке). В регистре EAX возвращается максимально допустимое значение EAX при вызове CPUID.
Так что 4 символов маловато для хранения 12 символов.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 23.11.2021, 21:07   #5
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Спасибо. что-то с арифметикой не сложилось.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблерная вставка c++ Kirill_1103 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 27.10.2020 21:13
ассемблерная вставка Serg12 Помощь студентам 5 04.05.2017 19:43
C++. и ассемблерная вставка Afli Помощь студентам 1 19.05.2015 21:42
Ассемблерная вставка на С++ CrashOveride Помощь студентам 1 01.04.2014 08:42