Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
krasnodar_94
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 4
1

Выходит ошибка Необработанное исключение в "0x0007102f" в "Lab08.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00078000". Как исправить

26.05.2013, 11:47. Просмотров 836. Ответов 3
Метки нет (Все метки)

Assembler
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
.586
.model flat, stdcall
option casemap :none ; case sensitive
; Раздел подключения библиотек
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
; Сегмент данных
.data
x dd 5
src db "ABC "
dst db 20 dup(" ")
; Сегмент кода
.code
main:
xor EAX, EAX
xor EBX, EBX
xor EDX, EDX
xor EDI, EDI
 
lea ESI, src
mov EDX, x
copy proc
copying:
lea EDI, dst
mov ECX, 4
rep movsb
dec EDX
mov ECX, EDX
loop copying
copy endp
call copy
 
mov AL, " "
mov ECX, 14h
xor EDI, EDI
xor ESI, ESI
lea EDI, dst
 
check:
scasb
je found
loop check
jmp cont
 
found:
inc ESI
loop check
 
cont:
dec ESI
mov EAX, ESI
 
quit:
mov eax, 0
invoke ExitProcess, eax
end main
Ошибка выходит

Необработанное исключение в "0x0007102f" в "Lab08.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00078000".
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 11:47
Ответы с готовыми решениями:

Как исправить ошибку "warning LNK4089: all references to "winmm.dll" discarded by /OPT:REF"
В данном коде выдает ошибку "warning LNK4089: all references to "winmm.dll"...

Из двух строк "ABCDE" и "12345" сделать одну - "A1*B2*C3*D4*E5"
Нужно из двух строк ‘ABCDE’ и ‘12345’ сделать одну - ‘A1*B2*C3*D4*E5’....

Даны числа "x" и "z", если их сумма кратна 3, то вывести "1", если нет, то 0
Даны числа "x" и "z", если их сумма кратна 3, то вывести "1", если нет, то 0.

В словах, которые имеют окончание "ing", сделать замену "ing" на "ed"
Задан текст. Группы символов, разделённые пробелами (одним или несколькими) и...

Быстро определить, совпадает ли "строка" хотя бы с одной "строкой" из двух наборов
Строки не текстовые. Это просто какая-то последовательность из 32-х байт. Есть...

3
Charles Kludge
Клюг
7645 / 3160 / 382
Регистрация: 03.05.2011
Сообщений: 8,382
26.05.2013, 15:39 2
Ну как-то так:
Assembler
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
.586
.model  flat, stdcall
option  casemap :none       ; case sensitive
; Раздел подключения библиотек
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\msvcrt.inc
includelib  \masm32\lib\msvcrt.lib
includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\user32.lib
; Сегмент данных
.data
    x   dd 5
    src db "ABC "
    dst db 20 dup(" "),0
; Сегмент кода
.code
main:
    xor EAX, EAX
    xor EBX, EBX
    xor EDX, EDX
    xor EDI, EDI
 
    lea ESI, src
    lodsd
    mov EcX, x
    lea EDI, dst
    rep stosd
;call copy
 
    mov AL, " "
    mov ECX, 14h
    xor EDI, EDI
    xor ESI, ESI
    lea EDI, dst
 
check:
    scasb
    je  found
    loop    check
    jmp cont
 
found:
    inc ESI
    loop    check
 
cont:
    dec ESI
    mov EAX, ESI
 
quit:
    invoke  crt_puts, ADDR dst
    mov eax, 0
    invoke  ExitProcess, eax
    copy    proc
copying:
    lea EDI, dst
    mov ECX, 4
    stosd
    dec EDX
    mov ECX, EDX
    loop    copying
    copy    endp
    end main
0
Mikl___
Автор FAQ
11987 / 6254 / 596
Регистрация: 11.11.2010
Сообщений: 11,317
26.05.2013, 15:52 3
krasnodar_94,
ошибка вот в чем, тело процедуры располагают в таком месте, где на них не может быть передано управление, кроме как командой CALL смотрим что у тебя
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
xor EAX, EAX <-- обнулили EAX
xor EBX, EBX <-- обнулили EBX
xor EDX, EDX <-- обнулили EDX
xor EDI, EDI <-- обнулили EDI
 
lea ESI, src<-- загрузили адрес src
mov EDX, x<-- EDX = x
copy proc
copying: <-- а вот здесь началось самопроизвольное выполнение процедуры сору
lea EDI, dst
mov ECX, 4 
rep movsb
dec EDX
mov ECX, EDX
loop copying
copy endp
call copy <-- снова выполняем процедуру сору
помести процедуру сору перед строкой "end main"
0
krasnodar_94
0 / 0 / 0
Регистрация: 12.05.2013
Сообщений: 4
26.05.2013, 17:09  [ТС] 4
Спасибо большое, вы мне помогли) Век не забуду)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2013, 17:09

В заданном тексте после первого двоеточия надо поменять символ "+" на цифру "3"
в тексте после превый двоеточий + еще необходимо заменить их на 3

Просмотр битовой строки и замена всех имеющиеся последовательностей "111" на "000"
Здравствуйте! Нашёл по своей теме программу, но она что то не работает. Что...

Заменить в строке группу символов "123" на "!", результат вывести на экран
Помогите решить задачу. Ввести с клавиатуры строку. Заменить группу символов &quot;...


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

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

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