Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
pepepe
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 3
#1

__asm ошибка Access violation writing location - C++

08.01.2013, 21:52. Просмотров 3455. Ответов 8
Метки нет (Все метки)

Код ниже выводит следующую ошибку
"Unhandled exception at 0x004116a7 in cousach.exe: 0xC0000005: Access violation reading location 0x00000003"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int counter(int num, int power );
 
int _tmain(int argc, _TCHAR* argv[])
{
    printf_s( "power %d\n", counter( 3, 5) );
    getch();
    return 0;
}
 
int counter(int num, int power )
{
    __asm
    {
        mov eax, num ; num
            mov ecx, power ; power -1
            mov esi, 0
            mov ebp, num
power_f:
 
        imul ebp ; 8 * 8 
            mov eax, eax ; ebp = 64
 
            inc esi
 
            cmp esi, ecx
            jl power_f 
;        нужно вывести eax
 
    }
}
делаю по примеру ниже, который работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int power2( int num, int power );
 
int main( void )
{
    printf_s( "3 times 2 to the power of 5 is %d\n", \
              power2( 3, 5) );
}
int power2( int num, int power )
{
   __asm
   {
      mov eax, num    ; Get first argument
      mov ecx, power  ; Get second argument
      shl eax, cl     ; EAX = EAX * ( 2 to the power of CL )
   }
   // Return with result in EAX
}

http://www.cyberforum.ru/cpp-beginners/thread1446256.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2013, 21:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос __asm ошибка Access violation writing location (C++):

Access violation writing location
#include &lt;iostream&gt; using namespace std; template &lt; typename t &gt; void...

Access violation writing location
Вылетает эта ошибка. В чём может быть проблема? Программа выполняется выводит...

Access violation writing location
Добрый день! на строке ptr = ptr; бросает unhandeled exeption: Access...

Непонятная ошибка "Access violation writing location 0xcdcdcdd5"
#include &lt;iostream&gt; #include &lt;cstdlib&gt; struct Node{ int data; ...

Ошибка "Unhandled exception, Access violation writing location"
Пишу вот так: root-&gt;child1-&gt;parent=root; root-&gt;child2-&gt;parent=root;выходит...

8
Kastaneda
Jesus loves me
Эксперт С++
4759 / 2962 / 340
Регистрация: 12.12.2009
Сообщений: 7,520
Записей в блоге: 2
Завершенные тесты: 1
08.01.2013, 22:13 #2
Советую перед началом выполнения ассемблерной вставки сохранять все используемые регистры и восстанавливать их после выполнения нужного кода, это во первых. А во вторых регистр ebp используется для организации стек фрейма, поэтому его вообще менять нельзя. Думаю проблема как раз в этом.

Добавлено через 1 минуту
Цитата Сообщение от pepepe Посмотреть сообщение
"Access violation reading location 0x00000003"
Ошибка говорит о том, что невозможно прочитать память по адресу 3, а ты в ebp как раз кладешь 3.

Добавлено через 9 минут
Вот нашел хорошую статью на эту тему.
0
Psilon
Master of Orion
Эксперт .NET
5981 / 4834 / 901
Регистрация: 10.07.2011
Сообщений: 14,439
Записей в блоге: 5
Завершенные тесты: 4
08.01.2013, 22:19 #3
по-моему там AT&T синтаксис, так что не стоит вчитываться в асмовский код, если у вас был только x86
0
Kastaneda
08.01.2013, 22:21
  #4

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
там AT&T синтаксис
Цитата Сообщение от Psilon Посмотреть сообщение
если у вас был только x86
Ты понял, что написал?

0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
08.01.2013, 22:31 #5
Цитата Сообщение от pepepe Посмотреть сообщение
imul ebp ; 8 * 8
здесь ты умножаешь значение в eax на значение ebp результат в eax и edx
Цитата Сообщение от pepepe Посмотреть сообщение
mov eax, eax ; ebp = 64
пересылаешь из eax в eax зачем? пустая операция да и в ebp осталось 8

Добавлено через 2 минуты
Цитата Сообщение от pepepe Посмотреть сообщение
int counter(
в конце return то добавь
0
Psilon
08.01.2013, 22:31
  #6

Не по теме:

Kastaneda, ну я имел ввиду Intel, они у меня с x86 ассоциируются, вот и глюканул мозг

0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,210
08.01.2013, 22:34 #7
Цитата Сообщение от pepepe Посмотреть сообщение
mov ebp, num
используй ebx как правильно заметили ebp часто работает со стеком в результате при выходе может улететь в космос
1
pepepe
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 3
08.01.2013, 22:44  [ТС] #8
Цитата Сообщение от Kastaneda Посмотреть сообщение
Советую перед началом выполнения ассемблерной вставки сохранять все используемые регистры и восстанавливать их после выполнения нужного кода, это во первых. А во вторых регистр ebp используется для организации стек фрейма, поэтому его вообще менять нельзя. Думаю проблема как раз в этом.

Добавлено через 1 минуту

Ошибка говорит о том, что невозможно прочитать память по адресу 3, а ты в ebp как раз кладешь 3.

Добавлено через 9 минут
Вот нашел хорошую статью на эту тему.
Гениально!!! реально дело в неправильном использовании регистра ebp. его я заменил на ebx и заработало.
Я сейчас делаю курсач, возможно будут ещё вопросы, то мне лучше писать в этой теме или создать другую?

Добавлено через 44 секунды
Цитата Сообщение от ValeryS Посмотреть сообщение
используй ebx как правильно заметили ebp часто работает со стеком в результате при выходе может улететь в космос
да, так и сделал только что.
0
Kastaneda
08.01.2013, 22:47     __asm ошибка Access violation writing location
  #9

Не по теме:

Цитата Сообщение от pepepe Посмотреть сообщение
то мне лучше писать в этой теме или создать другую?
По правилам форума одна тема - один вопрос. Так что лучше новую тему создать, т.к. модераторы все равно это сделают, если здесь напишешь.

1
08.01.2013, 22:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2013, 22:47
Привет! Вот еще темы с ответами:

Ошибка исполнения "Access violation writing location 0x.........."
Здравствуйте! Написал код в MS Visual Studio 2012 64-битной такой код: ...

Ошибка компилятора: "Access violation writing location"
Здравствуйте! Проблема в том что я пишу простой скрипт и у меня всегда вылезает...

Ошибка "Access violation writing location" при работе с массивом.
Задание номер 2 #include &lt;stdio.h&gt; #include &lt;cstdlib&gt; #include &lt;math.h&gt;...

0xC0000005: Access violation writing location 0xFDFDFE11
ошибка, вылетает после запуска программы. Exception thrown at 0x013E1C0A in...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru