Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11

Исправление ошибки в программе

04.02.2013, 14:19. Показов 1317. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здрасьте! Помогите пожалуйста с ошибкой. Программа должна работать, по идее, но она увы вредничает.
Компилирую в ТАСМ5.
Ошибки:
31 строка Illegal Instruction/
97 строка Undefined symbol: mbi
и так далее.
Я себе уже голову сломал, чего только не перепробовал. Ошибка то какая-то мизерная, а осилить не могу.
Код
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
.386
model flat,STDCALL
include win32.inc
extrn   BeginPaint:PROC
extrn   CreateWindowExA:PROC
extrn   DefWindowProcA:PROC
extrn   DispatchMessageA:PROC
extrn   EndPaint:PROC
extrn   ExitProcess:PROC
extrn   GetMessageA:PROC
extrn   GetModuleHandleA:PROC
extrn   LoadCursorA:PROC
extrn   LoadIconA:PROC
extrn   MessageBoxA:PROC
extrn   PostQuitMessage:PROC
extrn   RegisterClassA:PROC
extrn   ShowWindow:PROC
extrn   UpdateWindow:PROC
extrn   SendMessageA:proc
extrn   SetFocus:proc
extrn   GetClientRect:proc
extrn   VirtualQuery:proc
extrn   _wsprintfA:PROC
 
.data
hed dd 0
newhwnd dd 0
lppaint PAINTSTRUCT <?>
msg MSGSTRUCT <?>
wc  WNDCLASS <?>
mbi     MEMORY_BASIC_INFORMATION <?>
vbm dd 400000h
rct RECT <?>
hInst   dd 0
szTitleName db'Карта адресного пространства процесса',0
szClassName db'ASMCLASS32',0
szClassName1 db'edit',0
lpfor   db'Базовый адрес: %#X,Тип: %#X, Состояние: %#X, Размер: %#X, Атриб_защиты: %#X',0
lpstr   db  128 dup (0)
Buffer  db  4096    dup (0)
.code
start: call GetModuleHandleA,0
mov [hInst], eax
reg_class:
mov [wc.clsStyle],CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
mov [wc.clsLpfnWndProc], offset WndProc
mov [wc.clsCbClsExtra], 0
mov [wc.clsCbWndExtra], 0
mov eax, [hInst]
mov [wc.clsHInstance], eax
call LoadIconA,0,IDI_APPLICATION
mov [wc.clsHIcon], eax
call LoadCursorA,0,IDC_ARROW
mov [wc.clsHCursor], eax
mov [wc.clsHbrBackground],COLOR_WINDOW + 1
mov dword ptr [wc.clsLpszMenuName],0
mov dword ptr [wc.clsLpszClassName],offset szClassName
call RegisterClassA,offset wc
call CreateWindowExA,0,offset szClassName,offset szTitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,[hInst],0
mov [newhwnd], eax
call ShowWindow,[newhwnd],SW_SHOWNORMAL
call UpdateWindow,[newhwnd]
msg_loop:
call GetMessageA,offset msg,0,0,0
cmp ax, 0
je end_loop
call DispatchMessageA,offset msg
jmp msg_loop
end_loop:
push [msg.msWPARAM]
call ExitProcess
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
 LOCAL theDC:DWORD
cmp [wmsg], WM_DESTROY
je wmdestroy
cmp [wmsg], WM_SIZE
je wmsize
cmp [wmsg], WM_CREATE
je wmcreate
cmp [wmsg], WM_LBUTTONDOWN
je wmlbuttondown
cmp [wmsg], WM_PAINT
je wmpaint
jmp defwndproc
wmpaint:
mov eax, 0
jmp finish
wmcreate:
call    GetClientRect,[hwnd],offset rct
sub [rct.rcRight],20
sub [rct.rcBottom],20
call    CreateWindowExA,WS_EX_CLIENTEDGE,offset szClassName1,0,WS_VISIBLE or WS_CHILD or ES_LEFT OR ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL,0,0,[rct.rcRight],[rct.rcBottom],[hwnd],0,[hInst],0
mov [hed],eax
mov edi,offset Buffer
cld
qq4:    mov esi,offset lpstr
call VirtualQuery,[vbm],offset mbi,size mbi
call _wsprintfA,offsetlpstr,offset lpfor,[mbi.BaseAddress],[mbi.lType],[mbi.State],[mbi.RegionSize],[mbi.AllocationProtect]
mov ecx,eax
rep movsb
mov [edi],byte ptr 13
inc edi
mov [edi],byte ptr 10
inc edi
mov ebx,[mbi.RegionSize]
add [vbm],ebx
cmp [vbm],7ffff000h
jb qq4
mov [edi],byte ptr 0
call SendMessageA,[hed],WM_SETTEXT,0,offset Buffer
call SetFocus,[hed]
mov eax, 0
jmp finish
defwndproc:
call DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
jmp finish
wmdestroy:
call PostQuitMessage, 0
mov eax, 0
jmp finish
wmlbuttondown:
call SendMessageA,[newhwnd],WM_DESTROY,0,0
mov eax, 0
jmp finish
wmsize:
mov eax, 0
finish:
ret
WndProc endp
public WndProc
 end start
Заранее благодарю от всей души
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.02.2013, 14:19
Ответы с готовыми решениями:

Исправление ошибки
Нужна помощь!!! Наткнулась в нете на код, который подходит к моей задаче. Стала его проверять, а он немного не работает, похоже какая-то...

Исправление ошибки при решении примера (linux nasm)
Привет, Всем) Не могли бы, Вы исправить ошибку в коде nasm (linux) Пример : ((a1+a2)*a3/a4+a5) a1=-7, a2=3, a3=2, a4=4, a5=2 mov...

Исправление ошибки в коде
Помогите исправить ошибку в коде... от этого зависит моя сессия ATMEGA16 Задание и схему устройства прикреплю

11
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.02.2013, 14:27
korg.eg,
скорее всего, описание структуры MEMORY_BASIC_INFORMATION нужно добавить прямо в твой asm-файл, вероятнее всего, эта структура не описана в win32.inc, это ведет к ошибке в строке 31 mbi MEMORY_BASIC_INFORMATION <?> а далее там, где встречается упоминание переменной mbi в строках 97, 98 и 105 будут ошибки "Undefined symbol: mbi"
1
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11
04.02.2013, 14:32  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
korg.eg,
скорее всего, описание структуры MEMORY_BASIC_INFORMATION нужно добавить прямо в твой asm-файл, вероятнее всего, эта структура не описана в win32.inc, это ведет за собой ошибку в строке 31 mbi MEMORY_BASIC_INFORMATION <?> а далее там, где встречается упоминание переменной mbi в строках 97, 98 и 105 будут ошибки "Undefined symbol: mbi"
Было такое предположение и даже пытался забить описание структуры в файл, но тоже не взлетело. Скорее всего вбивал не туда и возможно не то, что нужно.
Вот описание структуры, которое я пробовал подружить со своим кодом, но увы....
Если не затруднит - помогите пожалуйста!
Assembler
1
2
3
4
5
6
7
8
9
struct  MEMORY_BASIC_INFORMATION
        BaseAddress          dd ?
        AllocationBase       dd ?
        AllocationProtect    dd ?
        RegionSize           dd ?
        State                dd ?
        Protect              dd ?
        Type                 dd ?
ends
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.02.2013, 14:32
Assembler
1
2
3
4
5
6
7
8
9
MEMORY_BASIC_INFORMATION STRUCT
  BaseAddress       DWORD      ?
  AllocationBase    DWORD      ?
  AllocationProtect DWORD      ?
  RegionSize        DWORD      ?
  State             DWORD      ?
  Protect           DWORD      ?
  lType             DWORD      ?
MEMORY_BASIC_INFORMATION ENDS
компилятор ругнется на переменную Type поэтому ее лучше переименовать, у меня описание структуры из масма -- в тасме может быть по другому
1
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11
04.02.2013, 14:35  [ТС]
А в какой строке вписать лучше?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.02.2013, 14:35
сразу после include win32.inc и в строке нужна точка .model flat,STDCALL
1
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11
04.02.2013, 14:56  [ТС]
все равно ругается зараза!
как не пробовал поменять описание структуры
0
 Аватар для bomz
64 / 64 / 0
Регистрация: 06.10.2011
Сообщений: 299
04.02.2013, 15:41
переходи на масм32. твой код начал править как увидел, что все в ручную прописано мне аж поплохело. тасм5 устарел

.386

.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\user32.inc
include \MASM32\INCLUDE\kernel32.inc
includelib \MASM32\LIB\user32.lib
includelib \MASM32\LIB\kernel32.lib

.data
mestitle db "MASM рулить",0
form db "EAX: %010hu", 0

.data?
buffer db 512 dup(?)

.code
start:
mov eax, -1
invoke wsprintf,ADDR buffer,ADDR form,eax
invoke MessageBox,0,ADDR buffer,ADDR mestitle,MB_ICONASTERISK
invoke ExitProcess,0
end start
Добавлено через 7 минут
ну не то что устарел. есть более поздние тасмы, причем это вообще платный проект. а если ты особо еще в него не углубился то сейчас легко перейти и масм бесплатный
1
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11
04.02.2013, 16:19  [ТС]
Установил МАСМ, если под него подгонять этот код -многое менять придется?
Что успел сделать - ошибок пока не выдавало на операцию "Assemble ASM file"
Дальше ничего не получается! Какова последовательность дальнейших действий?
Еще такое ощущение, что библиотеки вообще не подключил! Какие надо - хз(((
Вот нынешний код в МАСМе
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
.386
.model flat,STDCALL
include win32.inc
 
MEMORY_BASIC_INFORMATION STRUCT
  BaseAddress       DWORD      ?
  AllocationBase    DWORD      ?
  AllocationProtect DWORD      ?
  RegionSize        DWORD      ?
  State             DWORD      ?
  Protect           DWORD      ?
  lType             DWORD      ?
MEMORY_BASIC_INFORMATION ENDS
extrn   BeginPaint:PROC
extrn   CreateWindowExA:PROC
extrn   DefWindowProcA:PROC
extrn   DispatchMessageA:PROC
extrn   EndPaint:PROC
extrn   ExitProcess:PROC
extrn   GetMessageA:PROC
extrn   GetModuleHandleA:PROC
extrn   LoadCursorA:PROC
extrn   LoadIconA:PROC
extrn   MessageBoxA:PROC
extrn   PostQuitMessage:PROC
extrn   RegisterClassA:PROC
extrn   ShowWindow:PROC
extrn   UpdateWindow:PROC
extrn   SendMessageA:proc
extrn   SetFocus:proc
extrn   GetClientRect:proc
extrn   VirtualQuery:proc
extrn   _wsprintfA:PROC
 
.data
hed dd 0
newhwnd dd 0
lppaint PAINTSTRUCT <?>
msg MSGSTRUCT <?>
wc  WNDCLASS <?>
mbi     MEMORY_BASIC_INFORMATION <?>
vbm dd 400000h
rct RECT <?>
hInst   dd 0
szTitleName db'Карта адресного пространства процесса',0
szClassName db'ASMCLASS32',0
szClassName1 db'edit',0
lpfor   db'Базовый адрес: %#X,Тип: %#X, Состояние: %#X, Размер: %#X, Атриб_защиты: %#X',0
lpstr   db  128 dup (0)
Buffer  db  4096    dup (0)
.code
start:
push 0
call GetModuleHandleA
mov [hInst], eax
reg_class:
mov [wc.clsStyle],CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
mov [wc.clsLpfnWndProc], offset WndProc
mov [wc.clsCbClsExtra], 0
mov [wc.clsCbWndExtra], 0
mov eax, [hInst]
mov [wc.clsHInstance], eax
push 0
push IDI_APPLICATION
call LoadIconA
mov [wc.clsHIcon], eax
push 0
push IDC_ARROW
call LoadCursorA
mov [wc.clsHCursor], eax
mov [wc.clsHbrBackground],COLOR_WINDOW + 1
mov dword ptr [wc.clsLpszMenuName],0
mov dword ptr [wc.clsLpszClassName],offset szClassName
push offset wc
call RegisterClassA
push 0
push offset szClassName
push offset szTitleName
push WS_OVERLAPPEDWINDOW
push CW_USEDEFAULT
push CW_USEDEFAULT
push CW_USEDEFAULT
push CW_USEDEFAULT
push 0
push 0
push [hInst]
push 0
call CreateWindowExA
mov [newhwnd], eax
push [newhwnd]
push SW_SHOWNORMAL
call ShowWindow
push [newhwnd]
call UpdateWindow
msg_loop:
push offset msg
push 0
push 0
push 0
call GetMessageA
cmp ax, 0
je end_loop
push offset msg
call DispatchMessageA
jmp msg_loop
end_loop:
push [msg.msWPARAM]
call ExitProcess
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
 LOCAL theDC:DWORD
cmp [wmsg], WM_DESTROY
je wmdestroy
cmp [wmsg], WM_SIZE
je wmsize
cmp [wmsg], WM_CREATE
je wmcreate
cmp [wmsg], WM_LBUTTONDOWN
je wmlbuttondown
cmp [wmsg], WM_PAINT
je wmpaint
jmp defwndproc
wmpaint:
mov eax, 0
jmp finish
wmcreate:
push [hwnd]
push offset rct
call    GetClientRect
sub [rct.rcRight],20
sub [rct.rcBottom],20
push WS_EX_CLIENTEDGE 
push offset szClassName1
push 0 
push WS_VISIBLE or WS_CHILD or ES_LEFT OR ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL 
push 0 
push 0 
push [rct.rcRight] 
push [rct.rcBottom] 
push [hwnd] 
push 0 
push [hInst] 
push 0
call    CreateWindowExA
mov [hed],eax
mov edi,offset Buffer
cld
qq4:    mov esi,offset lpstr
push [vbm] 
push offset mbi
push size mbi
call VirtualQuery
push offset lpstr 
push offset lpfor 
push [mbi.BaseAddress]
push [mbi.lType] 
push [mbi.State]
push [mbi.RegionSize]
push [mbi.AllocationProtect]
call _wsprintfA
mov ecx,eax
rep movsb
mov [edi],byte ptr 13
inc edi
mov [edi],byte ptr 10
inc edi
mov ebx,[mbi.RegionSize]
add [vbm],ebx
cmp [vbm],7ffff000h
jb qq4
mov [edi],byte ptr 0
push [hed]
push WM_SETTEXT 
push 0
push offset Buffer
call SendMessageA
push [hed]
call SetFocus 
mov eax, 0
jmp finish
defwndproc:
push [hwnd]
push [wmsg]
push [wparam]
push [lparam]
call DefWindowProcA
jmp finish
wmdestroy:
push 0
call PostQuitMessage
mov eax, 0
jmp finish
wmlbuttondown:
push [newhwnd]
push WM_DESTROY
push 0
push 0
call SendMessageA
mov eax, 0
jmp finish
wmsize:
mov eax, 0
finish:
ret
WndProc endp
public WndProc
 end start
0
 Аватар для Vadimych
639 / 482 / 12
Регистрация: 10.01.2011
Сообщений: 1,045
04.02.2013, 17:43
korg.eg, буфер был маловат. Ну и исправил ещё по мелочам.

Кликните здесь для просмотра всего текста
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
.386
.model flat,STDCALL
option casemap:none
 
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
hed dd 0
newhwnd dd 0
lppaint PAINTSTRUCT <?>
msg MSG <?>
wc  WNDCLASS <?>
mbi     MEMORY_BASIC_INFORMATION <?>
vbm dd 400000h
rct RECT <?>
hInst   dd 0
szTitleName db'Карта адресного пространства процесса',0
szClassName db'ASMCLASS32',0
szClassName1 db'edit',0
lpfor   db'Базовый адрес: %#X,Тип: %#X, Состояние: %#X, Размер: %#X, Атриб_защиты: %#X',0
lpstr   db  128 dup (0)
Buffer  db  8096    dup (0)
.code
start:
push 0
call GetModuleHandleA
mov [hInst], eax
reg_class:
mov [wc.style],CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS
mov [wc.lpfnWndProc], offset WndProc
mov [wc.cbClsExtra], 0
mov [wc.cbWndExtra], 0
mov eax, [hInst]
mov [wc.hInstance], eax
push IDI_APPLICATION
push 0
call LoadIconA
mov [wc.hIcon], eax
push IDC_ARROW
push 0
call LoadCursorA
mov [wc.hCursor], eax
mov [wc.hbrBackground],COLOR_WINDOW + 1
mov dword ptr [wc.lpszMenuName],0
mov dword ptr [wc.lpszClassName],offset szClassName
 
push offset wc
call RegisterClassA
 
push 0
push [hInst]
push 0
push 0
push CW_USEDEFAULT
push CW_USEDEFAULT
push CW_USEDEFAULT
push CW_USEDEFAULT
push WS_OVERLAPPEDWINDOW
push offset szTitleName
push offset szClassName
push 0;WS_EX_CLIENTEDGE
call CreateWindowExA
mov [newhwnd], eax
push SW_SHOWNORMAL
push [newhwnd]
call ShowWindow
push [newhwnd]
call UpdateWindow
msg_loop:
push 0
push 0
push 0
push offset msg
call GetMessageA
cmp ax, 0
je end_loop
push offset msg
call DispatchMessageA
jmp msg_loop
end_loop:
push [msg.wParam]
call ExitProcess
 
WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
 LOCAL theDC:DWORD
cmp [wmsg], WM_DESTROY
je wmdestroy
cmp [wmsg], WM_SIZE
je wmsize
cmp [wmsg], WM_CREATE
je wmcreate
cmp [wmsg], WM_LBUTTONDOWN
je wmlbuttondown
cmp [wmsg], WM_PAINT
je wmpaint
jmp defwndproc
wmpaint:
mov eax, 0
jmp finish
wmcreate:
push offset rct
push [hwnd] 
call    GetClientRect
 
push 0 
push [hInst] 
push 0 
push [hwnd] 
push [rct.bottom] 
push [rct.right] 
push 0
push 0
push WS_VISIBLE or WS_CHILD or ES_LEFT OR ES_MULTILINE or WS_HSCROLL or WS_VSCROLL
push 0
push offset szClassName1
push WS_EX_CLIENTEDGE 
call    CreateWindowExA
mov [hed],eax
mov edi,offset Buffer
cld
qq4:    mov esi,offset lpstr
 
push size mbi
push offset mbi
push [vbm] 
call VirtualQuery
push [mbi.AllocationProtect]
push [mbi.RegionSize]
push [mbi.State]
push [mbi.lType] 
push [mbi.BaseAddress]
push offset lpfor 
push offset lpstr 
call wsprintfA
mov ecx,eax
rep movsb 
mov [edi],byte ptr 13
inc edi
mov [edi],byte ptr 10
inc edi
mov ebx,[mbi.RegionSize]
add [vbm],ebx
cmp [vbm],7ffff000h
jb qq4
mov [edi],byte ptr 0
push offset Buffer
push 0
push WM_SETTEXT 
push [hed]
call SendMessageA
push [hed]
call SetFocus 
mov eax, 0
jmp finish
defwndproc:
push [lparam]
push [wparam]
push [wmsg]
push [hwnd]
call DefWindowProcA
jmp finish
wmdestroy:
push 0
call PostQuitMessage
mov eax, 0
jmp finish
wmlbuttondown:
push 0
push 0
push WM_DESTROY
push [newhwnd]
call SendMessageA
mov eax, 0
jmp finish
wmsize:
mov eax, 0
finish:
ret
WndProc endp
end start
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16372 / 7684 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
05.02.2013, 10:32
мой вариант
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
; masm windows gui #
.686
.model flat
include windows.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
extern _imp__RegisterClassA@4:dword
extern _imp__CreateWindowExA@48:dword
extern _imp__GetMessageA@16:dword
extern _imp__DispatchMessageA@4:dword
extern _imp__ExitProcess@4:dword
extern _imp__DefWindowProcA@16:dword
extern _imp__GetClientRect@8:dword
extern _imp__VirtualQuery@12:dword
extern _imp__wsprintfA:dword
extern _imp__SendMessageA@16:dword
extern _imp__SetFocus@4:dword
 
.code
start:  xor ebx,ebx
    mov edi,offset szTitleName
        mov esi,400000h
    push edi;lpszClassName
    push ebx;lpszMenuName
    push COLOR_WINDOW + 1;hbrBackground
    push 10011h;hCursor
    push ebx;hIcon
    push esi;hInstance
    push ebx;cbClsExtra
    push ebx;cbWndExtra
    push offset WndProc;lpfnWndProc
    push CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS;style
    push esp;offset wc
    call _imp__RegisterClassA@4
 
    push ebx
    push esi;[hInst]
    shl esi,9
    push ebx
    push ebx
    push esi;CW_USEDEFAULT
    push esi;CW_USEDEFAULT
    push esi;CW_USEDEFAULT
    push esi;CW_USEDEFAULT
    push WS_OVERLAPPEDWINDOW+ WS_VISIBLE
    push edi;offset szTitleName
    push edi;offset szClassName
    push ebx;WS_EX_CLIENTEDGE
    call _imp__CreateWindowExA@48
    mov ebp,esp
msg_loop:push ebx
    push ebx
    push ebx
    push ebp;offset msg
    call _imp__GetMessageA@16
    push ebp;offset msg
    call _imp__DispatchMessageA@4
    jmp msg_loop
 
 
WndProc proc hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD
    LOCAL rct:RECT
    LOCAL Buffer[11000]:BYTE
    LOCAL lpstr[128]:byte
    LOCAL mbi:MEMORY_BASIC_INFORMATION
    LOCAL hed:DWORD
 
    mov eax,wmsg
    dec eax;cmp eax,WM_CREATE=1
    je wmcreate
    dec eax;cmp eax,WM_DESTROY=2
    je wmdestroy
    leave
    jmp _imp__DefWindowProcA@16
wmdestroy:push ebx
    call _imp__ExitProcess@4
wmcreate:lea esi,rct
    assume esi: ptr RECT
    push esi
    push hwnd 
    call _imp__GetClientRect@8 
    push ebx 
    push 400000h
    push ebx
    push hwnd 
    push [esi].bottom
    push [esi].right
    assume esi: nothing
    push ebx
    push ebx
    push WS_VISIBLE or WS_CHILD or ES_LEFT OR ES_MULTILINE or WS_HSCROLL or WS_VSCROLL
    push ebx
    push offset szClassName1
    push WS_EX_CLIENTEDGE 
    call _imp__CreateWindowExA@48
    mov hed,eax
    lea edi,Buffer
    push ebx
    lea ebx,mbi
    assume ebx: ptr MEMORY_BASIC_INFORMATION
@@:    lea esi,lpstr 
    push size mbi
    push ebx
    push vbm 
    call _imp__VirtualQuery@12
    push [ebx].AllocationProtect
    push [ebx].RegionSize
    push [ebx].State
    push [ebx].lType
    push [ebx].BaseAddress
    push offset lpfor 
    push esi;&lpstr 
    call _imp__wsprintfA
    add esp,7*4
    mov ecx,eax
    rep movsb 
    mov [edi],word ptr 0A0Dh
    add edi,2
    mov edx,[ebx].RegionSize
    add vbm,edx
    cmp vbm,7FFFF000h
    jb @b
    pop ebx
    assume ebx: nothing
    mov [edi],ebx
    lea eax,Buffer
    push eax;Buffer
    push ebx
    push WM_SETTEXT 
    push hed
    call _imp__SendMessageA@16
    push hed
    call _imp__SetFocus@4
finish: ret
WndProc endp
.data
vbm dd 400000h
szTitleName db'Карта адресного пространства процесса',0
szClassName1 db'edit',0
lpfor   db'Базовый адрес: %#x,Тип: %#x, Состояние: %#x, Размер: %#x, Атрибут защиты: %#x',0
end start
1
0 / 0 / 0
Регистрация: 26.01.2011
Сообщений: 11
08.02.2013, 09:30  [ТС]
Всем огромное спасибо за помощь и участие!
В итоге эпопея с программой завершилась тем, что попытки показать код под masm были отвергнуты, а первоначальный код был поправлен преподавателем и мне был вручен файл win32.inc с уже описанной в нем структурой mbi.
Еще раз большущее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2013, 09:30
Помогаю со студенческими работами здесь

Исправление ошибки на DEBUG
Предположим, введена такая команда DEBUG: Е CS:100 B8 45 01 05 25 00 Значение 45 на самом деле должно было быть 54. какую надо ввести...

Вычисление полинома по схеме Горнера (исправление ошибки)
Помогите исправить ошибку. При отрицательном x программа считает неправильно. При заданных параметрах ассемблер выдает 995917 ...

Найти ошибки в данной программе (известно что есть только 2 ошибки)
У меня в модуле с програмирования задание: Найти ошибки в данной программе (известно что есть только 2 ошибки) .model small .data ...

Исправление ошибки в программе вычисления CRC16
Добрый день! Возникла проблема с кодом, код реализует окно с кнопкой для выбора файла,из файла берутся данные, данные прогоняются по...

Исправление ошибки в программе
uses crt; const n=3; type type_knig=(gaz,jur,kniga); opisanie=record avtor,nazvanie:string; god:integer; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru