Subversion Repositories Kolibri OS

Rev

Rev 1269 | Rev 4285 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1269 Rev 3675
Line 8... Line 8...
8
	dd	used_mem
8
        dd      used_mem
9
	dd	used_mem
9
        dd      used_mem
10
	dd	i_param
10
        dd      i_param
11
	dd	0
11
        dd      0
Line 12... Line -...
12
 
-
 
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
14
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; GUI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
12
 
Line 15... Line -...
15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
16
 
13
;-----------------------------------------------------------------------------
17
data_width equ 80
-
 
18
data_x_pos equ 12
-
 
19
data_x_size equ data_width*6
14
 
20
 
15
REG_MODE_CPU equ 1
21
title_x_pos equ 30
-
 
22
title_y_pos equ 32
-
 
23
title_y_size equ 10
-
 
24
 
-
 
25
registers_x_pos equ data_x_pos
-
 
26
registers_y_pos equ (title_y_pos + title_y_size)
-
 
27
registers_y_size equ 30
-
 
28
 
16
REG_MODE_MMX equ 2
29
dump_y_pos equ (registers_y_pos + registers_y_size + 5)
-
 
30
dump_height equ 4
-
 
31
dump_y_size equ (dump_height*10)
-
 
32
 
-
 
33
disasm_y_pos equ (dump_y_pos + dump_y_size + 4)
-
 
34
disasm_height equ 16
17
REG_MODE_SSE equ 3
35
disasm_y_size equ (disasm_height*10)
-
 
36
 
-
 
37
messages_width equ data_width
-
 
38
messages_height equ 12
18
REG_MODE_AVX equ 4
39
messages_x_pos equ data_x_pos
-
 
40
messages_y_pos equ (disasm_y_pos + disasm_y_size + 4)
-
 
41
messages_x_size equ messages_width*6
19
 
42
messages_y_size equ messages_height*10
-
 
43
 
-
 
44
cmdline_width equ data_width
-
 
45
cmdline_x_pos equ data_x_pos
20
;-----------------------------------------------------------------------------
46
cmdline_y_pos equ (messages_y_pos + messages_y_size + 10)
-
 
47
cmdline_x_size equ messages_x_size
21
 
48
cmdline_y_size equ 10
-
 
49
 
22
include 'gui.inc' ; GUI routines
50
wnd_x_size equ (data_x_pos + messages_x_size + data_x_pos)
-
 
51
wnd_y_size equ (cmdline_y_pos + cmdline_y_size + data_x_pos)
-
 
52
 
-
 
53
start:
-
 
54
	mcall	68, 11
-
 
55
	mov	edi, messages
-
 
56
	mov	ecx, messages_width*messages_height
-
 
57
	mov	al, ' '
-
 
58
	rep	stosb
-
 
59
	xor	eax, eax
-
 
60
	mov	[messages_pos], eax
-
 
61
	mov	[cmdline_len], eax
-
 
62
	mov	[cmdline_pos], eax
-
 
63
	mov	edi, needzerostart
-
 
64
	mov	ecx, (needzeroend-needzerostart+3)/4
-
 
65
	rep	stosd
-
 
66
	mov	esi, begin_str
-
 
67
	call	put_message_nodraw
-
 
68
; set event mask - default events and debugging events
-
 
69
	push	40
-
 
70
	pop	eax
-
 
71
	mov	ebx, 0x107
-
 
72
	mcall
-
 
73
; set debug messages buffer
-
 
74
	mov	ecx, dbgbufsize
-
 
75
	mov	dword [ecx], 256
-
 
76
	xor	ebx, ebx
-
 
77
	mov	[ecx+4], ebx
-
 
78
	mov	al, 69
-
 
79
	mcall
-
 
80
	mov	esi, i_param
-
 
81
	call	skip_spaces
-
 
82
	test	al, al
-
 
83
	jz	dodraw
-
 
84
	push	esi
-
 
85
	call	draw_window
-
 
86
	pop	esi
-
 
87
	call	OnLoadInit
-
 
88
	jmp	waitevent
-
 
89
dodraw:
-
 
90
	call	draw_window
-
 
91
waitevent:
-
 
92
	push	10
-
 
93
	pop	eax
-
 
94
	mcall
-
 
95
	cmp	al, 9
-
 
96
	jz	debugmsg
-
 
97
	dec	eax
-
 
98
	jz	dodraw
-
 
99
	dec	eax
-
 
100
	jz	keypressed
-
 
101
	dec	eax
-
 
102
	jnz	waitevent
-
 
103
; button pressed - we have only one button (close)
-
 
104
	push	-1
-
 
105
	pop	eax
-
 
106
	mcall
-
 
107
keypressed:
-
 
108
	mov	al, 2
-
 
109
	mcall
-
 
110
	shr	eax, 8
-
 
111
	cmp	al, 8
-
 
112
	jz	.backspace
-
 
113
	cmp	al, 0xB0
-
 
114
	jz	.left
-
 
115
	cmp	al, 0xB3
-
 
116
	jz	.right
-
 
117
	cmp	al, 0x0D
-
 
118
	jz	.enter
-
 
119
	cmp	al, 0xB6
-
 
120
	jz	.del
-
 
121
	cmp	al, 0xB4
-
 
122
	jz	.home
-
 
123
	cmp	al, 0xB5
-
 
124
	jz	.end
-
 
125
	cmp	al, 0xB1
-
 
126
	jz	.down
-
 
127
	cmp	al, 0xB2
-
 
128
	jz	.up
-
 
129
	cmp	al, 0xD8
-
 
130
	jz	CtrlF7
-
 
131
	cmp	al, 0xD9
-
 
132
	jz	CtrlF8
-
 
133
	cmp	[cmdline_len], cmdline_width
-
 
134
	jae	waitevent
-
 
135
	push	eax
-
 
136
	call	clear_cmdline_end
-
 
137
	pop	eax
-
 
138
	mov	edi, cmdline
-
 
139
	mov	ecx, [cmdline_len]
-
 
140
	add	edi, ecx
-
 
141
	lea	esi, [edi-1]
-
 
142
	sub	ecx, [cmdline_pos]
-
 
143
	std
-
 
144
	rep	movsb
-
 
145
	cld
-
 
146
	stosb
-
 
147
	inc	[cmdline_len]
-
 
148
	call	draw_cmdline_end
-
 
149
	inc	[cmdline_pos]
-
 
150
	call	draw_cursor
-
 
151
	jmp	waitevent
-
 
152
.backspace:
-
 
153
	cmp	[cmdline_pos], 0
-
 
154
	jz	waitevent
-
 
155
	dec	[cmdline_pos]
-
 
156
.delchar:
-
 
157
	call	clear_cmdline_end
-
 
158
	mov	edi, [cmdline_pos]
-
 
159
	dec	[cmdline_len]
-
 
160
	mov	ecx, [cmdline_len]
-
 
161
	sub	ecx, edi
-
 
162
	add	edi, cmdline
-
 
163
	lea	esi, [edi+1]
-
 
164
	rep	movsb
-
 
165
	call	draw_cmdline_end
-
 
166
	call	draw_cursor
-
 
167
	jmp	waitevent
-
 
168
.del:
-
 
169
	mov	eax, [cmdline_pos]
-
 
170
	cmp	eax, [cmdline_len]
-
 
171
	jae	waitevent
-
 
172
	jmp	.delchar
-
 
173
.left:
-
 
174
	cmp	[cmdline_pos], 0
-
 
175
	jz	waitevent
-
 
176
	call	hide_cursor
-
 
177
	dec	[cmdline_pos]
-
 
178
	call	draw_cursor
-
 
179
	jmp	waitevent
-
 
180
.right:
-
 
181
	mov	eax, [cmdline_pos]
-
 
182
	cmp	eax, [cmdline_len]
-
 
183
	jae	waitevent
-
 
184
	call	hide_cursor
-
 
185
	inc	[cmdline_pos]
-
 
186
	call	draw_cursor
-
 
187
	jmp	waitevent
-
 
188
.home:
-
 
189
	call	hide_cursor
-
 
190
	and	[cmdline_pos], 0
-
 
191
	call	draw_cursor
-
 
192
	jmp	waitevent
-
 
193
.end:
-
 
194
	call	hide_cursor
-
 
195
	mov	eax, [cmdline_len]
-
 
196
	mov	[cmdline_pos], eax
-
 
197
	call	draw_cursor
-
 
198
.up:
-
 
199
.down:
-
 
200
	jmp	waitevent
-
 
201
.enter:
-
 
202
	mov	ecx, [cmdline_len]
-
 
203
	test	ecx, ecx
-
 
204
	jz	waitevent
-
 
205
	mov	esi, cmdline
-
 
206
	mov	byte [esi+ecx], 0
-
 
207
	and	[cmdline_pos], 0
-
 
208
	push	esi
-
 
209
	call	clear_cmdline_end
-
 
210
	call	draw_cursor
-
 
211
	pop	esi
-
 
212
	and	[cmdline_len], 0
-
 
213
; skip leading spaces
-
 
214
	call	skip_spaces
-
 
215
	cmp	al, 0
-
 
216
	jz	waitevent
-
 
217
; now esi points to command
-
 
218
	push	esi
-
 
219
	mov	esi, prompt
-
 
220
	call	put_message_nodraw
-
 
221
	pop	esi
-
 
222
	push	esi
-
 
223
	call	put_message_nodraw
-
 
224
z1:	mov	esi, newline
-
 
225
	call	put_message
-
 
226
	pop	esi
-
 
227
	push	esi
-
 
228
	call	get_arg
-
 
229
	mov	[curarg], esi
-
 
230
	pop	edi
-
 
231
	mov	esi, commands
-
 
232
	call	find_cmd
-
 
233
	mov	eax, aUnknownCommand
-
 
234
	jc	.x11
-
 
235
; check command requirements
-
 
236
; flags field:
-
 
237
; &1: command may be called without parameters
-
 
238
; &2: command may be called with parameters
23
 
239
; &4: command may be called without loaded program
-
 
240
; &8: command may be called with loaded program
-
 
241
	mov	eax, [esi+8]
-
 
242
	mov	ecx, [curarg]
-
 
243
	cmp	byte [ecx], 0
-
 
244
	jz	.noargs
-
 
245
	test	byte [esi+16], 2
-
 
246
	jz	.x11
-
 
247
	jmp	@f
-
 
248
.noargs:
-
 
249
	test	byte [esi+16], 1
-
 
250
	jz	.x11
-
 
251
@@:
-
 
252
	cmp	[debuggee_pid], 0
-
 
253
	jz	.nodebuggee
-
 
254
	mov	eax, aAlreadyLoaded
-
 
255
	test	byte [esi+16], 8
-
 
256
	jz	.x11
-
 
257
	jmp	.x9
-
 
258
.nodebuggee:
-
 
259
	mov	eax, need_debuggee
-
 
260
	test	byte [esi+16], 4
-
 
261
	jnz	.x9
-
 
262
.x11:
-
 
263
	xchg	esi, eax
-
 
264
	call	put_message
-
 
265
.x10:
-
 
266
	jmp	waitevent
-
 
267
.x9:
-
 
Line 268... Line 24...
268
	call	dword [esi+4]
24
;-----------------------------------------------------------------------------
269
	jmp	.x10
25
;                          Find command in list
270
 
26
 
-
 
27
find_cmd:
271
find_cmd:
28
; all commands are case-insensitive
272
; all commands are case-insensitive
29
        push    edi
273
	push	edi
30
 
274
.x4:
31
    .x4:
275
	mov	al, [edi]
32
        mov     al, [edi]
276
	cmp	al, 0
33
        cmp     al, 0
277
	jz	.x5
34
        jz      .x5
278
	cmp	al, 'A'
35
        cmp     al, 'A'
279
	jb	@f
36
        jb      @f
-
 
37
        cmp     al, 'Z'
280
	cmp	al, 'Z'
38
        ja      @f
281
	ja	@f
39
        or      al, 20h
282
	or	al, 20h
40
 
283
@@:
41
    @@:
284
	stosb
42
        stosb
-
 
43
        jmp     .x4
285
	jmp	.x4
44
 
-
 
45
    ; find command
286
.x5:
46
    .x5:
287
; find command
47
        pop     edi
288
	pop	edi
48
 
289
.x6:
49
    .x6:
290
	cmp	dword [esi], 0
50
        cmp     dword [esi], 0
Line 298... Line 58...
298
	pop	edi
58
        pop     edi
299
	pop	esi
59
        pop     esi
300
	jz	.x8
60
        jz      .x8
301
	add	esi, 17
61
        add     esi, 17
302
	jmp	.x6
62
        jmp     .x6
-
 
63
 
303
.x7:
64
    .x7:
304
	stc
65
        stc
305
.x8:
-
 
306
	ret
-
 
307
 
-
 
308
get_arg:
-
 
309
	lodsb
-
 
310
	cmp	al, ' '
-
 
311
	ja	get_arg
-
 
312
	mov	byte [esi-1], 0
-
 
313
	cmp	al, 0
-
 
314
	jnz	skip_spaces
-
 
315
	dec	esi
-
 
316
skip_spaces:
-
 
317
	lodsb
-
 
318
	cmp	al, 0
-
 
319
	jz	@f
-
 
320
	cmp	al, ' '
-
 
321
	jbe	skip_spaces
-
 
322
@@:	dec	esi
-
 
323
	ret
-
 
324
 
-
 
325
clear_cmdline_end:
-
 
326
	mov	ebx, [cmdline_pos]
-
 
327
	mov	ecx, [cmdline_len]
-
 
328
	sub	ecx, ebx
-
 
329
	push	13
-
 
330
	pop	eax
-
 
331
	imul	ebx, 6
-
 
332
	imul	ecx, 6
-
 
333
	inc	ecx
-
 
334
	add	ebx, cmdline_x_pos
-
 
335
	shl	ebx, 16
-
 
336
	or	ebx, ecx
-
 
337
	mov	ecx, cmdline_y_pos*10000h + cmdline_y_size
-
 
338
	mov	edx, 0xFFFFFF
-
 
339
	mcall
-
 
340
	ret
-
 
341
 
-
 
342
draw_cmdline:
-
 
343
	xor	ebx, ebx
-
 
344
	jmp	@f
-
 
345
draw_cmdline_end:
-
 
346
	mov	ebx, [cmdline_pos]
-
 
347
@@:
-
 
348
	mov	esi, [cmdline_len]
-
 
349
	sub	esi, ebx
-
 
350
	push	4
-
 
351
	pop	eax
-
 
352
	xor	ecx, ecx
-
 
353
	lea	edx, [cmdline+ebx]
-
 
354
	imul	ebx, 6
-
 
355
	add	ebx, cmdline_x_pos
-
 
356
	shl	ebx, 16
-
 
357
	or	ebx, cmdline_y_pos+1
-
 
358
	mcall
-
 
359
	ret
-
 
360
 
-
 
361
put_message_nodraw:
-
 
362
; in: esi->ASCIZ message
-
 
363
	mov	edx, [messages_pos]
-
 
364
.m:
-
 
365
	lea	edi, [messages+edx]
-
 
366
.l:
-
 
367
	lodsb
-
 
368
	cmp	al, 0
-
 
369
	jz	.done
-
 
370
	call	test_scroll
-
 
371
	cmp	al, 10
-
 
372
	jz	.newline
-
 
373
	cmp	al, '%'
-
 
374
	jnz	@f
-
 
375
	cmp	dword [esp], z1
-
 
376
	jnz	.format
-
 
377
@@:
-
 
378
	stosb
-
 
379
	inc	edx
-
 
380
	jmp	.l
-
 
381
.newline:
-
 
382
	push	edx
-
 
383
	mov	ecx, messages_width
-
 
384
	xor	eax, eax
-
 
385
	xchg	eax, edx
-
 
386
	div	ecx
-
 
387
	xchg	eax, edx
-
 
388
	pop	edx
-
 
389
	test	eax, eax
-
 
390
	jz	.m
-
 
391
	sub	edx, eax
-
 
392
	add	edx, ecx
-
 
393
	jmp	.m
-
 
394
.done:
-
 
395
	mov	[messages_pos], edx
-
 
396
	ret
-
 
397
.format:
-
 
398
; at moment all format specs must be %X
-
 
399
	lodsb	; get 
-
 
400
	sub	al, '0'
-
 
401
	movzx	ecx, al
-
 
402
	lodsb
-
 
403
	pop	eax
-
 
404
	pop	ebp
-
 
405
	push	eax
-
 
406
; write number in ebp with ecx digits
-
 
407
	dec	ecx
-
 
408
	shl	ecx, 2
-
 
409
.writenibble:
-
 
410
	push	ecx
-
 
411
	call	test_scroll
-
 
412
	pop	ecx
-
 
413
	mov	eax, ebp
-
 
414
	shr	eax, cl
-
 
415
	and	al, 0xF
-
 
416
	cmp	al, 10
-
 
417
	sbb	al, 69h
-
 
418
	das
-
 
419
	stosb
-
 
420
	inc	edx
-
 
421
	sub	ecx, 4
-
 
422
	jns	.writenibble
-
 
423
	jmp	.l
-
 
424
 
-
 
425
test_scroll:
-
 
426
	cmp	edx, messages_width*messages_height
-
 
427
	jnz	.ret
-
 
428
	push	esi
-
 
429
	mov	edi, messages
-
 
430
	lea	esi, [edi+messages_width]
-
 
431
	mov	ecx, (messages_height-1)*messages_width/4
-
 
432
	rep	movsd
-
 
433
	push	eax
-
 
434
	mov	al, ' '
-
 
435
	push	edi
-
 
436
	push	messages_width
-
 
437
	pop	ecx
-
 
438
	sub	edx, ecx
-
 
439
	rep	stosb
-
 
440
	pop	edi
-
 
441
	pop	eax
-
 
442
	pop	esi
-
 
443
.ret:	ret
-
 
444
 
-
 
445
put_message:
-
 
446
	call	put_message_nodraw
-
 
447
 
-
 
448
draw_messages:
-
 
449
	push	13
-
 
450
	pop	eax
-
 
451
	mov	edx, 0xFFFFFF
-
 
452
	mov	ebx, messages_x_pos*10000h+messages_x_size
-
 
453
	mov	ecx, messages_y_pos*10000h+messages_y_size
-
 
454
	mcall
-
 
455
	mov	edx, messages
-
 
456
	push	messages_width
-
 
457
	pop	esi
-
 
458
	xor	ecx, ecx
-
 
459
	mov	al, 4
-
 
460
	mov	ebx, messages_x_pos*10000h+messages_y_pos
-
 
461
@@:
-
 
462
	mcall
-
 
463
	add	edx, esi
-
 
464
	add	ebx, 10
-
 
465
	cmp	edx, messages+messages_width*messages_height
-
 
466
	jb	@b
-
 
467
	ret
-
 
468
 
-
 
469
draw_cursor:
-
 
470
	push	38
-
 
471
	pop	eax
-
 
472
	mov	ecx, cmdline_y_pos*10001h+cmdline_y_size-1
-
 
473
	mov	ebx, [cmdline_pos]
-
 
474
	imul	ebx, 6
-
 
475
	add	ebx, cmdline_x_pos
-
 
476
	mov	edx, ebx
-
 
477
	shl	ebx, 16
-
 
478
	or	ebx, edx
-
 
479
	xor	edx, edx
-
 
480
	mcall
-
 
481
	ret
-
 
482
hide_cursor:
-
 
483
	mov	ebx, [cmdline_pos]
-
 
484
	push	13
-
 
485
	pop	eax
-
 
486
	imul	ebx, 6
-
 
487
	add	ebx, cmdline_x_pos
-
 
488
	shl	ebx, 16
-
 
489
	inc	ebx
-
 
490
	mov	ecx, cmdline_y_pos*10000h + cmdline_y_size
-
 
491
	mov	edx, 0xFFFFFF
-
 
492
	mcall
-
 
493
	mov	ebx, [cmdline_pos]
-
 
494
	cmp	ebx, [cmdline_len]
-
 
495
	jae	.ret
-
 
496
	mov	al, 4
-
 
497
	xor	ecx, ecx
-
 
498
	lea	edx, [cmdline+ebx]
-
 
499
	imul	ebx, 6
-
 
500
	add	ebx, cmdline_x_pos
-
 
501
	shl	ebx, 16
-
 
502
	or	ebx, cmdline_y_pos+1
-
 
503
	push	1
-
 
504
	pop	esi
-
 
505
	mcall
-
 
506
.ret:
-
 
507
	ret
-
 
508
 
-
 
509
redraw_title:
-
 
510
	push	13
-
 
511
	pop	eax
-
 
512
	mov	edx, 0xFFFFFF
-
 
513
	mov	ebx, title_x_pos*10000h + data_x_pos+data_x_size-title_x_pos
-
 
514
	mov	ecx, title_y_pos*10000h + title_y_size
-
 
515
	mcall
-
 
516
draw_title:
-
 
517
	mov	al, 38
-
 
518
	mov	ebx, (data_x_pos-2)*10000h + title_x_pos-5
-
 
519
	mov	ecx, (title_y_pos+5)*10001h
-
 
520
	xor	edx, edx
-
 
521
	mcall
-
 
522
	push	NoPrgLoaded_len
-
 
523
	pop	esi
-
 
524
	cmp	[debuggee_pid], 0
-
 
525
	jz	@f
-
 
526
	mov	esi, [prgname_len]
-
 
527
@@:	imul	ebx, esi, 6
-
 
528
	add	ebx, title_x_pos+4
-
 
529
	shl	ebx, 16
-
 
530
	mov	bx, data_x_pos+data_x_size-10-5-6*7
-
 
531
	cmp	[bSuspended], 0
-
 
532
	jz	@f
-
 
533
	add	ebx, 6
-
 
534
@@:
-
 
535
	mcall
-
 
536
	mov	ebx, (data_x_pos+data_x_size-10+4)*0x10000 + data_x_pos+data_x_size+2
-
 
537
	mcall
-
 
538
	mov	al, 4
-
 
539
	mov	ebx, title_x_pos*10000h+title_y_pos
-
 
540
	xor	ecx, ecx
-
 
541
	mov	edx, NoPrgLoaded_str
-
 
542
	cmp	[debuggee_pid], 0
-
 
543
	jz	@f
-
 
544
	mov	edx, [prgname_ptr]
-
 
545
@@:
-
 
546
	mcall
-
 
547
	cmp	[debuggee_pid], 0
-
 
548
	jz	.nodebuggee
-
 
549
	mov	ebx, (data_x_pos+data_x_size-10-6*7)*10000h + title_y_pos
-
 
550
	mov	edx, aRunning
-
 
551
	push	7
-
 
552
	pop	esi
-
 
553
	cmp	[bSuspended], 0
-
 
554
	jz	@f
-
 
555
	add	ebx, 6*10000h
-
 
556
	mov	edx, aPaused
-
 
557
	dec	esi
-
 
558
@@:
-
 
559
	mcall
-
 
560
	ret
-
 
561
.nodebuggee:
-
 
562
	mov	al, 38
-
 
563
	mov	ebx, (data_x_pos+data_x_size-10-6*7-5)*0x10000 + data_x_pos+data_x_size+2
-
 
564
	mov	ecx, (title_y_pos+5)*10001h
-
 
565
	xor	edx, edx
-
 
566
	jmp	@b
-
 
567
 
-
 
568
draw_register:
-
 
569
; in: esi->value, edx->string, ecx=string len, ebx=coord
-
 
570
	push	edx
-
 
571
	push	ecx
-
 
572
	push	esi
-
 
573
	mov	eax, esi
-
 
574
	mov	esi, ecx
-
 
575
; color
-
 
576
	mov	ecx, 40808080h
-
 
577
	cmp	[debuggee_pid], 0
-
 
578
	jz	.cd
-
 
579
	cmp	[bSuspended], 0
-
 
580
	jz	.cd
-
 
581
	mov	ecx, 40000000h
-
 
582
	push	edi
-
 
583
	mov	edi, [eax]
-
 
584
	cmp	dword [eax+oldcontext-context], edi
-
 
585
	pop	edi
-
 
586
	jz	.cd
-
 
587
	mov	ecx, 0x4000AA00
-
 
588
.cd:
-
 
589
	push	4
-
 
590
	pop	eax
-
 
591
	mcall
-
 
592
	imul	esi, 60000h
-
 
593
	lea	edx, [ebx+esi]
-
 
594
	mov	al, 47
-
 
595
	mov	ebx, 80101h
-
 
596
	mov	esi, ecx
-
 
597
	pop	ecx
-
 
598
	mcall
-
 
599
	lea	ebx, [edx+60000h*18]
-
 
600
	mov	esi, ecx
-
 
601
	pop	ecx
-
 
602
	pop	edx
-
 
603
	add	edx, ecx
-
 
604
	ret
-
 
605
draw_flag:
-
 
606
	movzx	edi, byte [edx+7]
-
 
607
	bt	[_eflags], edi
-
 
608
	jc	.on
-
 
609
	or	byte [edx], 20h
-
 
610
	jmp	.onoff
-
 
611
.on:
-
 
612
	and	byte [edx], not 20h
-
 
613
.onoff:
-
 
614
	mov	ecx, 40808080h
-
 
615
	cmp	[debuggee_pid], 0
-
 
616
	jz	.doit
-
 
617
	cmp	[bSuspended], 0
-
 
618
	jz	.doit
-
 
619
	mov	ecx, 40000000h
-
 
620
	bt	[_eflags], edi
-
 
621
	lahf
-
 
622
	bt	dword [_eflags + oldcontext - context], edi
-
 
623
	rcl	ah, 1
-
 
624
	test	ah, 3
-
 
625
	jp	.doit
-
 
626
	mov	ecx, 0x4000AA00
-
 
627
.doit:
-
 
628
	mov	ah, 0
-
 
629
	mov	edi, 0xFFFFFF
-
 
630
	mcall
-
 
631
	ret
-
 
632
 
-
 
633
draw_registers:
-
 
634
	push	13
-
 
635
	pop	eax
-
 
636
	mov	edx, 0xFFFFFF
-
 
637
	mov	ebx, data_x_pos*10000h + data_x_size
-
 
638
	mov	ecx, registers_y_pos*10000h + registers_y_size
-
 
639
	mcall
-
 
640
redraw_registers:
-
 
641
	mov	edi, 0xFFFFFF
-
 
642
	mov	esi, _eax
-
 
643
	push	4
-
 
644
	pop	ecx
-
 
645
	mov	edx, regs_strs
-
 
646
	mov	ebx, registers_x_pos*10000h+registers_y_pos
-
 
647
	call	draw_register
-
 
648
	add	esi, _ebx-_eax
-
 
649
	call	draw_register
-
 
650
	add	esi, _ecx-_ebx
-
 
651
	call	draw_register
-
 
652
	add	esi, _edx-_ecx
-
 
653
	call	draw_register
-
 
654
	mov	ebx, registers_x_pos*10000h+registers_y_pos+10
-
 
655
	add	esi, _esi-_edx
-
 
656
	call	draw_register
-
 
657
	add	esi, _edi-_esi
-
 
658
	call	draw_register
-
 
659
	add	esi, _ebp-_edi
-
 
660
	call	draw_register
-
 
661
	add	esi, _esp-_ebp
-
 
662
	call	draw_register
-
 
663
	mov	ebx, registers_x_pos*10000h+registers_y_pos+20
-
 
664
	add	esi, _eip-_esp
-
 
665
	call	draw_register
-
 
666
	mov	cl, 7
-
 
667
	add	esi, _eflags-_eip
-
 
668
	call	draw_register
-
 
669
	mov	al, 4
-
 
670
	mov	ecx, 808080h
-
 
671
	cmp	[debuggee_pid], 0
-
 
672
	jz	@f
-
 
673
	cmp	[bSuspended], 0
-
 
674
	jz	@f
-
 
675
	xor	ecx, ecx
-
 
676
@@:
-
 
677
	mov	edx, aColon
-
 
678
	xor	esi, esi
-
 
679
	inc	esi
-
 
680
	mov	ebx, (registers_x_pos+37*6)*10000h + registers_y_pos+20
-
 
681
	mcall
-
 
682
	mov	edx, flags
-
 
683
@@:
-
 
684
	add	ebx, 2*6*10000h
-
 
685
	call	draw_flag
-
 
686
	inc	edx
-
 
687
	cmp	dl, flags_bits and 0xFF
-
 
688
	jnz	@b
-
 
689
	ret
-
 
690
 
-
 
691
draw_dump:
-
 
692
	push	13
-
 
693
	pop	eax
-
 
694
	mov	edx, 0xFFFFFF
-
 
695
	mov	ebx, data_x_pos*10000h + data_x_size
-
 
696
	mov	ecx, dump_y_pos*10000h + dump_y_size
-
 
697
	mcall
-
 
698
redraw_dump:
-
 
699
; addresses
-
 
700
	mov	al, 47
-
 
701
	mov	ebx, 80100h
-
 
702
	mov	edx, data_x_pos*10000h + dump_y_pos
-
 
703
	mov	ecx, [dumppos]
-
 
704
	mov	edi, 0xFFFFFF
-
 
705
	mov	esi, 40808080h
-
 
706
	cmp	[debuggee_pid], 0
-
 
707
	jz	@f
-
 
708
	cmp	[bSuspended], 0
-
 
709
	jz	@f
-
 
710
	mov	esi, 40000000h
-
 
711
@@:
-
 
712
	mcall
-
 
713
	add	ecx, 10h
-
 
714
	add	edx, 10
-
 
715
	cmp	dl, dump_y_pos + dump_y_size
-
 
716
	jb	@b
-
 
717
; hex dump of data
-
 
718
	mov	ecx, dumpdata
-
 
719
	push	ecx
-
 
720
	xor	ebx, ebx
-
 
721
	mov	edx, (data_x_pos+12*6)*10000h + dump_y_pos
-
 
722
	cmp	[dumpread], ebx
-
 
723
	jz	.hexdumpdone1
-
 
724
.hexdumploop1:
-
 
725
	push	ebx
-
 
726
	mov	ebx, 20101h
-
 
727
	mcall
-
 
728
	pop	ebx
-
 
729
	add	edx, 3*6*10000h
-
 
730
	inc	ecx
-
 
731
	inc	ebx
-
 
732
	test	bl, 15
-
 
733
	jz	.16
-
 
734
	test	bl, 7
-
 
735
	jnz	@f
-
 
736
	add	edx, 2*6*10000h - 10 + 6*(3*10h+2)*10000h
-
 
737
.16:
-
 
738
	add	edx, 10 - 6*(3*10h+2)*10000h
-
 
739
@@:
-
 
740
	cmp	ebx, [dumpread]
-
 
741
	jb	.hexdumploop1
-
 
742
.hexdumpdone1:
-
 
743
	mov	al, 4
-
 
744
	mov	ecx, esi
-
 
745
	xchg	ebx, edx
-
 
746
	push	2
-
 
747
	pop	esi
-
 
748
.hexdumploop2:
-
 
749
	cmp	edx, dump_height*10h
-
 
750
	jae	.hexdumpdone2
-
 
751
	push	edx
-
 
752
	mov	edx, aQuests
-
 
753
	mcall
-
 
754
	pop	edx
-
 
755
	add	ebx, 3*6*10000h
-
 
756
	inc	edx
-
 
757
	test	dl, 15
-
 
758
	jz	.16x
-
 
759
	test	dl, 7
-
 
760
	jnz	.hexdumploop2
-
 
761
	add	ebx, 2*6*10000h - 10 + 6*(3*10h+2)*10000h
-
 
762
.16x:
-
 
763
	add	ebx, 10 - 6*(3*10h+2)*10000h
-
 
764
	jmp	.hexdumploop2
-
 
765
.hexdumpdone2:
-
 
766
	dec	esi
-
 
767
; colon, minus signs
-
 
768
	mov	ebx, (data_x_pos+8*6)*10000h + dump_y_pos
-
 
769
	mov	edx, aColon
-
 
770
@@:
-
 
771
	mcall
-
 
772
	add	ebx, 10
-
 
773
	cmp	bl, dump_y_pos+dump_height*10
-
 
774
	jb	@b
-
 
775
	mov	ebx, (data_x_pos+(12+3*8)*6)*10000h + dump_y_pos
-
 
776
	mov	edx, aMinus
-
 
777
@@:
-
 
778
	mcall
-
 
779
	add	ebx, 10
-
 
780
	cmp	bl, dump_y_pos+dump_height*10
-
 
781
	jb	@b
-
 
782
; ASCII data
-
 
783
	mov	ebx, (data_x_pos+(12+3*10h+2+2)*6)*10000h + dump_y_pos
-
 
784
	pop	edx
-
 
785
	push	dump_height*10h
-
 
786
.asciiloop:
-
 
787
	push	edx
-
 
788
	cmp	byte [edx], 20h
-
 
789
	jae	@f
-
 
790
	mov	edx, aPoint
-
 
791
@@:
-
 
792
	mcall
-
 
793
	pop	edx
-
 
794
	inc	edx
-
 
795
	add	ebx, 6*10000h
-
 
796
	dec	dword [esp]
-
 
797
	jz	.asciidone
-
 
798
	test	byte [esp], 15
-
 
799
	jnz	.asciiloop
-
 
800
	add	ebx, 10 - 6*10h*10000h
-
 
801
	jmp	.asciiloop
-
 
802
.asciidone:
-
 
803
	pop	ecx
-
 
804
	ret
-
 
805
 
-
 
806
redraw_disasm:
-
 
807
;	push	13
-
 
808
;	pop	eax
-
 
809
;	mov	edx, 0xFFFFFF
-
 
810
;	mov	ebx, data_x_pos*10000h + data_x_size
-
 
811
;	mov	ecx, (disasm_y_pos-1)*10000h + (disasm_y_size+1)
-
 
812
;	mcall
-
 
813
draw_disasm:
-
 
814
	mov	eax, [disasm_start_pos]
-
 
815
	mov	[disasm_cur_pos], eax
-
 
816
	and	[disasm_cur_str], 0
-
 
817
.loop:
-
 
818
	mov	eax, [disasm_cur_pos]
-
 
819
	call	find_symbol
-
 
820
	jc	.nosymb
-
 
821
	mov	ebx, [disasm_cur_str]
-
 
822
	imul	ebx, 10
-
 
823
	push	ebx
-
 
824
	lea	ecx, [ebx+disasm_y_pos-1]
-
 
825
	shl	ecx, 16
-
 
826
	mov	cl, 11
-
 
827
	mov	edx, 0xFFFFFF
-
 
828
	mov	ebx, data_x_pos*10000h + data_x_size
-
 
829
	push	13
-
 
830
	pop	eax
-
 
831
	mcall
-
 
832
	pop	ebx
-
 
833
	mov	edi, edx
-
 
834
	add	ebx, (data_x_pos+6*2)*10000h+disasm_y_pos
-
 
835
	mov	edx, esi
-
 
836
@@:	lodsb
-
 
837
	test	al, al
-
 
838
	jnz	@b
-
 
839
	mov	byte [esi-1], ':'
-
 
840
	sub	esi, edx
-
 
841
	mov	ecx, 40000000h
-
 
842
	mov	al, 4
-
 
843
	mcall
-
 
844
	mov	byte [esi+edx-1], 0
-
 
845
	lea	esi, [esi*3]
-
 
846
	movzx	ecx, bx
-
 
847
	shr	ebx, 16
-
 
848
	lea	ebx, [ebx+esi*2]
-
 
849
	shl	ecx, 16
-
 
850
	mov	cl, 10
-
 
851
	imul	ebx, 10001h
-
 
852
	sub	bx, data_x_pos+data_x_size
-
 
853
	neg	bx
-
 
854
	mov	al, 13
-
 
855
	mov	edx, edi
-
 
856
	mcall
-
 
857
	inc	[disasm_cur_str]
-
 
858
	cmp	[disasm_cur_str], disasm_height
-
 
859
	jae	.loopend
-
 
860
.nosymb:
-
 
861
	push	[disasm_cur_pos]
-
 
862
	call	disasm_instr
-
 
863
	pop	ebp
-
 
864
	jc	.loopend
-
 
865
	xor	esi, esi	; default color: black
-
 
866
	mov	edx, 0xFFFFFF	; default background: white
-
 
867
	mov	ebx, data_x_pos*10000h + data_x_size
-
 
868
	mov	ecx, [disasm_cur_str]
-
 
869
	imul	ecx, 10*10000h
-
 
870
	add	ecx, (disasm_y_pos-1)*10000h + 10
-
 
871
	mov	eax, ebp
-
 
872
	pushad
-
 
873
	call	find_enabled_breakpoint
-
 
874
	popad
-
 
875
	jnz	.nored
-
 
876
	mov	edx, 0xFF0000	; use background: red
-
 
877
.nored:
-
 
878
	mov	eax, [_eip]
-
 
879
	cmp	eax, ebp
-
 
880
	jnz	.noblue
-
 
881
	mov	edx, 0x0000FF	; use background: blue
-
 
882
	mov	esi, 0xFFFFFF	; on blue bgr, use white color
-
 
883
.noblue:
-
 
884
	push	13
-
 
885
	pop	eax
-
 
886
	mcall
-
 
887
	mov	al, 47
-
 
888
	mov	ebx, 80100h
-
 
889
	mov	edx, [disasm_cur_str]
-
 
890
	imul	edx, 10
-
 
891
	add	edx, data_x_pos*10000h + disasm_y_pos
-
 
892
	mov	ecx, ebp
-
 
893
	mcall
-
 
894
	mov	al, 4
-
 
895
	lea	ebx, [edx+8*6*10000h]
-
 
896
	mov	ecx, esi
-
 
897
	push	2
-
 
898
	pop	esi
-
 
899
	mov	edx, aColon
-
 
900
	mcall
-
 
901
	push	9
-
 
902
	pop	edi
-
 
903
	lea	edx, [ebx+2*6*10000h]
-
 
904
	mov	esi, ecx
-
 
905
	mov	ecx, ebp
-
 
906
	sub	ecx, [disasm_start_pos]
-
 
907
	add	ecx, disasm_buffer
-
 
908
.drawhex:
-
 
909
	mov	al, 47
-
 
910
	mov	ebx, 20101h
-
 
911
	mcall
-
 
912
	add	edx, 6*3*10000h
-
 
913
	inc	ecx
-
 
914
	inc	ebp
-
 
915
	cmp	ebp, [disasm_cur_pos]
-
 
916
	jae	.hexdone
-
 
917
	dec	edi
-
 
918
	jnz	.drawhex
-
 
919
	push	esi
-
 
920
	mov	esi, [disasm_cur_pos]
-
 
921
	dec	esi
-
 
922
	cmp	esi, ebp
-
 
923
	pop	esi
-
 
924
	jbe	.drawhex
-
 
925
	mov	al, 4
-
 
926
	lea	ebx, [edx-6*10000h]
-
 
927
	mov	ecx, esi
-
 
928
	push	3
-
 
929
	pop	esi
-
 
930
	mov	edx, aDots
-
 
931
	mcall
-
 
932
	mov	esi, ecx
-
 
933
.hexdone:
-
 
934
	xor	eax, eax
-
 
935
	mov	edi, disasm_string
-
 
936
	mov	edx, edi
-
 
937
	or	ecx, -1
-
 
938
	repnz	scasb
-
 
939
	not	ecx
-
 
940
	dec	ecx
-
 
941
	xchg	ecx, esi
-
 
942
	mov	ebx, [disasm_cur_str]
-
 
943
	imul	ebx, 10
-
 
944
	add	ebx, (data_x_pos+6*40)*10000h+disasm_y_pos
-
 
945
	mov	al, 4
-
 
946
	mcall
-
 
947
	inc	[disasm_cur_str]
-
 
948
	cmp	[disasm_cur_str], disasm_height
-
 
949
	jb	.loop
-
 
950
.loopend:
-
 
951
	mov	ecx, disasm_height
-
 
952
	sub	ecx, [disasm_cur_str]
-
 
953
	jz	@f
-
 
954
	imul	ecx, 10
-
 
955
	inc	ecx
-
 
956
	mov	eax, disasm_y_pos + disasm_y_size
-
 
957
	sub	eax, ecx
-
 
958
	shl	eax, 16
-
 
959
	add	ecx, eax
-
 
960
	push	13
-
 
961
	pop	eax
-
 
962
	mov	ebx, data_x_pos*65536 + data_x_size
-
 
963
	mov	edx, 0xFFFFFF
-
 
964
	mcall
-
 
965
@@:
-
 
966
	ret
-
 
Line 967... Line -...
967
 
-
 
968
update_disasm_eip:
-
 
969
; test if instruction at eip is showed
-
 
970
	mov	ecx, disasm_height
-
 
971
	mov	eax, [disasm_start_pos]
-
 
972
	mov	[disasm_cur_pos], eax
-
 
973
.l:
-
 
974
	mov	eax, [disasm_cur_pos]
-
 
975
	call	find_symbol
-
 
976
	jc	@f
-
 
977
	dec	ecx
-
 
978
	jz	.m
-
 
979
@@:
-
 
980
	cmp	[_eip], eax
-
 
981
	jz	redraw_disasm
-
 
982
	push	ecx
-
 
983
	call	disasm_instr
-
 
984
	pop	ecx
-
 
985
	jc	.m
-
 
986
	loop	.l
-
 
987
.m:
-
 
988
update_disasm_eip_force:
-
 
989
	mov	eax, [_eip]
-
 
990
	mov	[disasm_start_pos], eax
-
 
991
update_disasm:
-
 
992
	cmp	[debuggee_pid], 0
66
 
993
	jz	.no
-
 
994
	push	69
-
 
995
	pop	eax
-
 
996
	push	6
-
 
997
	pop	ebx
-
 
998
	mov	ecx, [debuggee_pid]
-
 
999
	mov	edi, disasm_buffer
-
 
1000
	mov	edx, 256
-
 
1001
	mov	esi, [disasm_start_pos]
-
 
1002
	mcall
-
 
1003
	cmp	eax, -1
-
 
1004
	jnz	@f
-
 
1005
	mov	esi, read_mem_err
-
 
1006
	call	put_message
-
 
1007
.no:
-
 
1008
	xor	eax, eax
-
 
1009
@@:
-
 
1010
	mov	[disasm_buf_size], eax
-
 
1011
	call	restore_from_breaks
-
 
1012
	jmp	redraw_disasm
-
 
1013
 
-
 
1014
draw_window:
-
 
1015
; start redraw
-
 
1016
	push	12
-
 
1017
	pop	eax
-
 
1018
	push	1
-
 
1019
	pop	ebx
-
 
1020
	mcall
-
 
1021
; define window
-
 
1022
	xor	eax, eax
-
 
1023
	mov	ebx, wnd_x_size
-
 
1024
	mov	ecx, wnd_y_size
-
 
1025
	mov	edx, 54FFFFFFh
-
 
1026
	mov	edi, caption_str
-
 
1027
	mcall
-
 
1028
; clear unused areas
-
 
1029
	mov	al, 48
-
 
1030
	push	4
-
 
1031
	pop	ebx
-
 
1032
	mcall
-
 
1033
	cmp	eax, title_y_pos
-
 
1034
	jb	@f
-
 
1035
	push	registers_y_pos
-
 
1036
	pop	eax
-
 
1037
@@:
-
 
1038
	push	registers_y_pos
-
 
1039
	pop	ecx
-
 
1040
	push	eax
-
 
1041
	sub	ecx, eax
-
 
1042
	shl	eax, 16
-
 
1043
	add	ecx, eax
-
 
1044
	mov	ebx, 5*10000h + (wnd_x_size-9)
-
 
1045
	push	13
-
 
1046
	pop	eax
-
 
1047
	mcall
-
 
1048
	mov	ecx, (registers_y_pos+registers_y_size)*10000h + (dump_y_pos-registers_y_pos-registers_y_size)
-
 
1049
	mcall
-
 
1050
	mov	ecx, (dump_y_pos+dump_y_size)*10000h + (disasm_y_pos-dump_y_pos-dump_y_size)
-
 
1051
	mcall
-
 
1052
	mov	ecx, (disasm_y_pos-1+disasm_y_size)*10000h + (messages_y_pos-disasm_y_pos+1-disasm_y_size)
-
 
1053
	mcall
-
 
1054
	mov	ecx, (messages_y_pos+messages_y_size)*10000h + (wnd_y_size-messages_y_pos-messages_y_size-4)
-
 
1055
	mcall
-
 
1056
	mov	ebx, 5*10000h + (data_x_pos-5)
-
 
1057
	pop	ecx
-
 
1058
	imul	ecx, 10001h
-
 
1059
	sub	cx, wnd_y_size-4
-
 
1060
	neg	cx
-
 
1061
	mcall
-
 
1062
	mov	ebx, (data_x_pos+data_x_size)*10000h + (wnd_x_size-data_x_pos-data_x_size-4)
-
 
1063
	mcall
-
 
1064
; messages frame
-
 
1065
	mov	al, 38
-
 
1066
	mov	ebx, (messages_x_pos-2)*10000h + (messages_x_pos+messages_x_size+2)
-
 
1067
	push	ebx
-
 
1068
	mov	ecx, (messages_y_pos-2)*10001h
-
 
1069
	xor	edx, edx
-
 
1070
	mcall
-
 
1071
	mov	ecx, (messages_y_pos+messages_y_size+2)*10001h
-
 
1072
	mcall
-
 
1073
	mov	ebx, (messages_x_pos-2)*10001h
-
 
1074
	push	ebx
-
 
1075
	mov	ecx, (messages_y_pos-2)*10000h + (messages_y_pos+messages_y_size+2)
-
 
1076
	mcall
-
 
1077
	mov	ebx, (messages_x_pos+messages_x_size+2)*10001h
-
 
1078
	push	ebx
-
 
1079
	mcall
-
 
1080
; command line frame
-
 
1081
	mov	ecx, (cmdline_y_pos-2)*10000h + (cmdline_y_pos+cmdline_y_size+2)
-
 
1082
	pop	ebx
-
 
1083
	mcall
-
 
1084
	pop	ebx
-
 
1085
	mcall
-
 
1086
	pop	ebx
-
 
1087
	mov	ecx, (cmdline_y_pos+cmdline_y_size+2)*10001h
-
 
1088
	mcall
-
 
1089
	mov	ecx, (cmdline_y_pos-2)*10001h
-
 
1090
	mcall
-
 
1091
; messages
-
 
1092
	call	draw_messages
-
 
1093
; command line & cursor
-
 
1094
	call	draw_cmdline
-
 
1095
	call	draw_cursor
-
 
1096
; title & registers & dump & disasm
-
 
1097
	mov	al, 38
-
 
1098
	mov	ebx, (data_x_pos-2)*10001h
-
 
1099
	mov	ecx, (title_y_pos+5)*10000h + (messages_y_pos-2)
-
 
1100
	mcall
-
 
1101
	mov	ebx, (data_x_pos+data_x_size+2)*10001h
-
 
1102
	mcall
-
 
1103
	mov	ebx, (data_x_pos-2)*10000h + (data_x_pos+data_x_size+2)
-
 
1104
	mov	ecx, (dump_y_pos-3)*10001h
-
 
1105
	mcall
-
 
1106
	mov	ecx, (disasm_y_pos-4)*10001h
-
 
1107
	mcall
-
 
1108
	call	redraw_title
-
 
1109
	call	draw_registers
-
 
1110
	call	draw_dump
-
 
1111
	call	redraw_disasm
-
 
1112
; end redraw
-
 
1113
	push	12
-
 
1114
	pop	eax
-
 
1115
	push	2
-
 
1116
	pop	ebx
-
 
1117
	mcall
67
    .x8:
Line 1118... Line 68...
1118
	ret
68
        ret
1119
 
69
 
1120
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line -... Line 71...
-
 
71
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DEBUGGING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
72
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
73
 
1121
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DEBUGGING ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
74
;-----------------------------------------------------------------------------
1122
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
75
;                                 Help event
1123
 
76
 
1124
OnHelp:
77
OnHelp:
1125
	mov	esi, help_msg
78
        mov     esi, help_msg
1126
	mov	edi, [curarg]
79
        mov     edi, [curarg]
1127
	cmp	byte [edi], 0
80
        cmp     byte [edi], 0
1128
	jz	.x
81
        jz      .x
1129
	mov	esi, help_groups
82
        mov     esi, help_groups
-
 
83
        call    find_cmd
1130
	call	find_cmd
84
        jc      .nocmd
1131
	jc	.nocmd
85
        mov     esi, [esi+12]
-
 
86
 
1132
	mov	esi, [esi+12]
87
    .x:
1133
.x:
88
        jmp     put_message
1134
	jmp	put_message
89
 
Line -... Line 90...
-
 
90
    .nocmd:
-
 
91
        mov     esi, aUnknownCommand
1135
.nocmd:
92
        jmp     .x
1136
	mov	esi, aUnknownCommand
93
 
1137
	jmp	.x
-
 
1138
 
94
;-----------------------------------------------------------------------------
-
 
95
;                                Quit event
-
 
96
OnQuit:
Line 1139... Line 97...
1139
OnQuit:
97
        mcall  -1
1140
	push	-1
98
 
1141
	pop	eax
99
;-----------------------------------------------------------------------------
1142
	mcall
100
;                        Working with debug context
1143
 
101
 
-
 
102
get_new_context:
1144
get_new_context:
103
        mov     esi, context
1145
	mov	esi, context
104
        mov     edi, oldcontext
1146
	mov	edi, oldcontext
105
        mov     ecx, 10
1147
	mov	ecx, 10
106
        rep movsd
1148
	rep	movsd
107
 
1149
get_context:
108
get_context:
1150
	push	1
109
        ;push    1
1151
	pop	ebx
110
        ;pop     ebx
1152
	push	69
111
        ;push    69
1153
	pop	eax
112
        ;pop     eax
1154
	mov	ecx, [debuggee_pid]
113
        ;mov     ecx, [debuggee_pid]
-
 
114
        ;mov     esi, context
1155
	mov	esi, context
115
        ;push    28h
1156
	push	28h
116
        ;pop     edx
1157
	pop	edx
117
        mcall    69, 1, [debuggee_pid], 28h, context
1158
	mcall
118
        ret
1159
	ret
119
 
1160
set_context:
120
set_context:
1161
	push	2
121
        ;push    2
1162
	pop	ebx
122
        ;pop     ebx
1163
	push	69
123
        ;push    69
1164
	pop	eax
124
        ;pop     eax
1165
	mov	ecx, [debuggee_pid]
125
        ;mov     ecx, [debuggee_pid]
Line 1166... Line 126...
1166
	mov	esi, context
126
        ;mov     esi, context
1167
	push	28h
127
        ;push    28h
1168
	pop	edx
128
        ;pop     edx
Line 1176... Line 136...
1176
	mov	ecx, edx
136
        mov     ecx, edx
1177
	xor	eax, eax
137
        xor     eax, eax
1178
	push	edi
138
        push    edi
1179
	rep	stosb
139
        rep stosb
1180
	pop	edi
140
        pop     edi
1181
	mov	ecx, [debuggee_pid]
141
        ;mov     ecx, [debuggee_pid]
1182
	mov	al, 69
142
        ;mov     al, 69
1183
	push	6
143
        ;push    6
1184
	pop	ebx
144
        ;pop     ebx
1185
	mcall
145
        mcall    69, 6, [debuggee_pid]
1186
	cmp	eax, -1
146
        cmp     eax, -1
1187
	jnz	@f
147
        jnz     @f
1188
	mov	esi, read_mem_err
148
        mov     esi, read_mem_err
1189
	call	put_message
149
        call    put_message
1190
	xor	eax, eax
150
        xor     eax, eax
-
 
151
 
1191
@@:
152
    @@:
1192
	mov	[edi-8], eax
153
        mov     [edi-8], eax
1193
;	call	restore_from_breaks
154
;       call    restore_from_breaks
1194
;	ret
155
;       ret
1195
restore_from_breaks:
-
 
-
 
156
 
1196
; in: edi=buffer,eax=size,esi=address
157
; in: edi=buffer,eax=size,esi=address
-
 
158
restore_from_breaks:
1197
	mov	ebx, breakpoints
159
        mov     ebx, breakpoints
-
 
160
 
1198
@@:
161
    @@:
1199
	test	byte [ebx+4], 1
162
        test    byte [ebx+4], 1
1200
	jz	.cont		; ignore invalid
163
        jz      .cont           ; ignore invalid
1201
	test	byte [ebx+4], 2 or 8
164
        test    byte [ebx+4], 2 or 8
1202
	jnz	.cont		; ignore disabled and memory breaks
165
        jnz     .cont           ; ignore disabled and memory breaks
Line 1204... Line 167...
1204
	sub	ecx, esi
167
        sub     ecx, esi
1205
	cmp	ecx, eax
168
        cmp     ecx, eax
1206
	jae	.cont
169
        jae     .cont
1207
	mov	dl, [ebx+5]
170
        mov     dl, [ebx+5]
1208
	mov	[edi+ecx], dl
171
        mov     [edi+ecx], dl
-
 
172
 
1209
.cont:
173
    .cont:
1210
	add	ebx, 6
174
        add     ebx, 6
1211
	cmp	ebx, breakpoints+breakpoints_n*6
175
        cmp     ebx, breakpoints+breakpoints_n*6
1212
	jb	@b
176
        jb      @b
1213
	ret
177
        ret
Line -... Line 178...
-
 
178
 
-
 
179
;-----------------------------------------------------------------------------
-
 
180
;                           Load executable event
1214
 
181
 
1215
OnLoad:
182
OnLoad:
-
 
183
        mov     esi, [curarg]
1216
	mov	esi, [curarg]
184
 
1217
OnLoadInit:
185
OnLoadInit:
1218
	mov	edi, loadname
186
        mov     edi, loadname
1219
	or	[prgname_len], -1
187
        or      [prgname_len], -1
-
 
188
        mov     [prgname_ptr], edi
1220
	mov	[prgname_ptr], edi
189
 
1221
.copyname:
190
    .copyname:
1222
	lodsb
191
        lodsb
1223
	stosb
192
        stosb
1224
	inc	[prgname_len]
193
        inc     [prgname_len]
1225
	cmp	al, '/'
194
        cmp     al, '/'
1226
	jnz	@f
195
        jnz     @f
1227
	or	[prgname_len], -1
196
        or      [prgname_len], -1
-
 
197
        mov     [prgname_ptr], edi
1228
	mov	[prgname_ptr], edi
198
 
1229
@@:
199
    @@:
1230
	cmp	al, ' '
200
        cmp     al, ' '
1231
	ja	.copyname
201
        ja      .copyname
1232
	mov	byte [edi-1], 0
202
        mov     byte [edi-1], 0
1233
	and	[load_params], 0
203
        and     [load_params], 0
1234
	dec	esi
204
        dec     esi
1235
	call	skip_spaces
205
        call    get_arg.skip_spaces
1236
	cmp	al, 0
206
        cmp     al, 0
1237
	jz	@f
207
        jz      @f
-
 
208
        mov     [load_params], esi
1238
	mov	[load_params], esi
209
 
1239
@@:
210
    @@:
1240
	and	[dumppos], 0
211
        and     [dumppos], 0
1241
	mov	ecx, [symbols]
212
        mov     ecx, [symbols]
1242
	jecxz	do_reload
213
        jecxz   do_reload
1243
	mcall	68, 13
214
        mcall   68, 13
1244
	and	[symbols], 0
215
        and     [symbols], 0
-
 
216
        and     [num_symbols], 0
-
 
217
 
1245
	and	[num_symbols], 0
218
; TODO: make it local
1246
do_reload:
219
do_reload:
1247
	push	18
220
        ;push    18
1248
	pop	eax
221
        ;pop     eax
1249
	push	7
222
        ;push    7
1250
	pop	ebx
223
        ;pop     ebx
1251
	mcall
224
        mcall    18, 7
1252
	mov	[dbgwnd], eax
225
        mov     [dbgwnd], eax
1253
	xchg	ecx, eax
226
        xchg    ecx, eax
1254
	push	70
227
        ;push    70
1255
	pop	eax
228
        ;pop     eax
1256
	mov	ebx, fn70_load_block
229
        ;mov     ebx, fn70_load_block
1257
	mcall
230
        mcall    70, fn70_load_block
1258
	test	eax, eax
231
        test    eax, eax
-
 
232
        jns     .load_ok
1259
	jns	.load_ok
233
 
1260
.load_err:
234
    .load_err:
1261
	push	eax
235
        push    eax
1262
	mov	esi, load_err_msg
236
        mov     esi, load_err_msg
1263
	call	put_message
237
        call    put_message
Line 1266... Line 240...
1266
	cmp	eax, 0x20
240
        cmp     eax, 0x20
1267
	jae	.unk_err
241
        jae     .unk_err
1268
	mov	esi, [load_err_msgs+eax*4]
242
        mov     esi, [load_err_msgs+eax*4]
1269
	test	esi, esi
243
        test    esi, esi
1270
	jnz	put_message
244
        jnz     put_message
-
 
245
 
1271
.unk_err:
246
    .unk_err:
1272
	mov	esi, unk_err_msg
247
        mov     esi, unk_err_msg
1273
	inc	eax
248
        inc     eax
1274
	push	eax
249
        push    eax
1275
	call	put_message_nodraw
250
        call    put_message_nodraw
1276
	jmp	draw_messages
251
        jmp     draw_messages
-
 
252
 
1277
.load_ok:
253
    .load_ok:
1278
	mov	[debuggee_pid], eax
254
        mov     [debuggee_pid], eax
1279
	mov	[bSuspended], 1
255
        mov     [bSuspended], 1
1280
	push	ecx
256
        push    ecx
1281
	call	get_context
257
        call    get_context
1282
	mov	edi, oldcontext
258
        mov     edi, oldcontext
1283
	mov	ecx, 10
259
        mov     ecx, 10
1284
	rep	movsd
260
        rep movsd
-
 
261
 
1285
; activate debugger window
262
    ; activate debugger window
1286
	pop	ecx
263
        pop     ecx
1287
	mov	bl, 3
264
        ;mov     bl, 3
1288
	push	18
265
        ;push    18
1289
	pop	eax
266
        ;pop     eax
1290
	mcall
267
        mcall    18, 3
1291
	call	redraw_title
268
        call    redraw_title
1292
	call	redraw_registers
269
        call    draw_registers.redraw
-
 
270
    ; read and draw dump of memory
1293
	call	get_dump
271
        call    get_dump
1294
	call	redraw_dump
272
        call    draw_dump.redraw
1295
	call	update_disasm_eip_force
273
        call    update_disasm_eip_force
1296
	mov	esi, load_succ_msg
274
        mov     esi, load_succ_msg
1297
	push	[debuggee_pid]
275
        push    [debuggee_pid]
1298
	call	put_message_nodraw
276
        call    put_message_nodraw
1299
	call	draw_messages
277
        call    draw_messages
1300
; try to load symbols
278
    ; try to load symbols
1301
	mov	esi, loadname
279
        mov     esi, loadname
1302
	mov	edi, symbolsfile
280
        mov     edi, symbolsfile
1303
	push	edi
281
        push    edi
-
 
282
 
1304
@@:
283
    @@:
1305
	lodsb
284
        lodsb
1306
	stosb
285
        stosb
1307
	test	al, al
286
        test    al, al
1308
	jnz	@b
287
        jnz     @b
1309
	lea	ecx, [edi-1]
288
        lea     ecx, [edi-1]
-
 
289
 
1310
@@:
290
    @@:
1311
	dec	edi
291
        dec     edi
1312
	cmp	edi, symbolsfile
292
        cmp     edi, symbolsfile
1313
	jb	@f
293
        jb      @f
1314
	cmp	byte [edi], '/'
294
        cmp     byte [edi], '/'
1315
	jz	@f
295
        jz      @f
1316
	cmp	byte [edi], '.'
296
        cmp     byte [edi], '.'
1317
	jnz	@b
297
        jnz     @b
1318
	mov	ecx, edi
298
        mov     ecx, edi
-
 
299
 
1319
@@:
300
    @@:
1320
	mov	dword [ecx], '.dbg'
301
        mov     dword [ecx], '.dbg'
1321
	mov	byte [ecx+4], 0
302
        mov     byte [ecx+4], 0
1322
	pop	esi
303
        pop     esi
1323
	mov	ebp, esi
304
        mov     ebp, esi
1324
	call	OnLoadSymbols.silent
305
        call    OnLoadSymbols.silent
-
 
306
    
1325
; now test for packed progs
307
    ; now test for packed progs
1326
	cmp	[disasm_buf_size], 100h
308
        cmp     [disasm_buf_size], 100h
1327
	jz	@f
309
        jz      @f
1328
	ret
310
        ret
-
 
311
 
1329
@@:
312
    @@:
1330
	mov	esi, mxp_nrv_sig
313
        mov     esi, mxp_nrv_sig
1331
	mov	ebp, disasm_buffer
314
        mov     ebp, disasm_buffer
1332
	mov	edi, ebp
315
        mov     edi, ebp
1333
	push	3
316
        push    3
Line 1337... Line 320...
1337
	cmpsb
320
        cmpsb
1338
	mov	cl, mxp_nrv_sig_size-4
321
        mov     cl, mxp_nrv_sig_size-4
1339
	repz	cmpsb
322
        repz cmpsb
1340
	mov	esi, mxp_nrv_name
323
        mov     esi, mxp_nrv_name
1341
	jz	.packed
324
        jz      .packed
-
 
325
 
1342
.not_mxp_nrv:
326
    .not_mxp_nrv:
1343
	mov	esi, mxp_sig
327
        mov     esi, mxp_sig
1344
	mov	edi, ebp
328
        mov     edi, ebp
1345
	mov	cl, mxp_sig_size
329
        mov     cl, mxp_sig_size
1346
	repz	cmpsb
330
        repz cmpsb
1347
	mov	esi, mxp_name
331
        mov     esi, mxp_name
1348
	jz	.packed
332
        jz      .packed
-
 
333
 
1349
.not_mxp:
334
    .not_mxp:
1350
	mov	esi, mxp_lzo_sig1
335
        mov     esi, mxp_lzo_sig1
1351
	mov	edi, ebp
336
        mov     edi, ebp
1352
	mov	cl, mxp_lzo_sig1_size
337
        mov     cl, mxp_lzo_sig1_size
1353
	repz	cmpsb
338
        repz cmpsb
Line 1361... Line 346...
1361
	cmpsb
346
        cmpsb
1362
	mov	cl, mxp_lzo_sig2_size - 9
347
        mov     cl, mxp_lzo_sig2_size - 9
1363
	repz	cmpsb
348
        repz cmpsb
1364
	mov	esi, mxp_lzo_name
349
        mov     esi, mxp_lzo_name
1365
	jz	.packed
350
        jz      .packed
-
 
351
 
1366
.not_mxp_lzo:
352
    .not_mxp_lzo:
1367
	mov	esi, mtappack_name
353
        mov     esi, mtappack_name
1368
	cmp	dword [ebp], 0xBF5E246A
354
        cmp     dword [ebp], 0xBF5E246A
1369
	jnz	.not_mtappack
355
        jnz     .not_mtappack
1370
	cmp	dword [ebp+8], 0xEC4E8B57
356
        cmp     dword [ebp+8], 0xEC4E8B57
1371
	jnz	.not_mtappack1
357
        jnz     .not_mtappack1
1372
	cmp	dword [ebp+12], 0x8D5EA4F3
358
        cmp     dword [ebp+12], 0x8D5EA4F3
1373
	jnz	.not_mtappack1
359
        jnz     .not_mtappack1
1374
	cmp	byte [ebp+12h], 0xE9
360
        cmp     byte [ebp+12h], 0xE9
1375
	jz	.packed
361
        jz      .packed
-
 
362
 
1376
.not_mtappack1:
363
    .not_mtappack1:
1377
	cmp	word [ebp+8], 0xB957
364
        cmp     word [ebp+8], 0xB957
1378
	jnz	.not_mtappack
365
        jnz     .not_mtappack
1379
	cmp	dword [ebp+14], 0x575EA4F3
366
        cmp     dword [ebp+14], 0x575EA4F3
1380
	jnz	.not_mtappack2
367
        jnz     .not_mtappack2
1381
	cmp	byte [ebp+17h], 0xE9
368
        cmp     byte [ebp+17h], 0xE9
1382
	jz	.packed
369
        jz      .packed
-
 
370
 
1383
.not_mtappack2:
371
    .not_mtappack2:
1384
	cmp	dword [ebp+14], 0x5F8DA4F3
372
        cmp     dword [ebp+14], 0x5F8DA4F3
1385
	jnz	.not_mtappack3
373
        jnz     .not_mtappack3
1386
	cmp	word [ebp+18], 0xE9FC
374
        cmp     word [ebp+18], 0xE9FC
1387
	jz	.packed
375
        jz      .packed
-
 
376
 
1388
.not_mtappack3:
377
    .not_mtappack3:
1389
	cmp	word [ebp+14], 0xA4F3
378
        cmp     word [ebp+14], 0xA4F3
1390
	jnz	.not_mtappack
379
        jnz     .not_mtappack
1391
	cmp	byte [ebp+15h], 0xE9
380
        cmp     byte [ebp+15h], 0xE9
1392
	jz	.packed
381
        jz      .packed
-
 
382
 
1393
.not_mtappack:
383
    .not_mtappack:
1394
	ret
384
        ret
-
 
385
 
1395
.packed:
386
    .packed:
1396
	push	esi
387
        push    esi
1397
	mov	esi, aPacked1
388
        mov     esi, aPacked1
1398
	call	put_message_nodraw
389
        call    put_message_nodraw
1399
	pop	esi
390
        pop     esi
1400
	call	put_message_nodraw
391
        call    put_message_nodraw
1401
	mov	esi, aPacked2
392
        mov     esi, aPacked2
1402
	call	put_message
393
        call    put_message
1403
	call	hide_cursor
394
        call    hide_cursor
1404
	push	40
395
        ;push    40
1405
	pop	eax
396
        ;pop     eax
1406
	push	7
397
        ;push    7
1407
	pop	ebx
398
        ;pop     ebx
1408
	mcall
399
        mcall    40, 7
-
 
400
 
1409
.wait:
401
    .wait:
1410
	push	10
402
        ;push    10
1411
	pop	eax
403
        ;pop     eax
1412
	mcall
404
        mcall    10
1413
	dec	eax
405
        dec     eax
1414
	jz	.redraw
406
        jz      .redraw
1415
	dec	eax
407
        dec     eax
1416
	jz	.key
408
        jz      .key
1417
	or	eax, -1
409
        or      eax, -1
1418
	mcall
410
        mcall
-
 
411
 
1419
.redraw:
412
    .redraw:
1420
	call	draw_window
413
        call    draw_window
1421
	call	hide_cursor
414
        call    hide_cursor
1422
	jmp	.wait
415
        jmp     .wait
-
 
416
 
1423
.key:
417
    .key:
1424
	mov	al, 2
418
        mov     al, 2
1425
	mcall
419
        mcall
1426
	cmp	ah, 'y'
420
        cmp     ah, 'y'
1427
	jz	.yes
421
        jz      .yes
Line 1431... Line 425...
1431
	jz	.yes
425
        jz      .yes
1432
	cmp	ah, 'n'
426
        cmp     ah, 'n'
1433
	jz	.no
427
        jz      .no
1434
	cmp	ah, 'N'
428
        cmp     ah, 'N'
1435
	jnz	.wait
429
        jnz     .wait
-
 
430
 
1436
.no:
431
    .no:
1437
	push	40
432
        ;push    40
1438
	pop	eax
433
        ;pop     eax
1439
	mov	ebx, 0x107
434
        ;mov     ebx, 0x107
1440
	mcall
435
        mcall    40, 0x107
1441
	call	draw_cursor
436
        call    draw_cursor
1442
	mov	esi, aN_str
437
        mov     esi, aN_str
1443
	jmp	put_message
438
        jmp     put_message
-
 
439
 
1444
.yes:
440
    .yes:
1445
	push	40
441
        ;push    40
1446
	pop	eax
442
        ;pop     eax
1447
	mov	ebx, 0x107
443
        ;mov     ebx, 0x107
1448
	mcall
444
        mcall    40, 0x107
1449
	call	draw_cursor
445
        call    draw_cursor
1450
	mov	esi, aY_str
446
        mov     esi, aY_str
1451
	call	put_message
447
        call    put_message
1452
	call	OnUnpack
448
        call    OnUnpack
1453
	ret
449
        ret
Line -... Line 450...
-
 
450
 
-
 
451
;-----------------------------------------------------------------------------
-
 
452
;                       Searching signatures
1454
 
453
 
1455
mxp_nrv_sig:
454
mxp_nrv_sig:
1456
	xor	eax, eax
455
        xor     eax, eax
1457
	mov	ecx, 0x95	; 0xA1 for programs with parameters
456
        mov     ecx, 0x95       ; 0xA1 for programs with parameters
1458
	mov	[eax], ecx
457
        mov     [eax], ecx
Line 1464... Line 463...
1464
	rep	movsb
463
        rep movsb
1465
	jmp	dword [esp]
464
        jmp     dword [esp]
1466
	pop	esi
465
        pop     esi
1467
	add	esi, [eax]
466
        add     esi, [eax]
1468
	xor	edi, edi
467
        xor     edi, edi
-
 
468
 
1469
mxp_nrv_sig_size = $ - mxp_nrv_sig
469
mxp_nrv_sig_size = $ - mxp_nrv_sig
Line 1470... Line 470...
1470
 
470
 
1471
mxp_sig:
471
mxp_sig:
1472
	mov	ecx, 1CBh
472
        mov     ecx, 1CBh
Line 1482... Line 482...
1482
	push	eax
482
        push    eax
1483
	push	dword [24h]
483
        push    dword [24h]
1484
	push	0
484
        push    0
1485
	push	8
485
        push    8
1486
	call	$+0x25
486
        call    $+0x25
-
 
487
 
1487
mxp_sig_size = $ - mxp_sig
488
mxp_sig_size = $ - mxp_sig
Line 1488... Line 489...
1488
 
489
 
1489
mxp_lzo_sig1:
490
mxp_lzo_sig1:
1490
	xor	eax, eax
491
        xor     eax, eax
Line 1501... Line 502...
1501
	pop	ebx
502
        pop     ebx
1502
	add	ebx, [eax]
503
        add     ebx, [eax]
1503
	xor	edi, edi
504
        xor     edi, edi
1504
	cmp	byte [ebx], 11h
505
        cmp     byte [ebx], 11h
1505
	jbe	$+0x1A
506
        jbe     $+0x1A
-
 
507
 
1506
mxp_lzo_sig1_size = $ - mxp_lzo_sig1
508
mxp_lzo_sig1_size = $ - mxp_lzo_sig1
-
 
509
 
1507
mxp_lzo_sig2:
510
mxp_lzo_sig2:
1508
	xor	eax, eax
511
        xor     eax, eax
1509
	mov	ebp, 0FFh
512
        mov     ebp, 0FFh
1510
	mov	ecx, 188h	; or 177h
513
        mov     ecx, 188h       ; or 177h
1511
	mov	[eax], ecx
514
        mov     [eax], ecx
Line 1515... Line 518...
1515
	mov	edi, [eax+20h]
518
        mov     edi, [eax+20h]
1516
	rep	movsb
519
        rep movsb
1517
	jmp	dword [eax+20h]
520
        jmp     dword [eax+20h]
1518
	mov	ebx, [eax+20h]
521
        mov     ebx, [eax+20h]
1519
	add	ebx, [eax]
522
        add     ebx, [eax]
-
 
523
 
1520
mxp_lzo_sig2_size = $ - mxp_lzo_sig2
524
mxp_lzo_sig2_size = $ - mxp_lzo_sig2
Line -... Line 525...
-
 
525
 
-
 
526
;-----------------------------------------------------------------------------
-
 
527
;                         Reload executable event
1521
 
528
 
1522
OnReload:
529
OnReload:
1523
	cmp	[debuggee_pid], 0
530
        cmp     [debuggee_pid], 0
1524
	jnz	terminate_reload
531
        jnz     terminate_reload
1525
	mov	esi, need_debuggee
532
        mov     esi, need_debuggee
1526
	cmp	byte [loadname], 0
533
        cmp     byte [loadname], 0
1527
	jnz	do_reload
534
        jnz     do_reload
-
 
535
        jz      put_message
-
 
536
 
1528
	jz	put_message
537
; TODO: make it local
1529
terminate_reload:
538
terminate_reload:
-
 
539
        mov     [bReload], 1
-
 
540
 
-
 
541
;-----------------------------------------------------------------------------
-
 
542
;                        Terminate process event
1530
	mov	[bReload], 1
543
 
1531
OnTerminate:
544
OnTerminate:
1532
	mov	ecx, [debuggee_pid]
545
        ;mov     ecx, [debuggee_pid]
1533
	push	8
546
        ;push    8
1534
	pop	ebx
547
        ;pop     ebx
1535
	push	69
548
        ;push    69
1536
	pop	eax
549
        ;pop     eax
1537
	mcall
550
        mcall    69, 8, [debuggee_pid]
-
 
551
        ret
-
 
552
;-----------------------------------------------------------------------------
Line 1538... Line 553...
1538
	ret
553
;                         Suspend process event
1539
 
554
 
1540
AfterSuspend:
555
AfterSuspend:
1541
	mov	[bSuspended], 1
556
        mov     [bSuspended], 1
1542
	call	get_new_context
557
        call    get_new_context
1543
	call	get_dump
558
        call    get_dump
1544
	call	redraw_title
559
        call    redraw_title
1545
	call	redraw_registers
560
        call    draw_registers.redraw
1546
	call	redraw_dump
561
        call    draw_dump.redraw
Line 1547... Line 562...
1547
	call	update_disasm_eip
562
        call    update_disasm_eip
1548
	ret
563
        ret
1549
 
564
 
1550
OnSuspend:
565
OnSuspend:
1551
	mov	ecx, [debuggee_pid]
566
        ;mov     ecx, [debuggee_pid]
1552
	push	4
567
        ;push    4
1553
	pop	ebx
568
        ;pop     ebx
1554
	push	69
569
        ;push    69
1555
	pop	eax
570
        ;pop     eax
1556
	mcall
571
        mcall    69, 4, [debuggee_pid]
-
 
572
        call    AfterSuspend
-
 
573
        mov     esi, aSuspended
-
 
574
        jmp     put_message
-
 
575
 
1557
	call	AfterSuspend
576
;-----------------------------------------------------------------------------
1558
	mov	esi, aSuspended
577
;                        Resume process event
1559
	jmp	put_message
578
 
1560
DoResume:
579
DoResume:
1561
	mov	ecx, [debuggee_pid]
580
        ;mov     ecx, [debuggee_pid]
1562
	push	5
581
        ;push    5
1563
	pop	ebx
582
        ;pop     ebx
1564
	push	69
583
        ;push    69
1565
	pop	eax
584
        ;pop     eax
-
 
585
        mcall    69, 5, [debuggee_pid]
1566
	mcall
586
        mov     [bSuspended], 0
1567
	mov	[bSuspended], 0
587
        ret
1568
	ret
588
 
1569
OnResume:
589
OnResume:
1570
	mov	esi, [curarg]
590
        mov     esi, [curarg]
Line 1580... Line 600...
1580
	mov	bl, 5	; valid enabled one-shot
600
        mov     bl, 5   ; valid enabled one-shot
1581
	call	add_breakpoint
601
        call    add_breakpoint
1582
	jnc	GoOn
602
        jnc     GoOn
1583
	mov	esi, aBreakpointLimitExceeded
603
        mov     esi, aBreakpointLimitExceeded
1584
	call	put_message
604
        call    put_message
-
 
605
 
1585
.ret:
606
    .ret:
1586
	ret
607
        ret
-
 
608
 
1587
GoOn:
609
GoOn:
1588
; test for enabled breakpoint at eip
610
    ; test for enabled breakpoint at eip
1589
	mov	eax, [_eip]
611
        mov     eax, [_eip]
1590
	call	find_enabled_breakpoint
612
        call    find_enabled_breakpoint
1591
	jnz	.nobreak
613
        jnz     .nobreak
Line 1599... Line 621...
1599
	or	byte [_eflags+1], 1		; set TF
621
        or      byte [_eflags+1], 1             ; set TF
1600
	call	set_context
622
        call    set_context
1601
	and	byte [_eflags+1], not 1
623
        and     byte [_eflags+1], not 1
1602
	call	DoResume
624
        call    DoResume
1603
	ret
625
        ret
-
 
626
 
1604
.nobreak:
627
    .nobreak:
1605
	call	DoResume
628
        call    DoResume
1606
	call	redraw_title
629
        call    redraw_title
1607
	call	redraw_registers
630
        call    draw_registers.redraw
1608
	call	redraw_dump
631
        call    draw_dump.redraw
1609
	ret
632
        ret
-
 
633
 
-
 
634
;-----------------------------------------------------------------------------
-
 
635
;                        Detach process event
-
 
636
 
1610
OnDetach:
637
OnDetach:
1611
	mov	ecx, [debuggee_pid]
638
        ;mov     ecx, [debuggee_pid]
1612
	push	3
639
        ;push    3
1613
	pop	ebx
640
        ;pop     ebx
1614
	push	69
641
        ;push    69
1615
	pop	eax
642
        ;pop     eax
1616
	mcall
643
        mcall    69, 3, [debuggee_pid]
1617
	and	[debuggee_pid], 0
644
        and     [debuggee_pid], 0
1618
	call	redraw_title
645
        call    redraw_title
1619
	call	redraw_registers
646
        call    draw_registers.redraw
1620
	call	redraw_dump
647
        call    draw_dump.redraw
1621
	call	free_symbols
648
        call    free_symbols
1622
	mov	esi, aContinued
649
        mov     esi, aContinued
1623
	jmp	put_message
650
        jmp     put_message
Line 1624... Line 651...
1624
 
651
 
Line 1641... Line 668...
1641
	jnz	@f
668
        jnz     @f
1642
	lodsd
669
        lodsd
1643
	push	esi
670
        push    esi
1644
	call	get_dump
671
        call    get_dump
1645
	jmp	exception.done
672
        jmp     exception.done
-
 
673
 
-
 
674
    @@:
1646
@@:	test	eax, eax
675
        test    eax, eax
1647
	jz	.notint1
676
        jz      .notint1
1648
; if exception is result of single step, simply ignore it and continue
677
    ; if exception is result of single step, simply ignore it and continue
1649
	test	dword [esi], 0xF
678
        test    dword [esi], 0xF
1650
	jnz	dbgmsgstart.5
679
        jnz     dbgmsgstart.5
1651
	lodsd
680
        lodsd
Line 1654... Line 683...
1654
	mov	edi, context
683
        mov     edi, context
1655
	mov	ecx, 28h/4
684
        mov     ecx, 28h/4
1656
	rep	movsd
685
        rep movsd
1657
	call	DoResume
686
        call    DoResume
1658
	jmp	dbgmsgend
687
        jmp     dbgmsgend
-
 
688
 
1659
.notint1:
689
    .notint1:
1660
; in other case, work as without temp_break
690
    ; in other case, work as without temp_break
1661
	lodsd
691
        lodsd
1662
	push	esi
692
        push    esi
1663
	push	eax
693
        push    eax
1664
	jmp	exception.4
694
        jmp     exception.4
-
 
695
 
1665
.notour:
696
    .notour:
Line -... Line 697...
-
 
697
 
1666
 
698
; TODO: split it out
1667
debugmsg:
699
debugmsg:
1668
	neg	[dbgbufsize]
700
        neg     [dbgbufsize]
-
 
701
        mov     esi, dbgbuf
-
 
702
 
1669
	mov	esi, dbgbuf
703
; TODO: make it local
1670
dbgmsgstart:
704
dbgmsgstart:
1671
	lodsd
705
        lodsd
1672
;	push	eax esi
706
;       push    eax esi
1673
;	push	dword [esi]
707
;       push    dword [esi]
Line 1685... Line 719...
1685
	push	esi
719
        push    esi
1686
	call	get_new_context
720
        call    get_new_context
1687
	and	[_eflags], not 10100h		; clear TF,RF
721
        and     [_eflags], not 10100h           ; clear TF,RF
1688
	call	set_context
722
        call    set_context
1689
	pop	esi
723
        pop     esi
-
 
724
 
-
 
725
    ; TODO: WTF? Need for meaning label names
1690
.5:
726
    .5:
1691
	push	esi
727
        push    esi
1692
	call	get_dump
728
        call    get_dump
1693
	pop	esi
729
        pop     esi
1694
	lodsd
730
        lodsd
1695
	xor	ecx, ecx
731
        xor     ecx, ecx
-
 
732
 
1696
.6:
733
    .6:
1697
	bt	eax, ecx
734
        bt      eax, ecx
1698
	jnc	.7
735
        jnc     .7
1699
	mov	ebx, [drx_break+ecx*4]
736
        mov     ebx, [drx_break+ecx*4]
1700
	test	ebx, ebx
737
        test    ebx, ebx
Line 1703... Line 740...
1703
	dec	ebx
740
        dec     ebx
1704
	push	ebx
741
        push    ebx
1705
	mov	esi, aBreakStop
742
        mov     esi, aBreakStop
1706
	call	put_message_nodraw
743
        call    put_message_nodraw
1707
	popad
744
        popad
-
 
745
 
1708
.7:
746
    .7:
1709
	inc	ecx
747
        inc     ecx
1710
	cmp	cl, 4
748
        cmp     cl, 4
1711
	jb	.6
749
        jb      .6
1712
	push	esi
750
        push    esi
1713
	jmp	exception.done_draw
751
        jmp     exception.done_draw
-
 
752
 
-
 
753
; TODO: make it local
1714
terminated:
754
terminated:
1715
	push	esi
755
        push    esi
1716
	mov	esi, terminated_msg
756
        mov     esi, terminated_msg
1717
	call	put_message
757
        call    put_message
1718
	and	[debuggee_pid], 0
758
        and     [debuggee_pid], 0
Line 1725... Line 765...
1725
	cmp	[bReload], 1
765
        cmp     [bReload], 1
1726
	sbb	[bReload], -1
766
        sbb     [bReload], -1
1727
	jnz	exception.done
767
        jnz     exception.done
1728
	call	free_symbols
768
        call    free_symbols
1729
	jmp	exception.done
769
        jmp     exception.done
-
 
770
 
1730
exception:
771
exception:
1731
	mov	[bSuspended], 1
772
        mov     [bSuspended], 1
1732
	cmp	[bAfterGo], 0
773
        cmp     [bAfterGo], 0
1733
	jnz	after_go_exception
774
        jnz     after_go_exception
1734
	lodsd
775
        lodsd
1735
	push	esi
776
        push    esi
1736
	push	eax
777
        push    eax
1737
	call	get_new_context
778
        call    get_new_context
1738
	and	[_eflags], not 10100h		; clear TF,RF
779
        and     [_eflags], not 10100h           ; clear TF,RF
1739
	call	set_context
780
        call    set_context
-
 
781
 
-
 
782
    ; TODO: fix for useful name
1740
.4:
783
    .4:
1741
	call	get_dump
784
        call    get_dump
1742
	pop	eax
785
        pop     eax
1743
; int3 command generates exception 0D, #GP
786
    ; int3 command generates exception 0D, #GP
1744
	push	eax
787
        push    eax
1745
	cmp	al, 0Dh
788
        cmp     al, 0Dh
1746
	jnz	.notdbg
789
        jnz     .notdbg
1747
; check for 0xCC byte at eip
790
    ; check for 0xCC byte at eip
1748
	push	0
791
        push    0
1749
	push	69
792
        ;push    69
1750
	pop	eax
793
        ;pop     eax
1751
	push	6
794
        ;push    6
1752
	pop	ebx
795
        ;pop     ebx
1753
	mov	ecx, [debuggee_pid]
796
        ;mov     ecx, [debuggee_pid]
1754
	mov	edi, esp
797
        ;mov     edi, esp
1755
	mov	esi, [_eip]
798
        ;mov     esi, [_eip]
1756
	push	1
799
        ;push    1
1757
	pop	edx
800
        ;pop     edx
1758
	mcall
801
        mcall    69, 6, [debuggee_pid], 1, [_eip], esp
1759
	pop	eax
802
        pop     eax
1760
	cmp	al, 0xCC
803
        cmp     al, 0xCC
1761
	jnz	.notdbg
804
        jnz     .notdbg
1762
; this is either dbg breakpoint or int3 cmd in debuggee
805
    ; this is either dbg breakpoint or int3 cmd in debuggee
1763
	mov	eax, [_eip]
806
        mov     eax, [_eip]
Line 1770... Line 813...
1770
	test	byte [edi+4], 4
813
        test    byte [edi+4], 4
1771
	jz	.put_msg_eax
814
        jz      .put_msg_eax
1772
	pop	ecx
815
        pop     ecx
1773
	call	clear_breakpoint
816
        call    clear_breakpoint
1774
	jmp	.done
817
        jmp     .done
-
 
818
 
1775
.user_int3:
819
    .user_int3:
1776
	mov	eax, [_eip]
820
        mov     eax, [_eip]
1777
	inc	[_eip]
821
        inc     [_eip]
1778
	pop	ecx
822
        pop     ecx
1779
	push	eax
823
        push    eax
1780
	call	set_context
824
        call    set_context
1781
	mov	esi, aUserBreak
825
        mov     esi, aUserBreak
1782
	jmp	.put_msg_eax
826
        jmp     .put_msg_eax
-
 
827
 
1783
.notdbg:
828
    .notdbg:
1784
	mov	esi, aException
829
        mov     esi, aException
-
 
830
 
1785
.put_msg_eax:
831
    .put_msg_eax:
1786
	call	put_message_nodraw
832
        call    put_message_nodraw
-
 
833
 
1787
.done_draw:
834
    .done_draw:
1788
	call	draw_messages
835
        call    draw_messages
-
 
836
 
1789
.done:
837
    .done:
1790
	push	18
838
        ;push    18
1791
	pop	eax
839
        ;pop     eax
1792
	push	3
840
        ;push    3
1793
	pop	ebx
841
        ;pop     ebx
1794
	mov	ecx, [dbgwnd]
842
        ;mov     ecx, [dbgwnd]
1795
	mcall	; activate dbg window
843
        mcall    18, 3, [dbgwnd]    ; activate dbg window
1796
	call	redraw_title
844
        call    redraw_title
1797
	call	redraw_registers
845
        call    draw_registers.redraw
1798
	call	redraw_dump
846
        call    draw_dump.redraw
1799
	call	update_disasm_eip
847
        call    update_disasm_eip
-
 
848
 
1800
dbgmsgend:
849
dbgmsgend:
1801
	pop	esi
850
        pop     esi
1802
	mov	ecx, [dbgbuflen]
851
        mov     ecx, [dbgbuflen]
1803
	add	ecx, dbgbuf
852
        add     ecx, dbgbuf
1804
	cmp	esi, ecx
853
        cmp     esi, ecx
Line 1807... Line 856...
1807
	neg	[dbgbufsize]
856
        neg     [dbgbufsize]
1808
	cmp	[bReload], 2
857
        cmp     [bReload], 2
1809
	jnz	@f
858
        jnz     @f
1810
	mov	[bReload], 0
859
        mov     [bReload], 0
1811
	call	do_reload
860
        call    do_reload
-
 
861
 
1812
@@:
862
    @@:
1813
	jmp	waitevent
863
        jmp     waitevent
Line -... Line 864...
-
 
864
 
1814
 
865
; TODO: make it local
1815
CtrlF7:
866
CtrlF7:
1816
	cmp	[debuggee_pid], 0
867
        cmp     [debuggee_pid], 0
1817
	jz	.no
868
        jz      .no
-
 
869
        call    OnStep
1818
	call	OnStep
870
 
1819
.no:
871
    .no:
-
 
872
        jmp     waitevent
-
 
873
 
1820
	jmp	waitevent
874
; TODO: make it local
1821
CtrlF8:
875
CtrlF8:
1822
	cmp	[debuggee_pid], 0
876
        cmp     [debuggee_pid], 0
1823
	jz	CtrlF7.no
877
        jz      CtrlF7.no
1824
	call	OnProceed
878
        call    OnProceed
Line -... Line 879...
-
 
879
        jmp     CtrlF7.no
-
 
880
 
-
 
881
;-----------------------------------------------------------------------------
-
 
882
;                       Step execution event
1825
	jmp	CtrlF7.no
883
 
1826
 
884
;Here we get [] argument at do step  times
1827
OnStep:
885
OnStep:
-
 
886
        cmp     [bSuspended], 0
-
 
887
        jz      .running
-
 
888
        cmp     [step_num], 0
-
 
889
        jg      .stepone
-
 
890
        mov     esi, [curarg]
-
 
891
        cmp     byte [esi], 0
-
 
892
        jz      .stepone
-
 
893
        call    get_hex_number
-
 
894
        jc      .ret
-
 
895
        cmp     eax, 0 ; check if lesser or equal than 0
-
 
896
        jle     .ret
-
 
897
        mov     [step_num], eax
-
 
898
        mov     [curarg], 0
1828
	cmp	[bSuspended], 0
899
 
1829
	jz	.running
900
    .stepone:
1830
	call	get_context
901
        call    get_context
1831
	or	byte [_eflags+1], 1		; set TF
902
        or      byte [_eflags+1], 1             ; set TF
1832
	call	set_context
903
        call    set_context
1833
	and	byte [_eflags+1], not 1
904
        and     byte [_eflags+1], not 1
1834
; if instruction at eip is "int xx", set one-shot breakpoint immediately after
905
    ; if instruction at eip is "int xx", set one-shot breakpoint immediately after
1835
	mov	eax, [_eip]
906
        mov     eax, [_eip]
1836
	call	find_enabled_breakpoint
907
        call    find_enabled_breakpoint
1837
	jnz	@f
908
        jnz     @f
-
 
909
        cmp     byte [edi+5], 0xCD
1838
	cmp	byte [edi+5], 0xCD
910
        jz      .int
1839
	jz	.int
911
 
1840
@@:
912
     @@:
1841
	push	0
913
        push    0
1842
	push	69
914
        ;push    69
1843
	pop	eax
915
        ;pop     eax
1844
	push	6
916
        ;push    6
1845
	pop	ebx
917
        ;pop     ebx
1846
	mov	ecx, [debuggee_pid]
918
        ;mov     ecx, [debuggee_pid]
1847
	push	3
919
        ;push    3
1848
	pop	edx
920
        ;pop     edx
1849
	mov	edi, esp
921
        ;mov     edi, esp
1850
	mov	esi, [_eip]
922
        ;mov     esi, [_eip]
1851
	mcall
923
        mcall    69, 6, [debuggee_pid], 3, [_eip], esp
1852
	cmp	eax, edx
924
        cmp     eax, edx
1853
	pop	eax
925
        pop     eax
1854
	jnz	.doit
926
        jnz     .doit
1855
	cmp	al, 0xCD
927
        cmp     al, 0xCD
1856
	jz	.int
928
        jz      .int
1857
	cmp	ax, 0x050F
929
        cmp     ax, 0x050F
1858
	jz	.syscall
930
        jz      .syscall
-
 
931
        cmp     ax, 0x340F
1859
	cmp	ax, 0x340F
932
        jz      .sysenter
1860
	jz	.sysenter
933
 
1861
; resume process
934
    ; resume process
1862
.doit:
935
    .doit:
1863
	call	GoOn
936
        call    GoOn
1864
	cmp	[bAfterGo], 0
937
        cmp     [bAfterGo], 0
-
 
938
        jz      @f
1865
	jz	@f
939
        mov     [bAfterGo], 2
-
 
940
 
-
 
941
    @@:
-
 
942
        mov     eax, [step_num]
-
 
943
        dec     eax
-
 
944
        cmp     eax, 0
-
 
945
        jle     .ret
-
 
946
        mov     [step_num], eax
-
 
947
        jmp     .stepone
-
 
948
 
1866
	mov	[bAfterGo], 2
949
    .ret:
-
 
950
        mov     [step_num], 0
1867
@@:
951
        ret
-
 
952
 
1868
	ret
953
    ; return address is [ebp-4]
1869
.sysenter:	; return address is [ebp-4]
954
    .sysenter:
1870
	push	0
955
        push    0
1871
	push	69
956
        ;push    69
1872
	pop	eax
957
        ;pop     eax
1873
	inc	edx	; read 4 bytes
958
        inc     edx     ; read 4 bytes
1874
	mov	esi, [_ebp]
959
        mov     esi, [_ebp]
1875
	sub	esi, 4
960
        sub     esi, 4
1876
	mcall
961
        mcall    69
1877
	cmp	eax, edx
962
        cmp     eax, edx
1878
	pop	eax
963
        pop     eax
1879
	jnz	.syscall
964
        jnz     .syscall
1880
	push	eax
965
        push    eax
1881
	and	byte [_eflags+1], not 1
966
        and     byte [_eflags+1], not 1
1882
	call	set_context
967
        call    set_context
-
 
968
        pop     eax
1883
	pop	eax
969
        jmp     @f
1884
	jmp	@f
970
 
1885
.syscall:
971
    .syscall:
-
 
972
        and     byte [_eflags+1], not 1 ; clear TF - avoid system halt (!)
1886
	and	byte [_eflags+1], not 1	; clear TF - avoid system halt (!)
973
        call    set_context
1887
	call	set_context
974
 
1888
.int:
975
    .int:
1889
	mov	eax, [_eip]
976
        mov     eax, [_eip]
-
 
977
        inc     eax
1890
	inc	eax
978
        inc     eax
1891
	inc	eax
979
 
1892
@@:
980
    @@:
1893
	push	eax
981
        push    eax
1894
	call	find_enabled_breakpoint
982
        call    find_enabled_breakpoint
1895
	pop	eax
983
        pop     eax
1896
	jz	.doit
984
        jz      .doit
1897
; there is no enabled breakpoint yet; set temporary breakpoint
985
    ; there is no enabled breakpoint yet; set temporary breakpoint
1898
	mov	bl, 5
986
        mov     bl, 5
-
 
987
        call    add_breakpoint
1899
	call	add_breakpoint
988
        jmp     .doit
1900
	jmp	.doit
989
 
1901
.running:
990
    .running:
Line -... Line 991...
-
 
991
        mov     esi, aRunningErr
-
 
992
        jmp     put_message
-
 
993
 
1902
	mov	esi, aRunningErr
994
;-----------------------------------------------------------------------------
1903
	jmp	put_message
995
;                       Proceed process event
1904
 
996
 
-
 
997
OnProceed:
-
 
998
        cmp     [bSuspended], 0
-
 
999
        jz      OnStep.running
-
 
1000
        cmp     [proc_num], 0
-
 
1001
        jg      .procone
-
 
1002
        mov     esi, [curarg]
-
 
1003
        cmp     byte [esi], 0
-
 
1004
        jz      .procone
-
 
1005
        call    get_hex_number
-
 
1006
        jc      .ret
-
 
1007
        cmp     eax, 0 ; check if lesser than 0
-
 
1008
        jle     .ret
-
 
1009
        mov     [proc_num], eax
1905
OnProceed:
1010
        mov     [curarg], 0
-
 
1011
 
1906
	cmp	[bSuspended], 0
1012
    .procone:
1907
	jz	OnStep.running
1013
        mov     esi, [_eip]
1908
	mov	esi, [_eip]
1014
 
1909
@@:
1015
    @@:
1910
	call	get_byte_nobreak
1016
        call    get_byte_nobreak
1911
	jc	OnStep
1017
        jc      OnStep.stepone
1912
	inc	esi
1018
        inc     esi
1913
; skip prefixes
1019
    ; skip prefixes
1914
	call	is_prefix
1020
        call    is_prefix
1915
	jz	@b
1021
        jz      @b
1916
	cmp	al, 0xE8	; call
1022
        cmp     al, 0xE8        ; call
-
 
1023
        jnz     @f
1917
	jnz	@f
1024
        add     esi, 4
-
 
1025
        jmp     .doit
1918
	add	esi, 4
1026
 
1919
	jmp	.doit
1027
    ; A4,A5 = movs; A6,A7 = cmps
1920
@@:	; A4,A5 = movs, A6,A7=cmps
1028
    @@:
1921
	cmp	al, 0xA4
1029
        cmp     al, 0xA4
-
 
1030
        jb      @f
1922
	jb	@f
1031
        cmp     al, 0xA8
-
 
1032
        jb      .doit
1923
	cmp	al, 0xA8
1033
 
1924
	jb	.doit
1034
    ; AA,AB = stos; AC,AD = lods; AE,AF = scas
1925
@@:	; AA,AB=stos, AC,AD=lods, AE,AF=scas
1035
    @@:
1926
	cmp	al, 0xAA
1036
        cmp     al, 0xAA
-
 
1037
        jb      @f
1927
	jb	@f
1038
        cmp     al, 0xB0
-
 
1039
        jb      .doit
1928
	cmp	al, 0xB0
1040
 
1929
	jb	.doit
1041
    ; E0 = loopnz; E1 = loopz; E2 = loop
1930
@@:	; E0=loopnz,E1=loopz,E2=loop
1042
    @@:
1931
	cmp	al, 0xE0
1043
        cmp     al, 0xE0
1932
	jb	.noloop
1044
        jb      .noloop
1933
	cmp	al, 0xE2
1045
        cmp     al, 0xE2
-
 
1046
        ja      .noloop
1934
	ja	.noloop
1047
        inc     esi
-
 
1048
        jmp     .doit
1935
	inc	esi
1049
 
1936
	jmp	.doit
1050
    ; FF /2 = call
1937
.noloop:	; FF /2 = call
1051
    .noloop:
1938
	cmp	al, 0xFF
1052
        cmp     al, 0xFF
1939
	jnz	OnStep
1053
        jnz     OnStep.stepone
1940
	call	get_byte_nobreak
1054
        call    get_byte_nobreak
1941
	jc	OnStep
1055
        jc      OnStep.stepone
1942
	inc	esi
1056
        inc     esi
1943
	mov	cl, al
1057
        mov     cl, al
1944
	and	al, 00111000b
1058
        and     al, 00111000b
1945
	cmp	al, 00010000b
1059
        cmp     al, 00010000b
1946
	jnz	OnStep
1060
        jnz     OnStep.stepone
1947
; skip instruction
1061
    ; skip instruction
1948
	mov	al, cl
1062
        mov     al, cl
1949
	and	eax, 7
1063
        and     eax, 7
1950
	shr	cl, 6
1064
        shr     cl, 6
1951
	jz	.mod0
1065
        jz      .mod0
1952
	jp	.doit
1066
        jp      .doit
-
 
1067
        cmp     al, 4
1953
	cmp	al, 4
1068
        jnz     @f
1954
	jnz	@f
1069
        inc     esi
1955
	inc	esi
1070
 
1956
@@:
1071
    @@:
1957
	inc	esi
1072
        inc     esi
-
 
1073
        dec     cl
1958
	dec	cl
1074
        jz      @f
1959
	jz	@f
1075
        add     esi, 3
-
 
1076
 
1960
	add	esi, 3
1077
    @@:
1961
@@:
1078
        jmp     .doit
1962
	jmp	.doit
1079
 
1963
.mod0:
1080
    .mod0:
1964
	cmp	al, 4
1081
        cmp     al, 4
1965
	jnz	@f
1082
        jnz     @f
1966
	call	get_byte_nobreak
1083
        call    get_byte_nobreak
-
 
1084
        jc      OnStep.stepone
1967
	jc	OnStep
1085
        inc     esi
1968
	inc	esi
1086
        and     al, 7
1969
	and	al, 7
1087
 
1970
@@:
1088
    @@:
-
 
1089
        cmp     al, 5
1971
	cmp	al, 5
1090
        jnz     .doit
1972
	jnz	.doit
1091
        add     esi, 4
1973
	add	esi, 4
1092
 
1974
.doit:
1093
    .doit:
1975
; insert one-shot breakpoint at esi and resume
1094
    ; insert one-shot breakpoint at esi and resume
1976
	call	get_byte_nobreak
1095
        call    get_byte_nobreak
1977
	jc	OnStep
1096
        jc      OnStep.stepone
1978
	mov	eax, esi
1097
        mov     eax, esi
1979
	call	find_enabled_breakpoint
1098
        call    find_enabled_breakpoint
1980
	jz	.ret
1099
        jz      @f
1981
	mov	eax, esi
1100
        mov     eax, esi
-
 
1101
        mov     bl, 5
-
 
1102
        call    add_breakpoint
-
 
1103
        jmp     OnStep.doit
-
 
1104
 
-
 
1105
    @@:
-
 
1106
        mov     eax, [proc_num]
-
 
1107
        dec     eax
-
 
1108
        cmp     eax, 0
-
 
1109
        jle     .ret
1982
	mov	bl, 5
1110
        mov     [proc_num], eax
-
 
1111
        jmp     .procone
1983
	call	add_breakpoint
1112
 
Line -... Line 1113...
-
 
1113
    .ret:
-
 
1114
        mov     [proc_num], 0
-
 
1115
        ret
1984
	jmp	OnStep.doit
1116
 
1985
.ret:
1117
;-----------------------------------------------------------------------------
1986
	ret
1118
;                        Read next byte of machine code
1987
 
1119
 
1988
get_byte_nobreak:
1120
get_byte_nobreak:
1989
	mov	eax, esi
1121
        mov     eax, esi
1990
	call	find_enabled_breakpoint
1122
        call    find_enabled_breakpoint
-
 
1123
        jnz     .nobreak
1991
	jnz	.nobreak
1124
        mov     al, [edi+5]
1992
	mov	al, [edi+5]
1125
        clc
1993
	clc
1126
        ret
1994
	ret
1127
    
1995
.nobreak:
1128
    .nobreak:
1996
	push	69
1129
        ;push    69
1997
	pop	eax
1130
        ;pop     eax
1998
	push	6
1131
        ;push    6
1999
	pop	ebx
1132
        ;pop     ebx
2000
	mov	ecx, [debuggee_pid]
1133
        ;mov     ecx, [debuggee_pid]
2001
	xor	edx, edx
1134
        xor     edx, edx
2002
	push	edx
1135
        push    edx
2003
	inc	edx
1136
        inc     edx
2004
	mov	edi, esp
1137
        mov     edi, esp
2005
	mcall
1138
        mcall    69, 6, [debuggee_pid]
2006
	dec	eax
-
 
2007
	clc
-
 
Line 2008... Line -...
2008
	jz	@f
-
 
2009
	stc
-
 
2010
@@:	pop	eax
-
 
2011
	ret
-
 
2012
 
-
 
2013
is_prefix:
-
 
2014
	cmp	al, 0x64	; fs:
-
 
2015
	jz	.ret
-
 
2016
	cmp	al, 0x65	; gs:
-
 
2017
	jz	.ret
-
 
2018
	cmp	al, 0x66	; use16/32
-
 
2019
	jz	.ret
-
 
2020
	cmp	al, 0x67	; addr16/32
-
 
2021
	jz	.ret
-
 
2022
	cmp	al, 0xF0	; lock
-
 
2023
	jz	.ret
-
 
2024
	cmp	al, 0xF2	; repnz
-
 
2025
	jz	.ret
-
 
2026
	cmp	al, 0xF3	; rep(z)
-
 
2027
	jz	.ret
-
 
2028
	cmp	al, 0x2E	; cs:
-
 
2029
	jz	.ret
-
 
2030
	cmp	al, 0x36	; ss:
-
 
2031
	jz	.ret
-
 
2032
	cmp	al, 0x3E	; ds:
-
 
2033
	jz	.ret
-
 
2034
	cmp	al, 0x26	; es:
-
 
2035
.ret:	ret
-
 
2036
 
-
 
2037
token_end	equ	1
-
 
2038
token_reg	equ	2
-
 
2039
token_hex	equ	3
-
 
2040
token_add	equ	4
-
 
2041
token_sub	equ	5
-
 
2042
token_mul	equ	6
-
 
2043
token_div	equ	7
-
 
2044
token_lp	equ	8
-
 
2045
token_rp	equ	9
-
 
2046
token_err	equ	-1
-
 
2047
 
-
 
2048
is_hex_digit:
-
 
2049
	cmp	al, '0'
-
 
2050
	jb	.no
-
 
2051
	cmp	al, '9'
-
 
2052
	jbe	.09
-
 
2053
	cmp	al, 'A'
-
 
2054
	jb	.no
-
 
2055
	cmp	al, 'F'
-
 
2056
	jbe	.AF
-
 
2057
	cmp	al, 'a'
-
 
2058
	jb	.no
-
 
2059
	cmp	al, 'f'
-
 
2060
	jbe	.af
-
 
2061
.no:
-
 
2062
	stc
-
 
2063
	ret
-
 
2064
.09:
-
 
2065
	sub	al, '0'
-
 
2066
;	clc
-
 
2067
	ret
-
 
2068
.AF:
-
 
2069
	sub	al, 'A'-10
-
 
2070
;	clc
-
 
2071
	ret
-
 
2072
.af:
-
 
2073
	sub	al, 'a'-10
-
 
2074
;	clc
-
 
2075
	ret
-
 
2076
 
-
 
2077
find_reg:
-
 
2078
	mov	edi, reg_table
-
 
2079
.findreg:
-
 
2080
	movzx	ecx, byte [edi]
1139
        dec     eax
2081
	stc
-
 
2082
	jecxz	.regnotfound
-
 
2083
	inc	edi
-
 
2084
	push	esi edi ecx
-
 
2085
@@:
-
 
2086
	lodsb
-
 
2087
	or	al, 20h
-
 
2088
	scasb
-
 
2089
	loopz	@b
-
 
2090
	pop	ecx edi esi
-
 
2091
	lea	edi, [edi+ecx+1]
-
 
2092
	jnz	.findreg
-
 
2093
	movzx	edi, byte [edi-1]
-
 
2094
	add	esi, ecx
-
 
2095
.regnotfound:
-
 
2096
	ret
-
 
2097
 
-
 
2098
expr_get_token:
-
 
2099
	lodsb
-
 
2100
	cmp	al, 0
-
 
2101
	jz	.end_token
-
 
2102
	cmp	al, ' '
-
 
2103
	jbe	expr_get_token
-
 
2104
	cmp	al, '+'
-
 
2105
	jz	.add
-
 
2106
	cmp	al, '-'
-
 
2107
	jz	.sub
-
 
2108
	cmp	al, '*'
-
 
2109
	jz	.mul
-
 
2110
	cmp	al, '/'
-
 
2111
	jz	.div
-
 
2112
	cmp	al, '('
-
 
2113
	jz	.lp
-
 
2114
	cmp	al, ')'
-
 
2115
	jnz	.notsign
-
 
2116
.rp:
-
 
2117
	mov	al, token_rp
-
 
2118
	ret
-
 
2119
.div:
-
 
2120
	mov	al, token_div
-
 
2121
	ret
-
 
2122
.end_token:
-
 
2123
	mov	al, token_end
-
 
2124
	ret
-
 
2125
.add:
-
 
2126
	mov	al, token_add
-
 
2127
	ret
-
 
2128
.sub:
-
 
2129
	mov	al, token_sub
-
 
2130
	ret
-
 
2131
.mul:
-
 
2132
	mov	al, token_mul
-
 
2133
	ret
-
 
2134
.lp:
-
 
2135
	mov	al, token_lp
-
 
2136
	ret
-
 
2137
.notsign:
-
 
2138
	dec	esi
-
 
2139
	call	find_reg
-
 
2140
	jc	.regnotfound
-
 
2141
	mov	al, token_reg
-
 
2142
	ret
-
 
2143
.regnotfound:
-
 
2144
; test for symbol
-
 
2145
	push	esi
-
 
2146
@@:
-
 
2147
	lodsb
-
 
2148
	cmp	al, ' '
-
 
2149
	ja	@b
-
 
2150
	push	eax
-
 
2151
	mov	byte [esi], 0
-
 
2152
	xchg	esi, [esp+4]
-
 
2153
	call	find_symbol_name
-
 
2154
	mov	edi, eax
-
 
2155
	pop	eax
-
 
2156
	xchg	esi, [esp]
-
 
2157
	mov	byte [esi], al
-
 
2158
	jc	@f
-
 
2159
	add	esp, 4
-
 
2160
	mov	al, token_hex
-
 
2161
	ret
-
 
2162
@@:
-
 
2163
	pop	esi
-
 
2164
; test for hex number
-
 
2165
	xor	ecx, ecx
-
 
2166
	xor	edi, edi
-
 
2167
	xor	eax, eax
-
 
2168
@@:
-
 
2169
	lodsb
-
 
2170
	call	is_hex_digit
-
 
2171
	jc	@f
-
 
2172
	shl	edi, 4
-
 
2173
	or	edi, eax
-
 
2174
	inc	ecx
-
 
2175
	jmp	@b
-
 
2176
@@:
-
 
2177
	dec	esi
-
 
2178
	jecxz	.err
-
 
2179
	cmp	ecx, 8
-
 
2180
	ja	.err
-
 
2181
	mov	al, token_hex
-
 
2182
	ret
-
 
2183
.err:
-
 
2184
	mov	al, token_err
-
 
2185
	mov	esi, aParseError
-
 
2186
	ret
-
 
2187
 
-
 
2188
expr_read2:
-
 
2189
	cmp	al, token_hex
-
 
2190
	jz	.hex
-
 
2191
	cmp	al, token_reg
-
 
2192
	jz	.reg
-
 
2193
	cmp	al, token_lp
-
 
2194
	jz	.lp
-
 
2195
	mov	al, token_err
-
 
2196
	mov	esi, aParseError
-
 
2197
	ret
-
 
2198
.hex:
-
 
2199
	mov	ebp, edi
-
 
2200
.ret:
-
 
2201
	jmp	expr_get_token
-
 
2202
.reg:
-
 
2203
	cmp	edi, 24
-
 
2204
	jz	.eip
-
 
2205
	sub	edi, 4
-
 
2206
	jb	.8lo
-
 
2207
	sub	edi, 4
-
 
2208
	jb	.8hi
-
 
2209
	sub	edi, 8
-
 
2210
	jb	.16
-
 
2211
	mov	ebp, [_eax+edi*4]
-
 
2212
	jmp	.ret
-
 
2213
.16:
-
 
2214
	movzx	ebp, word [_eax+(edi+8)*4]
-
 
2215
	jmp	.ret
-
 
2216
.8lo:
-
 
2217
	movzx	ebp, byte [_eax+(edi+4)*4]
-
 
2218
	jmp	.ret
-
 
2219
.8hi:
-
 
2220
	movzx	ebp, byte [_eax+(edi+4)*4+1]
-
 
2221
	jmp	.ret
-
 
2222
.eip:
-
 
2223
	mov	ebp, [_eip]
-
 
2224
	jmp	.ret
-
 
2225
.lp:
-
 
2226
	call	expr_get_token
-
 
2227
	call	expr_read0
-
 
2228
	cmp	al, token_err
-
 
2229
	jz	@f
-
 
2230
	cmp	al, token_rp
-
 
2231
	jz	expr_get_token
-
 
2232
	mov	al, token_err
-
 
2233
	mov	esi, aParseError
-
 
2234
@@:	ret
-
 
2235
 
-
 
2236
expr_read1:
-
 
2237
	call	expr_read2
-
 
2238
.1:
-
 
2239
	cmp	al, token_mul
-
 
2240
	jz	.mul
-
 
2241
	cmp	al, token_div
-
 
2242
	jz	.div
-
 
2243
	ret
-
 
2244
.mul:
-
 
2245
	push	ebp
-
 
2246
	call	expr_get_token
-
 
2247
	call	expr_read2
-
 
2248
	pop	edx
-
 
2249
; ebp := edx*ebp
-
 
2250
	imul	ebp, edx
-
 
2251
	jmp	.1
-
 
2252
.div:
-
 
2253
	push	ebp
-
 
2254
	call	expr_get_token
-
 
2255
	call	expr_read2
-
 
2256
	pop	edx
-
 
2257
; ebp := edx/ebp
-
 
2258
	test	ebp, ebp
-
 
2259
	jz	.div0
-
 
2260
	push	eax
1140
        clc
2261
	xor	eax, eax
-
 
2262
	xchg	eax, edx
-
 
2263
	div	ebp
-
 
2264
	xchg	eax, ebp
-
 
2265
	pop	eax
1141
        jz      @f
Line 2266... Line -...
2266
	jmp	.1
-
 
2267
.div0:
-
 
2268
	mov	al, token_err
-
 
2269
	mov	esi, aDivByZero
-
 
2270
	ret
-
 
2271
 
-
 
2272
expr_read0:
1142
        stc
2273
	xor	ebp, ebp
-
 
2274
	cmp	al, token_add
-
 
2275
	jz	.add
-
 
2276
	cmp	al, token_sub
-
 
2277
	jz	.sub
-
 
2278
	call	expr_read1
-
 
2279
.1:
-
 
2280
	cmp	al, token_add
-
 
2281
	jz	.add
-
 
2282
	cmp	al, token_sub
-
 
2283
	jz	.sub
-
 
2284
	ret
-
 
2285
.add:
-
 
2286
	push	ebp
-
 
2287
	call	expr_get_token
-
 
2288
	call	expr_read1
-
 
2289
	pop	edx
-
 
2290
; ebp := edx+ebp
-
 
2291
	add	ebp, edx
-
 
2292
	jmp	.1
-
 
2293
.sub:
-
 
2294
	push	ebp
-
 
2295
	call	expr_get_token
-
 
Line 2296... Line -...
2296
	call	expr_read1
-
 
2297
	pop	edx
1143
    
2298
; ebp := edx-ebp
-
 
2299
	xchg	edx, ebp
1144
    @@:
2300
	sub	ebp, edx
-
 
2301
	jmp	.1
-
 
2302
 
-
 
2303
calc_expression:
-
 
2304
; in: esi->expression
-
 
2305
; out: CF=1 if error
-
 
2306
;      CF=0 and ebp=value if ok
-
 
2307
	call	expr_get_token
-
 
2308
	call	expr_read0
-
 
2309
	cmp	al, token_end
-
 
2310
	jz	.end
-
 
2311
	cmp	al, token_err
-
 
2312
	jz	@f
-
 
2313
	mov	esi, aParseError
-
 
Line 2314... Line 1145...
2314
@@:
1145
        pop     eax
2315
	call	put_message
1146
        ret
2316
	stc
1147
 
2317
	ret
1148
include 'parser.inc'
2318
.end:
1149
 
2319
	clc
1150
;-----------------------------------------------------------------------------
2320
	ret
1151
;                        Calculate expression event
2321
 
1152
 
-
 
1153
OnCalc:
2322
OnCalc:
1154
        mov     esi, [curarg]
2323
	mov	esi, [curarg]
1155
        call    calc_expression
Line -... Line 1156...
-
 
1156
        jc      .ret
-
 
1157
        push    ebp
-
 
1158
        mov     esi, calc_string
2324
	call	calc_expression
1159
        call    put_message_nodraw
2325
	jc	.ret
1160
        jmp     draw_messages
2326
	push	ebp
1161
    
2327
	mov	esi, calc_string
1162
    .ret:
2328
	call	put_message_nodraw
1163
        ret
2329
	jmp	draw_messages
1164
 
-
 
1165
;-----------------------------------------------------------------------------
2330
.ret:
1166
;                            Dump memory event
2331
	ret
1167
 
2332
 
1168
OnDump:
2333
OnDump:
1169
        mov     esi, [curarg]
-
 
1170
        cmp     byte [esi], 0
2334
	mov	esi, [curarg]
1171
        jnz     .param
2335
	cmp	byte [esi], 0
1172
        add     [dumppos], dump_height*10h
2336
	jnz	.param
1173
        jmp     .doit
-
 
1174
    
2337
	add	[dumppos], dump_height*10h
1175
    .param:
2338
	jmp	.doit
1176
        call    calc_expression
Line -... Line 1177...
-
 
1177
        jc      .ret
-
 
1178
        mov     [dumppos], ebp
-
 
1179
 
2339
.param:
1180
    .doit:
2340
	call	calc_expression
1181
        call    get_dump
2341
	jc	.ret
1182
        call    draw_dump.redraw
2342
	mov	[dumppos], ebp
1183
 
2343
.doit:
1184
    .ret:
2344
	call	get_dump
1185
        ret
2345
	call	redraw_dump
1186
 
-
 
1187
;-----------------------------------------------------------------------------
2346
.ret:
1188
;                   Dissassemble block of executable event
2347
	ret
1189
 
2348
 
1190
OnUnassemble:
2349
OnUnassemble:
1191
        mov     esi, [curarg]
2350
	mov	esi, [curarg]
1192
        cmp     byte [esi], 0
2351
	cmp	byte [esi], 0
1193
        jnz     .param
-
 
1194
        mov     eax, [disasm_start_pos]
2352
	jnz	.param
1195
        mov     ecx, disasm_height
2353
	mov	eax, [disasm_start_pos]
1196
        mov     [disasm_cur_pos], eax
2354
	mov	ecx, disasm_height
1197
 
2355
	mov	[disasm_cur_pos], eax
1198
    .l:
2356
.l:
1199
        mov     eax, [disasm_cur_pos]
2357
	mov	eax, [disasm_cur_pos]
1200
        call    find_symbol
-
 
1201
        jc      @f
2358
	call	find_symbol
1202
        dec     ecx
2359
	jc	@f
1203
        jz      .m
2360
	dec	ecx
1204
 
-
 
1205
    @@:
2361
	jz	.m
1206
        push    ecx
2362
@@:
1207
        call    disasm_instr
2363
	push	ecx
1208
        pop     ecx
2364
	call	disasm_instr
1209
        jc      .err
-
 
1210
        loop    .l
2365
	pop	ecx
1211
 
2366
	jc	.err
1212
    .m:
2367
	loop	.l
1213
        mov     eax, [disasm_cur_pos]
2368
.m:
1214
        jmp     .doit
2369
	mov	eax, [disasm_cur_pos]
1215
 
2370
	jmp	.doit
1216
    .param:
2371
.param:
1217
        call    calc_expression
2372
	call	calc_expression
1218
        jc      .ret
2373
	jc	.ret
1219
        mov     eax, ebp
2374
	mov	eax, ebp
1220
 
-
 
1221
    .doit:
2375
.doit:
1222
        push    eax
2376
	push	eax
1223
        push    [disasm_start_pos]
-
 
1224
        mov     [disasm_start_pos], eax
2377
	push	[disasm_start_pos]
1225
        call    update_disasm
2378
	mov	[disasm_start_pos], eax
1226
        pop     [disasm_start_pos]
-
 
1227
        pop     eax
2379
	call	update_disasm
1228
        cmp     [disasm_cur_str], 0
2380
	pop	[disasm_start_pos]
1229
        jz      @f
2381
	pop	eax
1230
        mov     [disasm_start_pos], eax
Line -... Line 1231...
-
 
1231
 
-
 
1232
    .ret:
-
 
1233
        ret
2382
	cmp	[disasm_cur_str], 0
1234
 
2383
	jz	@f
1235
    @@:
2384
	mov	[disasm_start_pos], eax
1236
        call    update_disasm
2385
.ret:
1237
 
2386
	ret
1238
    .err:
-
 
1239
        mov     esi, aInvAddr
2387
@@:
1240
        jmp     put_message
2388
	call	update_disasm
1241
 
2389
.err:
1242
;-----------------------------------------------------------------------------
-
 
1243
;                       Access to register value event
2390
	mov	esi, aInvAddr
1244
 
2391
	jmp	put_message
1245
OnReg:
2392
 
1246
        mov     esi, [curarg]
2393
OnReg:
1247
        call    get_arg.skip_spaces
2394
	mov	esi, [curarg]
1248
        call    find_reg
2395
	call	skip_spaces
1249
        jnc     @f
2396
	call	find_reg
1250
 
2397
	jnc	@f
1251
    .err:
2398
.err:
1252
        mov     esi, RSyntax
2399
	mov	esi, RSyntax
1253
        jmp     put_message
-
 
1254
 
2400
	jmp	put_message
1255
    @@:
2401
@@:
1256
        call    get_arg.skip_spaces
2402
	call	skip_spaces
1257
        test    al, al
2403
	test	al, al
1258
        jz      .err
2404
	jz	.err
1259
        cmp     al, '='
Line 2426... Line 1281...
2426
	jb	.8hi
1281
        jb      .8hi
2427
	sub	edi, 8
1282
        sub     edi, 8
2428
	jb	.16
1283
        jb      .16
2429
	mov	[_eax+edi*4], eax
1284
        mov     [_eax+edi*4], eax
2430
	jmp	.ret
1285
        jmp     .ret
-
 
1286
 
2431
.16:
1287
    .16:
2432
	mov	word [_eax+(edi+8)*4], ax
1288
        mov     word [_eax+(edi+8)*4], ax
2433
	jmp	.ret
1289
        jmp     .ret
-
 
1290
 
2434
.8lo:
1291
    .8lo:
2435
	mov	byte [_eax+(edi+4)*4], al
1292
        mov     byte [_eax+(edi+4)*4], al
2436
	jmp	.ret
1293
        jmp     .ret
-
 
1294
 
2437
.8hi:
1295
    .8hi:
2438
	mov	byte [_eax+(edi+4)*4+1], al
1296
        mov     byte [_eax+(edi+4)*4+1], al
2439
	jmp	.ret
1297
        jmp     .ret
-
 
1298
 
2440
.eip:
1299
    .eip:
2441
	mov	[_eip], eax
1300
        mov     [_eip], eax
2442
	call	update_disasm_eip
1301
        call    update_disasm_eip
-
 
1302
 
2443
.ret:
1303
    .ret:
2444
	call	set_context
1304
        call    set_context
2445
	jmp	redraw_registers
1305
        jmp     draw_registers.redraw
Line -... Line 1306...
-
 
1306
 
2446
 
1307
;-----------------------------------------------------------------------------
2447
; Breakpoints manipulation
1308
;                        Breakpoints manipulation
2448
OnBp:
1309
OnBp:
2449
	mov	esi, [curarg]
1310
        mov     esi, [curarg]
2450
	call	calc_expression
1311
        call    calc_expression
Line 2455... Line 1316...
2455
	inc	eax
1316
        inc     eax
2456
	pop	eax
1317
        pop     eax
2457
	jz	.notfound
1318
        jz      .notfound
2458
	mov	esi, aDuplicateBreakpoint
1319
        mov     esi, aDuplicateBreakpoint
2459
	jmp	.sayerr
1320
        jmp     .sayerr
-
 
1321
 
2460
.notfound:
1322
    .notfound:
2461
	mov	bl, 1
1323
        mov     bl, 1
2462
	call	add_breakpoint
1324
        call    add_breakpoint
2463
	jnc	.ret
1325
        jnc     .ret
2464
	mov	esi, aBreakpointLimitExceeded
1326
        mov     esi, aBreakpointLimitExceeded
-
 
1327
 
2465
.sayerr:
1328
    .sayerr:
2466
	call	put_message
1329
        call    put_message
-
 
1330
 
2467
.ret:
1331
    .ret:
2468
	jmp	redraw_disasm
1332
        jmp     draw_disasm.redraw
Line 2469... Line 1333...
2469
 
1333
 
2470
OnBpmb:
1334
OnBpmb:
2471
	mov	dh, 0011b
1335
        mov     dh, 0011b
-
 
1336
        jmp     DoBpm
2472
	jmp	DoBpm
1337
 
2473
OnBpmw:
1338
OnBpmw:
2474
	mov	dh, 0111b
1339
        mov     dh, 0111b
-
 
1340
        jmp     DoBpm
2475
	jmp	DoBpm
1341
 
2476
OnBpmd:
1342
OnBpmd:
-
 
1343
        mov     dh, 1111b
2477
	mov	dh, 1111b
1344
 
2478
DoBpm:
1345
DoBpm:
2479
	mov	esi, [curarg]
1346
        mov     esi, [curarg]
2480
	cmp	byte [esi], 'w'
1347
        cmp     byte [esi], 'w'
2481
	jnz	@f
1348
        jnz     @f
2482
	and	dh, not 2
1349
        and     dh, not 2
-
 
1350
        inc     esi
2483
	inc	esi
1351
 
2484
@@:
1352
    @@:
2485
	push	edx
1353
        push    edx
2486
	call	calc_expression
1354
        call    calc_expression
2487
	pop	edx
1355
        pop     edx
2488
	jnc	@f
1356
        jnc     @f
2489
	ret
1357
        ret
2490
@@:
1358
 
-
 
1359
    ; ebp = expression, dh = flags
2491
; ebp=expression, dh=flags
1360
    @@:
2492
	movzx	eax, dh
1361
        movzx   eax, dh
2493
	shr	eax, 2
1362
        shr     eax, 2
2494
	test	ebp, eax
1363
        test    ebp, eax
2495
	jz	@f
1364
        jz      @f
2496
	mov	esi, aUnaligned
1365
        mov     esi, aUnaligned
-
 
1366
        jmp     put_message
2497
	jmp	put_message
1367
 
2498
@@:
1368
    @@:
2499
	mov	eax, ebp
1369
        mov     eax, ebp
2500
	mov	bl, 0Bh
1370
        mov     bl, 0Bh
2501
	call	add_breakpoint
1371
        call    add_breakpoint
2502
	jnc	@f
1372
        jnc     @f
2503
	mov	esi, aBreakpointLimitExceeded
1373
        mov     esi, aBreakpointLimitExceeded
2504
	jmp	put_message
1374
        jmp     put_message
2505
@@:
1375
 
-
 
1376
    ; now find index
2506
; now find index
1377
    @@:
2507
	push	eax
1378
        push    eax
-
 
1379
        xor     ecx, ecx
2508
	xor	ecx, ecx
1380
 
2509
.l1:
1381
    .l1:
2510
	cmp	[drx_break+ecx*4], 0
1382
        cmp     [drx_break+ecx*4], 0
2511
	jnz	.l2
1383
        jnz     .l2
2512
	push	69
1384
        ;push    69
2513
	pop	eax
1385
        ;pop     eax
2514
	push	ecx
1386
        push    ecx
2515
	mov	dl, cl
1387
        mov     dl, cl
2516
	mov	ecx, [debuggee_pid]
1388
        ;mov     ecx, [debuggee_pid]
2517
	mov	esi, ebp
1389
        mov     esi, ebp
2518
	push	9
1390
        ;push    9
2519
	pop	ebx
1391
        ;pop     ebx
2520
	mcall
1392
        mcall    69, 9, [debuggee_pid]
2521
	test	eax, eax
1393
        test    eax, eax
2522
	jz	.ok
1394
        jz      .ok
-
 
1395
        pop     ecx
2523
	pop	ecx
1396
 
2524
.l2:
1397
    .l2:
2525
	inc	ecx
1398
        inc     ecx
2526
	cmp	ecx, 4
1399
        cmp     ecx, 4
2527
	jb	.l1
1400
        jb      .l1
2528
	pop	eax
1401
        pop     eax
2529
	call	clear_breakpoint
1402
        call    clear_breakpoint
2530
	mov	esi, aBreakpointLimitExceeded
1403
        mov     esi, aBreakpointLimitExceeded
-
 
1404
        jmp     put_message
2531
	jmp	put_message
1405
 
2532
.ok:
1406
    .ok:
2533
	pop	ecx
1407
        pop     ecx
2534
	pop	eax
1408
        pop     eax
2535
	and	byte [edi], not 2	; breakpoint is enabled
1409
        and     byte [edi], not 2       ; breakpoint is enabled
Line 2540... Line 1414...
2540
	mov	[drx_break+ecx*4], eax
1414
        mov     [drx_break+ecx*4], eax
2541
	ret
1415
        ret
Line 2542... Line 1416...
2542
 
1416
 
2543
OnBc:
1417
OnBc:
-
 
1418
        mov     esi, [curarg]
-
 
1419
 
2544
	mov	esi, [curarg]
1420
    @@:
2545
@@:	call	get_hex_number
1421
        call    get_hex_number
2546
	jc	OnBp.ret
1422
        jc      OnBp.ret
2547
	call	clear_breakpoint
1423
        call    clear_breakpoint
Line 2548... Line 1424...
2548
	jmp	@b
1424
        jmp     @b
2549
 
1425
 
-
 
1426
OnBd:
-
 
1427
        mov     esi, [curarg]
2550
OnBd:
1428
 
2551
	mov	esi, [curarg]
1429
    @@:
2552
@@:	call	get_hex_number
1430
        call    get_hex_number
2553
	jc	OnBp.ret
1431
        jc      OnBp.ret
Line 2554... Line 1432...
2554
	call	disable_breakpoint
1432
        call    disable_breakpoint
2555
	jmp	@b
1433
        jmp     @b
-
 
1434
 
-
 
1435
OnBe:
2556
 
1436
        mov     esi, [curarg]
2557
OnBe:
1437
 
2558
	mov	esi, [curarg]
1438
    @@:
2559
@@:	call	get_hex_number
1439
        call    get_hex_number
2560
	jc	OnBp.ret
1440
        jc      OnBp.ret
2561
	push	eax
1441
        push    eax
2562
	call	find_enabled_breakpoint
1442
        call    find_enabled_breakpoint
2563
	pop	eax
1443
        pop     eax
-
 
1444
        jz      .err
2564
	jz	.err
1445
        call    enable_breakpoint
2565
	call	enable_breakpoint
1446
        jmp     @b
2566
	jmp	@b
1447
 
Line -... Line 1448...
-
 
1448
    .err:
2567
.err:
1449
        mov     esi, OnBeErrMsg
2568
	mov	esi, OnBeErrMsg
1450
        jmp     put_message
2569
	jmp	put_message
1451
 
2570
 
1452
; TODO: split it out in parser.inc
-
 
1453
get_hex_number:
2571
get_hex_number:
1454
        call    get_arg.skip_spaces
2572
	call	skip_spaces
1455
        xor     ecx, ecx
2573
	xor	ecx, ecx
1456
        xor     edx, edx
2574
	xor	edx, edx
1457
 
2575
@@:
1458
    @@:
2576
	lodsb
1459
        lodsb
2577
	call	is_hex_digit
1460
        call    is_hex_digit
2578
	jc	.ret
1461
        jc      .ret
-
 
1462
        shl     edx, 4
2579
	shl	edx, 4
1463
        or      dl, al
2580
	or	dl, al
1464
        inc     ecx
2581
	inc	ecx
1465
        jmp     @b
2582
	jmp	@b
1466
 
2583
.ret:
1467
    .ret:
Line -... Line 1468...
-
 
1468
        dec     esi
-
 
1469
        cmp     ecx, 1
-
 
1470
        xchg    eax, edx
2584
	dec	esi
1471
        ret
2585
	cmp	ecx, 1
1472
 
2586
	xchg	eax, edx
1473
;-----------------------------------------------------------------------------
2587
	ret
1474
;                       Breakpoints list event
2588
 
1475
 
Line 2599... Line 1486...
2599
	lea	edi, [breakpoints + eax + eax*2]
1486
        lea     edi, [breakpoints + eax + eax*2]
2600
	pop	eax
1487
        pop     eax
2601
	test	byte [edi+4], 1
1488
        test    byte [edi+4], 1
2602
	jz	.err
1489
        jz      .err
2603
	call	show_break_info
1490
        call    show_break_info
-
 
1491
 
2604
.ret:
1492
    .ret:
2605
	ret
1493
        ret
-
 
1494
 
2606
.err:
1495
    .err:
2607
	mov	esi, aInvalidBreak
1496
        mov     esi, aInvalidBreak
2608
	jmp	put_message
1497
        jmp     put_message
-
 
1498
 
2609
.listall:
1499
    .listall:
2610
	mov	edi, breakpoints
1500
        mov     edi, breakpoints
2611
	xor	eax, eax
1501
        xor     eax, eax
-
 
1502
 
2612
@@:
1503
    @@:
2613
	test	byte [edi+4], 1
1504
        test    byte [edi+4], 1
2614
	jz	.cont
1505
        jz      .cont
2615
	push	edi eax
1506
        push    edi eax
2616
	call	show_break_info
1507
        call    show_break_info
2617
	pop	eax edi
1508
        pop     eax edi
-
 
1509
 
2618
.cont:
1510
    .cont:
2619
	add	edi, 6
1511
        add     edi, 6
2620
	inc	eax
1512
        inc     eax
2621
	cmp	eax, breakpoints_n
1513
        cmp     eax, breakpoints_n
2622
	jb	@b
1514
        jb      @b
2623
	ret
1515
        ret
Line -... Line 1516...
-
 
1516
 
-
 
1517
;-----------------------------------------------------------------------------
2624
 
1518
                              
2625
show_break_info:
1519
show_break_info:
2626
	push	edi
1520
        push    edi
2627
	test	byte [edi+4], 8
1521
        test    byte [edi+4], 8
2628
	jnz	.dr
1522
        jnz     .dr
2629
	push	dword [edi]
1523
        push    dword [edi]
2630
	push	eax
1524
        push    eax
2631
	mov	esi, aBreakNum
1525
        mov     esi, aBreakNum
2632
	call	put_message_nodraw
1526
        call    put_message_nodraw
-
 
1527
        jmp     .cmn
2633
	jmp	.cmn
1528
 
2634
.dr:
1529
    .dr:
2635
	push	eax
1530
        push    eax
2636
	mov	esi, aMemBreak1
1531
        mov     esi, aMemBreak1
2637
	call	put_message_nodraw
1532
        call    put_message_nodraw
2638
	pop	edi
1533
        pop     edi
2639
	push	edi
1534
        push    edi
2640
	mov	esi, aMemBreak2
1535
        mov     esi, aMemBreak2
2641
	test	byte [edi+5], 2
1536
        test    byte [edi+5], 2
2642
	jz	@f
1537
        jz      @f
-
 
1538
        mov     esi, aMemBreak3
2643
	mov	esi, aMemBreak3
1539
 
2644
@@:
1540
    @@:
2645
	call	put_message_nodraw
1541
        call    put_message_nodraw
2646
	pop	edi
1542
        pop     edi
2647
	push	edi
1543
        push    edi
Line 2650... Line 1546...
2650
	jnz	@f
1546
        jnz     @f
2651
	mov	esi, aMemBreak5
1547
        mov     esi, aMemBreak5
2652
	test	byte [edi+5], 4
1548
        test    byte [edi+5], 4
2653
	jnz	@f
1549
        jnz     @f
2654
	mov	esi, aMemBreak4
1550
        mov     esi, aMemBreak4
-
 
1551
 
2655
@@:
1552
    @@:
2656
	call	put_message_nodraw
1553
        call    put_message_nodraw
2657
	pop	edi
1554
        pop     edi
2658
	push	edi
1555
        push    edi
2659
	push	dword [edi]
1556
        push    dword [edi]
2660
	mov	esi, aMemBreak7
1557
        mov     esi, aMemBreak7
2661
	call	put_message_nodraw
1558
        call    put_message_nodraw
-
 
1559
 
2662
.cmn:
1560
    .cmn:
2663
	pop	edi
1561
        pop     edi
2664
	test	byte [edi+4], 2
1562
        test    byte [edi+4], 2
2665
	jz	@f
1563
        jz      @f
2666
	push	edi
1564
        push    edi
2667
	mov	esi, aDisabled
1565
        mov     esi, aDisabled
2668
	call	put_message_nodraw
1566
        call    put_message_nodraw
2669
	pop	edi
1567
        pop     edi
-
 
1568
 
2670
@@:
1569
    @@:
2671
	test	byte [edi+4], 4
1570
        test    byte [edi+4], 4
2672
	jz	@f
1571
        jz      @f
2673
	mov	esi, aOneShot
1572
        mov     esi, aOneShot
2674
	call	put_message_nodraw
1573
        call    put_message_nodraw
-
 
1574
 
2675
@@:
1575
    @@:
2676
	mov	esi, newline
1576
        mov     esi, newline
2677
	jmp	put_message
1577
        jmp     put_message
Line -... Line 1578...
-
 
1578
 
-
 
1579
;-----------------------------------------------------------------------------
-
 
1580
;                        Add breakpoint
-
 
1581
; in: EAX = address; BL = flags
-
 
1582
; out: CF = 1 => error
-
 
1583
;      CF = 0 and EAX = breakpoint number
2678
 
1584
 
2679
add_breakpoint:
-
 
2680
; in: eax=address, bl=flags
-
 
2681
; out: CF=1 => error, CF=0 => eax=breakpoint number
1585
add_breakpoint:
2682
	xor	ecx, ecx
1586
        xor     ecx, ecx
-
 
1587
        mov     edi, breakpoints
2683
	mov	edi, breakpoints
1588
 
2684
@@:
1589
    @@:
2685
	test	byte [edi+4], 1
1590
        test    byte [edi+4], 1
2686
	jz	.found
1591
        jz      .found
2687
	add	edi, 6
1592
        add     edi, 6
2688
	inc	ecx
1593
        inc     ecx
2689
	cmp	ecx, breakpoints_n
1594
        cmp     ecx, breakpoints_n
2690
	jb	@b
1595
        jb      @b
2691
	stc
1596
        stc
-
 
1597
        ret
2692
	ret
1598
 
2693
.found:
1599
    .found:
2694
	stosd
1600
        stosd
2695
	xchg	eax, ecx
1601
        xchg    eax, ecx
2696
	mov	[edi], bl
1602
        mov     [edi], bl
2697
	test	bl, 2
1603
        test    bl, 2
2698
	jnz	@f
1604
        jnz     @f
2699
	or	byte [edi], 2
1605
        or      byte [edi], 2
2700
	push	eax
1606
        push    eax
2701
	call	enable_breakpoint
1607
        call    enable_breakpoint
-
 
1608
        pop     eax
2702
	pop	eax
1609
 
2703
@@:
1610
    @@:
2704
	clc
1611
        clc
Line -... Line 1612...
-
 
1612
        ret
-
 
1613
 
-
 
1614
;-----------------------------------------------------------------------------
2705
	ret
1615
;                         Remove breakpoint
2706
 
1616
 
2707
clear_breakpoint:
1617
clear_breakpoint:
2708
	cmp	eax, breakpoints_n
1618
        cmp     eax, breakpoints_n
2709
	jae	.ret
1619
        jae     .ret
-
 
1620
        mov     ecx, 4
2710
	mov	ecx, 4
1621
        inc     eax
2711
	inc	eax
1622
 
2712
.1:
1623
    .1:
2713
	cmp	[drx_break-4+ecx*4], eax
1624
        cmp     [drx_break-4+ecx*4], eax
-
 
1625
        jnz     @f
-
 
1626
        and     [drx_break-4+ecx*4], 0
2714
	jnz	@f
1627
 
2715
	and	[drx_break-4+ecx*4], 0
1628
    @@:
2716
@@:	loop	.1
1629
        loop    .1
2717
	dec	eax
1630
        dec     eax
2718
	push	eax
1631
        push    eax
2719
	add	eax, eax
1632
        add     eax, eax
Line 2723... Line 1636...
2723
	jz	.ret
1636
        jz      .ret
2724
	push	edi
1637
        push    edi
2725
	call	disable_breakpoint
1638
        call    disable_breakpoint
2726
	pop	edi
1639
        pop     edi
2727
	mov	byte [edi], 0
1640
        mov     byte [edi], 0
-
 
1641
 
2728
.ret:
1642
    .ret:
2729
	ret
1643
        ret
Line -... Line 1644...
-
 
1644
 
-
 
1645
;-----------------------------------------------------------------------------
-
 
1646
;                          Disable breakpoint
2730
 
1647
 
2731
disable_breakpoint:
1648
disable_breakpoint:
2732
	cmp	eax, breakpoints_n
1649
        cmp     eax, breakpoints_n
2733
	jae	.ret
1650
        jae     .ret
2734
	add	eax, eax
1651
        add     eax, eax
Line 2739... Line 1656...
2739
	jnz	.ret
1656
        jnz     .ret
2740
	or	byte [edi-1], 2
1657
        or      byte [edi-1], 2
2741
	test	byte [edi-1], 8
1658
        test    byte [edi-1], 8
2742
	jnz	.dr
1659
        jnz     .dr
2743
	push	esi
1660
        push    esi
2744
	push	7
1661
        ;push    7
2745
	pop	ebx
1662
        ;pop     ebx
2746
	push	69
1663
        ;push    69
2747
	pop	eax
1664
        ;pop     eax
2748
	mov	ecx, [debuggee_pid]
1665
        ;mov     ecx, [debuggee_pid]
2749
	xor	edx, edx
1666
        ;xor     edx, edx
2750
	inc	edx
1667
        ;inc     edx
2751
	mov	esi, [edi-5]
1668
        ;mov     esi, [edi-5]
2752
	mcall
1669
        mcall    69, 7, [debuggee_pid], 1, [edi-5]
2753
	pop	esi
1670
        pop     esi
-
 
1671
 
2754
.ret:
1672
    .ret:
2755
	ret
1673
        ret
-
 
1674
 
2756
.dr:
1675
    .dr:
2757
	mov	dl, [edi]
1676
        mov     dl, [edi]
2758
	shr	dl, 6
1677
        shr     dl, 6
2759
	mov	dh, 80h
1678
        mov     dh, 80h
2760
	push	69
1679
        ;push    69
2761
	pop	eax
1680
        ;pop     eax
2762
	push	9
1681
        ;push    9
2763
	pop	ebx
1682
        ;pop     ebx
2764
	mov	ecx, [debuggee_pid]
1683
        ;mov     ecx, [debuggee_pid]
2765
	mcall
1684
        mcall    69, 9, [debuggee_pid]
2766
	ret
1685
        ret
Line -... Line 1686...
-
 
1686
 
-
 
1687
;-----------------------------------------------------------------------------
-
 
1688
;                           Enable breakpoint
2767
 
1689
 
2768
enable_breakpoint:
1690
enable_breakpoint:
2769
	push	esi
1691
        push    esi
2770
	cmp	eax, breakpoints_n
1692
        cmp     eax, breakpoints_n
2771
	jae	.ret
1693
        jae     .ret
Line 2776... Line 1698...
2776
	test	byte [edi-1], 2
1698
        test    byte [edi-1], 2
2777
	jz	.ret
1699
        jz      .ret
2778
	and	byte [edi-1], not 2
1700
        and     byte [edi-1], not 2
2779
	test	byte [edi-1], 8
1701
        test    byte [edi-1], 8
2780
	jnz	.dr
1702
        jnz     .dr
2781
	push	6
1703
        ;push    6
2782
	pop	ebx
1704
        ;pop     ebx
2783
	push	69
1705
        ;push    69
2784
	pop	eax
1706
        ;pop     eax
2785
	mov	esi, [edi-5]
1707
        ;mov     esi, [edi-5]
2786
	mov	ecx, [debuggee_pid]
1708
        ;mov     ecx, [debuggee_pid]
2787
	xor	edx, edx
1709
        ;xor     edx, edx
2788
	inc	edx
1710
        ;inc     edx
2789
	mcall
1711
        mcall    69, 6, [debuggee_pid], 1, [edi-5]
2790
	dec	eax
1712
        dec     eax
2791
	jnz	.err
1713
        jnz     .err
2792
	mov	al, 69
1714
        ;mov     al, 69
2793
	push	0xCC
1715
        push    0xCC
2794
	mov	edi, esp
1716
        mov     edi, esp
2795
	inc	ebx
1717
        inc     ebx
2796
	mcall
1718
        mcall    69
2797
	pop	eax
1719
        pop     eax
-
 
1720
 
2798
.ret:
1721
    .ret:
2799
	pop	esi
1722
        pop     esi
2800
	ret
1723
        ret
-
 
1724
 
2801
.err:
1725
    .err:
2802
	or	byte [edi-1], 2
1726
        or      byte [edi-1], 2
2803
	mov	esi, aBreakErr
1727
        mov     esi, aBreakErr
2804
	call	put_message
1728
        call    put_message
2805
	pop	esi
1729
        pop     esi
2806
	ret
1730
        ret
-
 
1731
 
2807
.dr:
1732
    .dr:
2808
	push	9
1733
        ;push    9
2809
	pop	ebx
1734
        ;pop     ebx
2810
	push	69
1735
        ;push    69
2811
	pop	eax
1736
        ;pop     eax
2812
	mov	esi, [edi-5]
1737
        mov     esi, [edi-5]
2813
	mov	ecx, [debuggee_pid]
1738
        ;mov     ecx, [debuggee_pid]
2814
	mov	dl, [edi]
1739
        mov     dl, [edi]
2815
	shr	dl, 6
1740
        shr     dl, 6
2816
	mov	dh, [edi]
1741
        mov     dh, [edi]
2817
	and	dh, 0xF
1742
        and     dh, 0xF
2818
	mcall
1743
        mcall    69, 9, [debuggee_pid]
2819
	test	eax, eax
1744
        test    eax, eax
2820
	jnz	.err
1745
        jnz     .err
2821
	pop	esi
1746
        pop     esi
2822
	ret
1747
        ret
Line -... Line 1748...
-
 
1748
 
-
 
1749
;-----------------------------------------------------------------------------
-
 
1750
;                             Find breakpoint
2823
 
1751
 
2824
find_breakpoint:
1752
find_breakpoint:
2825
	xor	ecx, ecx
1753
        xor     ecx, ecx
2826
	xchg	eax, ecx
1754
        xchg    eax, ecx
-
 
1755
        mov     edi, breakpoints
2827
	mov	edi, breakpoints
1756
 
2828
@@:
1757
    @@:
2829
	test	byte [edi+4], 1
1758
        test    byte [edi+4], 1
2830
	jz	.cont
1759
        jz      .cont
2831
	test	byte [edi+4], 8
1760
        test    byte [edi+4], 8
2832
	jnz	.cont
1761
        jnz     .cont
2833
	cmp	[edi], ecx
1762
        cmp     [edi], ecx
-
 
1763
        jz      .found
2834
	jz	.found
1764
 
2835
.cont:
1765
    .cont:
2836
	add	edi, 6
1766
        add     edi, 6
2837
	inc	eax
1767
        inc     eax
2838
	cmp	eax, breakpoints_n
1768
        cmp     eax, breakpoints_n
2839
	jb	@b
1769
        jb      @b
-
 
1770
        or      eax, -1
2840
	or	eax, -1
1771
 
2841
.found:
1772
    .found:
Line -... Line 1773...
-
 
1773
        ret
-
 
1774
 
-
 
1775
;-----------------------------------------------------------------------------
2842
	ret
1776
;
2843
 
1777
 
2844
find_enabled_breakpoint:
1778
find_enabled_breakpoint:
2845
	xor	ecx, ecx
1779
        xor     ecx, ecx
-
 
1780
        xchg    eax, ecx
2846
	xchg	eax, ecx
1781
        mov     edi, breakpoints
2847
	mov	edi, breakpoints
1782
 
2848
@@:
1783
    @@:
2849
	test	byte [edi+4], 1
1784
        test    byte [edi+4], 1
2850
	jz	.cont
1785
        jz      .cont
2851
	test	byte [edi+4], 2 or 8
1786
        test    byte [edi+4], 2 or 8
2852
	jnz	.cont
1787
        jnz     .cont
-
 
1788
        cmp     [edi], ecx
2853
	cmp	[edi], ecx
1789
        jz      .found
2854
	jz	.found
1790
 
2855
.cont:
1791
    .cont:
2856
	add	edi, 6
1792
        add     edi, 6
2857
	inc	eax
1793
        inc     eax
2858
	cmp	eax, breakpoints_n
1794
        cmp     eax, breakpoints_n
-
 
1795
        jb      @b
2859
	jb	@b
1796
        or      eax, -1
2860
	or	eax, -1
1797
 
Line -... Line 1798...
-
 
1798
    .found:
-
 
1799
        ret
-
 
1800
 
-
 
1801
; TODO: add find_disabled_breakpoint
-
 
1802
 
2861
.found:
1803
;-----------------------------------------------------------------------------
2862
	ret
1804
;                       Unpack executable event
2863
 
1805
 
2864
OnUnpack:
1806
OnUnpack:
2865
; program must be loaded - checked when command was parsed
1807
    ; program must be loaded - checked when command was parsed
2866
; program must be stopped
1808
    ; program must be stopped
2867
	mov	esi, aRunningErr
1809
        mov     esi, aRunningErr
2868
	cmp	[bSuspended], 0
1810
        cmp     [bSuspended], 0
-
 
1811
        jz      put_message
2869
	jz	put_message
1812
   ; all breakpoints must be disabled
2870
; all breakpoints must be disabled
1813
        mov     edi, breakpoints
2871
	mov	edi, breakpoints
1814
 
2872
@@:
1815
    @@:
2873
	test	byte [edi+4], 1
1816
        test    byte [edi+4], 1
2874
	jz	.cont
1817
        jz      .cont
2875
	test	byte [edi+4], 2
1818
        test    byte [edi+4], 2
-
 
1819
        jnz     .cont
2876
	jnz	.cont
1820
        mov     esi, aEnabledBreakErr
2877
	mov	esi, aEnabledBreakErr
1821
        jmp     put_message
2878
	jmp	put_message
1822
 
2879
.cont:
1823
    .cont:
2880
	add	edi, 6
1824
        add     edi, 6
Line 2886... Line 1830...
2886
	pop	ebx
1830
        pop     ebx
2887
	mov	ecx, [debuggee_pid]
1831
        mov     ecx, [debuggee_pid]
2888
	mov	dx, 1111b*256
1832
        mov     dx, 1111b*256
2889
	push	0xC
1833
        push    0xC
2890
	pop	esi
1834
        pop     esi
-
 
1835
 
2891
@@:
1836
    @@:
2892
	push	69
1837
        ;push    69
2893
	pop	eax
1838
        ;pop     eax
2894
	mcall
1839
        mcall    69
2895
	test	eax, eax
1840
        test    eax, eax
2896
	jz	.breakok
1841
        jz      .breakok
2897
	inc	edx
1842
        inc     edx
2898
	cmp	dl, 4
1843
        cmp     dl, 4
2899
	jb	@b
1844
        jb      @b
-
 
1845
 
2900
.breakok:
1846
    .breakok:
2901
	call	GoOn
1847
        call    GoOn
-
 
1848
 
2902
; now wait for event
1849
    ; now wait for event
2903
.wait:
1850
    .wait:
2904
	push	10
1851
        ;push    10
2905
	pop	eax
1852
        ;pop     eax
2906
	mcall
1853
        mcall    10
2907
	dec	eax
1854
        dec     eax
2908
	jz	.redraw
1855
        jz      .redraw
2909
	dec	eax
1856
        dec     eax
2910
	jz	.key
1857
        jz      .key
2911
	dec	eax
1858
        dec     eax
2912
	jnz	.debug
1859
        jnz     .debug
2913
; button; we have only one button, close
1860
    ; button; we have only one button, close
2914
	or	eax, -1
1861
        or      eax, -1
2915
	mcall
1862
        mcall
-
 
1863
 
2916
.redraw:
1864
    .redraw:
2917
	call	draw_window
1865
        call    draw_window
2918
	jmp	.wait
1866
        jmp     .wait
-
 
1867
 
2919
.key:
1868
    .key:
2920
	mov	al, 2
1869
        mov     al, 2
2921
	mcall
1870
        mcall
2922
	cmp	ah, 3	; Ctrl+C
1871
        cmp     ah, 3   ; Ctrl+C
2923
	jnz	.wait
1872
        jnz     .wait
-
 
1873
 
2924
.userbreak:
1874
    .userbreak:
2925
	mov	esi, aInterrupted
1875
        mov     esi, aInterrupted
-
 
1876
 
2926
.x1:
1877
    .x1:
2927
	push	edx esi
1878
        push    edx esi
2928
	call	put_message
1879
        call    put_message
2929
	pop	esi edx
1880
        pop     esi edx
2930
	or	dh, 80h
1881
        or      dh, 80h
2931
	push	69
1882
        ;push    69
2932
	pop	eax
1883
        ;pop     eax
2933
	push	9
1884
        ;push    9
2934
	pop	ebx
1885
        ;pop     ebx
2935
	mov	ecx, [debuggee_pid]
1886
        ;mov     ecx, [debuggee_pid]
2936
	mcall
1887
        mcall    69, 9, [debuggee_pid]
2937
	cmp	esi, aUnpacked
1888
        cmp     esi, aUnpacked
2938
	jnz	OnSuspend
1889
        jnz     OnSuspend
2939
	jmp	AfterSuspend
1890
        jmp     AfterSuspend
-
 
1891
 
2940
.debug:
1892
    .debug:
2941
	cmp	[dbgbuflen], 4*3
1893
        cmp     [dbgbuflen], 4*3
2942
	jnz	.notour
1894
        jnz     .notour
2943
	cmp	dword [dbgbuf], 3
1895
        cmp     dword [dbgbuf], 3
2944
	jnz	.notour
1896
        jnz     .notour
2945
	test	byte [dbgbuf+8], 1
1897
        test    byte [dbgbuf+8], 1
2946
	jnz	.our
1898
        jnz     .our
-
 
1899
 
2947
.notour:
1900
    .notour:
2948
	mov	esi, aInterrupted
1901
        mov     esi, aInterrupted
2949
	push	edx
1902
        push    edx
2950
	call	put_message
1903
        call    put_message
2951
	pop	edx
1904
        pop     edx
2952
	or	dh, 80h
1905
        or      dh, 80h
2953
	push	69
1906
        ;push    69
2954
	pop	eax
1907
        ;pop     eax
2955
	push	9
1908
        ;push    9
2956
	pop	ebx
1909
        ;pop     ebx
2957
	mov	ecx, [debuggee_pid]
1910
        ;mov     ecx, [debuggee_pid]
2958
	mcall
1911
        mcall    69, 9, [debuggee_pid]
2959
	jmp	debugmsg
1912
        jmp     debugmsg
-
 
1913
 
2960
.our:
1914
    .our:
2961
	and	[dbgbuflen], 0
1915
        and     [dbgbuflen], 0
2962
	push	edx
1916
        push    edx
2963
	call	get_context
1917
        call    get_context
2964
	push	eax
1918
        push    eax
2965
	mov	al, 69
1919
        ;mov     al, 69
2966
	mov	bl, 6
1920
        ;mov     bl, 6
2967
	mov	ecx, [debuggee_pid]
1921
        ;mov     ecx, [debuggee_pid]
2968
	mov	edi, esp
1922
        ;mov     edi, esp
2969
	push	4
1923
        ;push    4
2970
	pop	edx
1924
        ;pop     edx
2971
	push	0xC
1925
        ;push    0xC
2972
	pop	esi
1926
        ;pop     esi
2973
	mcall
1927
        mcall    69, 6, [debuggee_pid], 4, 0xC, esp
2974
	pop	eax
1928
        pop     eax
2975
	pop	edx
1929
        pop     edx
2976
	cmp	eax, [_eip]
1930
        cmp     eax, [_eip]
2977
	jz	.done
1931
        jz      .done
2978
	call	DoResume
1932
        call    DoResume
2979
	jmp	.wait
1933
        jmp     .wait
-
 
1934
 
2980
.done:
1935
    .done:
2981
	mov	esi, aUnpacked
1936
        mov     esi, aUnpacked
2982
	jmp	.x1
1937
        jmp     .x1
Line -... Line 1938...
-
 
1938
 
-
 
1939
;-----------------------------------------------------------------------------
-
 
1940
;                  Working with program symbols
-
 
1941
;
-
 
1942
;  TODO: split to symbols.inc
2983
 
1943
 
-
 
1944
include 'sort.inc'
-
 
1945
 
2984
include 'sort.inc'
1946
; compare what? Add context-relative comment and name
2985
compare:
1947
compare:
2986
	cmpsd
1948
        cmpsd
2987
	jnz	@f
1949
        jnz     @f
-
 
1950
        cmp     esi, edi
-
 
1951
 
2988
	cmp	esi, edi
1952
    @@:
-
 
1953
        ret
-
 
1954
 
2989
@@:	ret
1955
; purpose of this function?
2990
compare2:
1956
compare2:
-
 
1957
        cmpsd
2991
	cmpsd
1958
 
2992
@@:
1959
    @@:
2993
	cmpsb
1960
        cmpsb
2994
	jnz	@f
1961
        jnz     @f
2995
	cmp	byte [esi-1], 0
1962
        cmp     byte [esi-1], 0
2996
	jnz	@b
1963
        jnz     @b
-
 
1964
        cmp     esi, edi
2997
	cmp	esi, edi
1965
 
2998
@@:
1966
    @@:
Line 2999... Line 1967...
2999
	ret
1967
        ret
3000
 
1968
 
3001
free_symbols:
1969
free_symbols:
3002
	mov	ecx, [symbols]
1970
        mov     ecx, [symbols]
3003
	jecxz	@f
1971
        jecxz   @f
3004
	mcall	68, 13
1972
        mcall   68, 13
-
 
1973
        and     [symbols], 0
3005
	and	[symbols], 0
1974
        and     [num_symbols], 0
3006
	and	[num_symbols], 0
1975
 
-
 
1976
    @@:
-
 
1977
        ret
Line 3007... Line 1978...
3007
@@:
1978
;-----------------------------------------------------------------------------
3008
	ret
1979
;                        Load symbols event
3009
 
1980
 
3010
OnLoadSymbols.fileerr:
1981
OnLoadSymbols.fileerr:
3011
	test	ebp, ebp
1982
        test    ebp, ebp
-
 
1983
        jz      @f
3012
	jz	@f
1984
        mcall   68, 13, edi
3013
	mcall	68, 13, edi
1985
        ret
3014
	ret
1986
 
3015
@@:
1987
    @@:
3016
	push	eax
1988
        push    eax
Line 3021... Line 1993...
3021
	cmp	eax, 0x20
1993
        cmp     eax, 0x20
3022
	jae	.unk
1994
        jae     .unk
3023
	mov	esi, [load_err_msgs + eax*4]
1995
        mov     esi, [load_err_msgs + eax*4]
3024
	test	esi, esi
1996
        test    esi, esi
3025
	jnz	put_message
1997
        jnz     put_message
-
 
1998
 
3026
.unk:
1999
    .unk:
3027
	mov	esi, unk_err_msg2
2000
        mov     esi, unk_err_msg2
3028
	jmp	put_message
2001
        jmp     put_message
Line 3029... Line 2002...
3029
 
2002
 
3030
OnLoadSymbols:
2003
OnLoadSymbols:
3031
	xor	ebp, ebp
2004
        xor     ebp, ebp
3032
; load input file
2005
   ; load input file
3033
	mov	esi, [curarg]
2006
        mov     esi, [curarg]
-
 
2007
        call    free_symbols
3034
	call	free_symbols
2008
 
3035
.silent:
2009
    .silent:
3036
	xor	edi, edi
2010
        xor     edi, edi
3037
	cmp	[num_symbols], edi
2011
        cmp     [num_symbols], edi
-
 
2012
        jz      @f
-
 
2013
                                             
3038
	jz	@f
2014
        call    free_symbols
-
 
2015
        ;ret                                        
3039
	ret
2016
  
3040
@@:
2017
    @@:
3041
	mov	ebx, fn70_attr_block
2018
        mov     ebx, fn70_attr_block
3042
	mov	[ebx+21], esi
2019
        mov     [ebx+21], esi
3043
	mcall	70
2020
        mcall   70
Line 3059... Line 2036...
3059
	jnz	.fileerr
2036
        jnz     .fileerr
3060
; calculate memory requirements
2037
    ; calculate memory requirements
3061
	lea	edx, [ecx+edi-1]	; edx = EOF-1
2038
        lea     edx, [ecx+edi-1]        ; edx = EOF-1
3062
	mov	esi, edi
2039
        mov     esi, edi
3063
	xor	ecx, ecx
2040
        xor     ecx, ecx
-
 
2041
 
3064
.calcloop:
2042
    .calcloop:
3065
	cmp	esi, edx
2043
        cmp     esi, edx
3066
	jae	.calcdone
2044
        jae     .calcdone
3067
	cmp	word [esi], '0x'
2045
        cmp     word [esi], '0x'
3068
	jnz	.skipline
2046
        jnz     .skipline
3069
	inc	esi
2047
        inc     esi
3070
	inc	esi
2048
        inc     esi
-
 
2049
 
3071
@@:
2050
    @@:
3072
	cmp	esi, edx
2051
        cmp     esi, edx
3073
	jae	.calcdone
2052
        jae     .calcdone
3074
	lodsb
2053
        lodsb
3075
	or	al, 20h
2054
        or      al, 20h
Line 3078... Line 2057...
3078
	jbe	@b
2057
        jbe     @b
3079
	sub	al, 'a'-'0'-10
2058
        sub     al, 'a'-'0'-10
3080
	cmp	al, 15
2059
        cmp     al, 15
3081
	jbe	@b
2060
        jbe     @b
3082
	dec	esi
2061
        dec     esi
-
 
2062
 
3083
@@:
2063
    @@:
3084
	cmp	esi, edx
2064
        cmp     esi, edx
3085
	ja	.calcdone
2065
        ja      .calcdone
3086
	lodsb
2066
        lodsb
3087
	cmp	al, 20h
2067
        cmp     al, 20h
Line 3089... Line 2069...
3089
	jb	.calcloop
2069
        jb      .calcloop
3090
	cmp	al, 9
2070
        cmp     al, 9
3091
	jz	@b
2071
        jz      @b
3092
	add	ecx, 12+1
2072
        add     ecx, 12+1
3093
	inc	[num_symbols]
2073
        inc     [num_symbols]
-
 
2074
 
3094
@@:
2075
    @@:
3095
	inc	ecx
2076
        inc     ecx
3096
	cmp	esi, edx
2077
        cmp     esi, edx
3097
	ja	.calcdone
2078
        ja      .calcdone
3098
	lodsb
2079
        lodsb
3099
	cmp	al, 0xD
2080
        cmp     al, 0xD
3100
	jz	.calcloop
2081
        jz      .calcloop
3101
	cmp	al, 0xA
2082
        cmp     al, 0xA
3102
	jz	.calcloop
2083
        jz      .calcloop
3103
	jmp	@b
2084
        jmp     @b
-
 
2085
 
3104
.skipline:
2086
    .skipline:
3105
	cmp	esi, edx
2087
        cmp     esi, edx
3106
	jae	.calcdone
2088
        jae     .calcdone
3107
	lodsb
2089
        lodsb
3108
	cmp	al, 0xD
2090
        cmp     al, 0xD
3109
	jz	.calcloop
2091
        jz      .calcloop
3110
	cmp	al, 0xA
2092
        cmp     al, 0xA
3111
	jz	.calcloop
2093
        jz      .calcloop
3112
	jmp	.skipline
2094
        jmp     .skipline
-
 
2095
 
3113
.calcdone:
2096
    .calcdone:
3114
	mcall	68, 12
2097
        mcall   68, 12
3115
	test	eax, eax
2098
        test    eax, eax
3116
	jnz	.memok
2099
        jnz     .memok
3117
	inc	ebx
2100
        inc     ebx
3118
	mov	ecx, edi
2101
        mov     ecx, edi
3119
	mov	al, 68
2102
        mov     al, 68
3120
	mcall
2103
        mcall
-
 
2104
 
3121
.memerr:
2105
    .memerr:
3122
	mov	esi, aNoMemory
2106
        mov     esi, aNoMemory
3123
	jmp	put_message
2107
        jmp     put_message
-
 
2108
 
3124
.memok:
2109
    .memok:
3125
	mov	[symbols], eax
2110
        mov     [symbols], eax
3126
	mov	ebx, eax
2111
        mov     ebx, eax
3127
	push	edi
2112
        push    edi
3128
	mov	esi, edi
2113
        mov     esi, edi
3129
	mov	edi, [num_symbols]
2114
        mov     edi, [num_symbols]
3130
	lea	ebp, [eax+edi*4]
2115
        lea     ebp, [eax+edi*4]
3131
	lea	edi, [eax+edi*8]
2116
        lea     edi, [eax+edi*8]
-
 
2117
 
-
 
2118
    ; parse input data, 
3132
; parse input data, esi->input, edx->EOF, ebx->ptrs, edi->names
2119
    ; esi->input, edx->EOF, ebx->ptrs, edi->names
3133
.readloop:
2120
    .readloop:
3134
	cmp	esi, edx
2121
        cmp     esi, edx
3135
	jae	.readdone
2122
        jae     .readdone
3136
	cmp	word [esi], '0x'
2123
        cmp     word [esi], '0x'
3137
	jnz	.readline
2124
        jnz     .readline
3138
	inc	esi
2125
        inc     esi
3139
	inc	esi
2126
        inc     esi
3140
	xor	eax, eax
2127
        xor     eax, eax
3141
	xor	ecx, ecx
2128
        xor     ecx, ecx
-
 
2129
 
3142
@@:
2130
    @@:
3143
	shl	ecx, 4
2131
        shl     ecx, 4
3144
	add	ecx, eax
2132
        add     ecx, eax
3145
	cmp	esi, edx
2133
        cmp     esi, edx
3146
	jae	.readdone
2134
        jae     .readdone
Line 3151... Line 2139...
3151
	jbe	@b
2139
        jbe     @b
3152
	sub	al, 'a'-'0'-10
2140
        sub     al, 'a'-'0'-10
3153
	cmp	al, 15
2141
        cmp     al, 15
3154
	jbe	@b
2142
        jbe     @b
3155
	dec	esi
2143
        dec     esi
-
 
2144
 
3156
@@:
2145
    @@:
3157
	cmp	esi, edx
2146
        cmp     esi, edx
3158
	ja	.readdone
2147
        ja      .readdone
3159
	lodsb
2148
        lodsb
3160
	cmp	al, 20h
2149
        cmp     al, 20h
Line 3167... Line 2156...
3167
	mov	dword [ebp], edi
2156
        mov     dword [ebp], edi
3168
	add	ebp, 4
2157
        add     ebp, 4
3169
	mov	dword [edi], ecx
2158
        mov     dword [edi], ecx
3170
	add	edi, 4
2159
        add     edi, 4
3171
	stosb
2160
        stosb
-
 
2161
 
3172
@@:
2162
    @@:
3173
	xor	eax, eax
2163
        xor     eax, eax
3174
	stosb
2164
        stosb
3175
	cmp	esi, edx
2165
        cmp     esi, edx
3176
	ja	.readdone
2166
        ja      .readdone
Line 3179... Line 2169...
3179
	jz	.readloop
2169
        jz      .readloop
3180
	cmp	al, 0xA
2170
        cmp     al, 0xA
3181
	jz	.readloop
2171
        jz      .readloop
3182
	mov	byte [edi-1], al
2172
        mov     byte [edi-1], al
3183
	jmp	@b
2173
        jmp     @b
-
 
2174
 
3184
.readline:
2175
    .readline:
3185
	cmp	esi, edx
2176
        cmp     esi, edx
3186
	jae	.readdone
2177
        jae     .readdone
3187
	lodsb
2178
        lodsb
3188
	cmp	al, 0xD
2179
        cmp     al, 0xD
3189
	jz	.readloop
2180
        jz      .readloop
3190
	cmp	al, 0xA
2181
        cmp     al, 0xA
3191
	jz	.readloop
2182
        jz      .readloop
3192
	jmp	.readline
2183
        jmp     .readline
-
 
2184
 
3193
.readdone:
2185
    .readdone:
3194
	pop	ecx
2186
        pop     ecx
3195
	mcall	68, 13
2187
        mcall   68, 13
3196
	mov	ecx, [num_symbols]
2188
        mov     ecx, [num_symbols]
3197
	mov	edx, [symbols]
2189
        mov     edx, [symbols]
Line 3201... Line 2193...
3201
	lea	edx, [edx+ecx*4]
2193
        lea     edx, [edx+ecx*4]
3202
	mov	ebx, compare2
2194
        mov     ebx, compare2
3203
	call	sort
2195
        call    sort
3204
	mov	esi, aSymbolsLoaded
2196
        mov     esi, aSymbolsLoaded
3205
	call	put_message
2197
        call    put_message
3206
	jmp	redraw_disasm
2198
        jmp     draw_disasm.redraw
-
 
2199
 
-
 
2200
;-----------------------------------------------------------------------------
-
 
2201
;
-
 
2202
; in: EAX = address
-
 
2203
; out: ESI, CF
Line 3207... Line 2204...
3207
 
2204
 
3208
find_symbol:
-
 
3209
; in: eax=address
-
 
3210
; out: esi, CF
2205
find_symbol:
3211
	cmp	[num_symbols], 0
2206
        cmp     [num_symbols], 0
-
 
2207
        jnz     @f
3212
	jnz	@f
2208
 
3213
.ret0:
2209
    .ret0:
3214
	xor	esi, esi
2210
        xor     esi, esi
3215
	stc
2211
        stc
-
 
2212
        ret
3216
	ret
2213
 
3217
@@:
2214
    @@:
3218
	push	ebx ecx edx
2215
        push    ebx ecx edx
3219
	xor	edx, edx
2216
        xor     edx, edx
3220
	mov	esi, [symbols]
2217
        mov     esi, [symbols]
Line 3223... Line 2220...
3223
	cmp	[ebx], eax
2220
        cmp     [ebx], eax
3224
	jz	.donez
2221
        jz      .donez
3225
	jb	@f
2222
        jb      @f
3226
	pop	edx ecx ebx
2223
        pop     edx ecx ebx
3227
	jmp	.ret0
2224
        jmp     .ret0
-
 
2225
 
3228
@@:
2226
    @@:
3229
; invariant: symbols_addr[edx] < eax < symbols_addr[ecx]
2227
    ; invariant: symbols_addr[edx] < eax < symbols_addr[ecx]
-
 
2228
    ; TODO: add meaningful label names
3230
.0:
2229
    .0:
3231
	push	edx
2230
        push    edx
-
 
2231
 
3232
.1:
2232
    .1:
3233
	add	edx, ecx
2233
        add     edx, ecx
3234
	sar	edx, 1
2234
        sar     edx, 1
3235
	cmp	edx, [esp]
2235
        cmp     edx, [esp]
3236
	jz	.done2
2236
        jz      .done2
Line 3238... Line 2238...
3238
	cmp	[ebx], eax
2238
        cmp     [ebx], eax
3239
	jz	.done
2239
        jz      .done
3240
	ja	.2
2240
        ja      .2
3241
	mov	[esp], edx
2241
        mov     [esp], edx
3242
	jmp	.1
2242
        jmp     .1
-
 
2243
 
3243
.2:
2244
    .2:
3244
	mov	ecx, edx
2245
        mov     ecx, edx
3245
	pop	edx
2246
        pop     edx
3246
	jmp	.0
2247
        jmp     .0
-
 
2248
 
3247
.donecont:
2249
    .donecont:
3248
	dec	edx
2250
        dec     edx
-
 
2251
 
3249
.done:
2252
    .done:
3250
	test	edx, edx
2253
        test    edx, edx
3251
	jz	@f
2254
        jz      @f
3252
	mov	ebx, [esi+edx*4-4]
2255
        mov     ebx, [esi+edx*4-4]
3253
	cmp	[ebx], eax
2256
        cmp     [ebx], eax
3254
	jz	.donecont
2257
        jz      .donecont
-
 
2258
 
3255
@@:
2259
    @@:
3256
	pop	ecx
2260
        pop     ecx
-
 
2261
 
3257
.donez:
2262
    .donez:
3258
	mov	esi, [esi+edx*4]
2263
        mov     esi, [esi+edx*4]
3259
	add	esi, 4
2264
        add     esi, 4
3260
	pop	edx ecx ebx
2265
        pop     edx ecx ebx
3261
	clc
2266
        clc
3262
	ret
2267
        ret
-
 
2268
 
3263
.done2:
2269
    .done2:
3264
	lea	esi, [esi+edx*4]
2270
        lea     esi, [esi+edx*4]
3265
	pop	ecx edx ecx ebx
2271
        pop     ecx edx ecx ebx
3266
	stc
2272
        stc
3267
	ret
2273
        ret
Line -... Line 2274...
-
 
2274
 
3268
 
2275
;-----------------------------------------------------------------------------
3269
find_symbol_name:
2276
;
3270
; in: esi->name
2277
; in: esi->name
3271
; out: if found: CF clear, eax=value
2278
; out: if found: CF = 0, EAX = value
-
 
2279
;      otherwise CF = 1
3272
;      otherwise CF set
2280
find_symbol_name:
3273
	cmp	[num_symbols], 0
2281
        cmp     [num_symbols], 0
-
 
2282
        jnz     @f
3274
	jnz	@f
2283
 
3275
.stc_ret:
2284
    .stc_ret:
3276
	stc
2285
        stc
-
 
2286
        ret
3277
	ret
2287
 
3278
@@:
2288
    @@:
3279
	push	ebx ecx edx edi
2289
        push    ebx ecx edx edi
3280
	push	-1
2290
        push    -1
3281
	pop	edx
2291
        pop     edx
3282
	mov	ebx, [symbols]
2292
        mov     ebx, [symbols]
3283
	mov	ecx, [num_symbols]
2293
        mov     ecx, [num_symbols]
-
 
2294
        lea     ebx, [ebx+ecx*4]
3284
	lea	ebx, [ebx+ecx*4]
2295
    
3285
; invariant: symbols_name[edx] < name < symbols_name[ecx]
2296
    ; invariant: symbols_name[edx] < name < symbols_name[ecx]
3286
.0:
2297
    .0:
-
 
2298
        push    edx
3287
	push	edx
2299
 
3288
.1:
2300
    .1:
3289
	add	edx, ecx
2301
        add     edx, ecx
3290
	sar	edx, 1
2302
        sar     edx, 1
3291
	cmp	edx, [esp]
2303
        cmp     edx, [esp]
3292
	jz	.done2
2304
        jz      .done2
3293
	call	.cmp
2305
        call    .cmp
3294
	jz	.done
2306
        jz      .done
3295
	jb	.2
2307
        jb      .2
3296
	mov	[esp], edx
2308
        mov     [esp], edx
-
 
2309
        jmp     .1
3297
	jmp	.1
2310
 
3298
.2:
2311
    .2:
3299
	mov	ecx, edx
2312
        mov     ecx, edx
3300
	pop	edx
2313
        pop     edx
-
 
2314
        jmp     .0
3301
	jmp	.0
2315
 
3302
.done:
2316
    .done:
-
 
2317
        pop     ecx
3303
	pop	ecx
2318
 
3304
.donez:
2319
    .donez:
3305
	mov	eax, [ebx+edx*4]
2320
        mov     eax, [ebx+edx*4]
3306
	mov	eax, [eax]
2321
        mov     eax, [eax]
3307
	pop	edi edx ecx ebx
2322
        pop     edi edx ecx ebx
3308
	clc
2323
        clc
-
 
2324
        ret
3309
	ret
2325
 
3310
.done2:
2326
    .done2:
3311
	pop	edx edi edx ecx ebx
2327
        pop     edx edi edx ecx ebx
3312
	stc
2328
        stc
Line 3313... Line 2329...
3313
	ret
2329
        ret
3314
 
2330
 
3315
.cmp:
2331
    .cmp:
3316
	mov	edi, [ebx+edx*4]
2332
        mov     edi, [ebx+edx*4]
-
 
2333
        push    esi
3317
	push	esi
2334
        add     edi, 4
3318
	add	edi, 4
2335
 
3319
@@:
2336
    @@:
3320
	cmpsb
2337
        cmpsb
3321
	jnz	@f
2338
        jnz     @f
3322
	cmp	byte [esi-1], 0
-
 
3323
	jnz	@b
-
 
3324
@@:
-
 
3325
	pop	esi
-
 
3326
	ret
-
 
3327
 
-
 
3328
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
3329
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DISASSEMBLER ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
3330
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
3331
 
-
 
3332
disasm_get_byte:
-
 
3333
; out: al=byte
-
 
3334
	push	ecx
-
 
3335
	mov	ecx, [disasm_cur_pos]
-
 
3336
	sub	ecx, [disasm_start_pos]
-
 
3337
	cmp	ecx, [disasm_buf_size]
-
 
3338
	jae	disasm_err
-
 
3339
	mov	al, [disasm_buffer+ecx]
-
 
3340
	pop	ecx
-
 
3341
	inc	[disasm_cur_pos]
-
 
3342
	ret
-
 
3343
disasm_get_word:
-
 
3344
	push	ecx
-
 
3345
	mov	ecx, [disasm_cur_pos]
-
 
3346
	sub	ecx, [disasm_start_pos]
-
 
3347
	inc	ecx
-
 
3348
	cmp	ecx, [disasm_buf_size]
-
 
3349
	jae	disasm_err
-
 
3350
	mov	ax, word [disasm_buffer-1+ecx]
-
 
3351
	pop	ecx
-
 
3352
	add	[disasm_cur_pos], 2
-
 
3353
	ret
-
 
3354
disasm_get_dword:
-
 
3355
	push	ecx
-
 
3356
	mov	ecx, [disasm_cur_pos]
-
 
3357
	sub	ecx, [disasm_start_pos]
-
 
3358
	add	ecx, 3
-
 
3359
	cmp	ecx, [disasm_buf_size]
-
 
3360
	jae	disasm_err
-
 
3361
	mov	eax, dword [disasm_buffer-3+ecx]
-
 
3362
	pop	ecx
-
 
3363
	add	[disasm_cur_pos], 4
-
 
3364
	ret
-
 
3365
 
-
 
3366
disasm_err:
-
 
3367
	mov	esp, ebp
-
 
3368
stc_ret:
-
 
3369
	stc
-
 
3370
	ret
-
 
3371
disasm_ret:
-
 
3372
	mov	esp, ebp
-
 
3373
	and	byte [edi], 0
-
 
3374
	ret
-
 
3375
 
-
 
3376
disasm_instr:
-
 
3377
	mov	ebp, esp
-
 
3378
	cmp	[debuggee_pid], 0
-
 
3379
	jz	stc_ret
-
 
3380
	mov	edi, disasm_string
-
 
3381
	xor	ecx, ecx
-
 
3382
; ecx=flags
-
 
3383
disasm_loop1:
-
 
3384
	xor	eax, eax
-
 
3385
	call	disasm_get_byte
-
 
3386
	jmp	dword [disasm_table_1 + eax*4]
-
 
3387
 
-
 
3388
cop0:
-
 
3389
clock:
-
 
3390
csegcs:
-
 
3391
csegds:
-
 
3392
cseges:
-
 
3393
csegss:
-
 
3394
csegfs:
-
 
3395
cseggs:
-
 
3396
	mov	esi, cmd1
-
 
3397
iglobal
-
 
3398
cmd1:
-
 
3399
	db	0x2E,3,'cs:'
-
 
3400
	db	0x36,3,'ss:'
-
 
3401
	db	0x3E,3,'ds:'
-
 
3402
	db	0x26,3,'es:'
-
 
3403
	db	0x64,3,'fs:'
-
 
3404
	db	0x65,3,'gs:'
-
 
3405
	db	0x06,10,'push    es'
-
 
3406
	db	0x07,10,'pop     es'
-
 
3407
	db	0x0E,10,'push    cs'
-
 
3408
	db	0x16,10,'push    ss'
-
 
3409
	db	0x17,10,'pop     ss'
-
 
3410
	db	0x1E,10,'push    ds'
-
 
3411
	db	0x1F,10,'pop     ds'
-
 
3412
	db	0x27,3,'daa'
-
 
3413
	db	0x2F,3,'das'
-
 
3414
	db	0x37,3,'aaa'
-
 
3415
	db	0x3F,3,'aas'
-
 
3416
	db	0x60,6,0,'pusha'
-
 
3417
	db	0x61,5,0,'popa'
-
 
3418
	db	0x90,3,'nop'
-
 
3419
	db	0x9B,5,'fwait'
-
 
3420
	db	0x9C,6,0,'pushf'
-
 
3421
	db	0x9D,5,0,'popf'
-
 
3422
	db	0x9E,4,'sahf'
-
 
3423
	db	0x9F,4,'lahf'
-
 
3424
	db	0xA4,5,'movsb'
-
 
3425
	db	0xA5,5,0,'movs'
-
 
3426
	db	0xA6,5,'cmpsb'
-
 
3427
	db	0xA7,5,0,'cmps'
-
 
3428
	db	0xAA,5,'stosb'
-
 
3429
	db	0xAB,5,0,'stos'
-
 
3430
	db	0xAC,5,'lodsb'
-
 
3431
	db	0xAD,5,0,'lods'
-
 
3432
	db	0xAE,5,'scasb'
-
 
3433
	db	0xAF,5,0,'scas'
-
 
3434
	db	0xC3,3,'ret'
-
 
3435
	db	0xC9,5,'leave'
-
 
3436
	db	0xCC,4,'int3'
-
 
3437
	db	0xF0,4,'lock'
-
 
3438
	db	0xF5,3,'cmc'
-
 
3439
	db	0xF8,3,'clc'
-
 
3440
	db	0xF9,3,'stc'
-
 
3441
	db	0xFA,3,'cli'
-
 
3442
	db	0xFB,3,'sti'
-
 
3443
	db	0xFC,3,'cld'
-
 
3444
	db	0xFD,3,'std'
-
 
3445
cmd2:
-
 
3446
	db	0x05,7,'syscall'
-
 
3447
	db	0x06,4,'clts'
-
 
3448
	db	0x31,5,'rdtsc'
-
 
3449
	db	0x34,8,'sysenter'
-
 
3450
	db	0xA2,5,'cpuid'
-
 
3451
	db	0x77,4,'emms'
-
 
3452
endg
-
 
3453
	jmp	@f
-
 
3454
ccpuid:
-
 
3455
crdtsc:
-
 
3456
cemms:
-
 
3457
cop0_F:
-
 
3458
	mov	esi, cmd2
-
 
3459
@@:
-
 
3460
	cmp	al, [esi]
-
 
3461
	jz	.found
-
 
3462
	inc	esi
-
 
3463
	movzx	edx, byte [esi]
-
 
3464
	inc	esi
-
 
3465
	add	esi, edx
-
 
3466
	jmp	@b
-
 
3467
.found:
-
 
3468
	inc	esi
-
 
3469
	lodsb
-
 
3470
	cmp	byte [esi], 0
-
 
3471
	jz	@f
-
 
3472
	movzx	ecx, al
-
 
3473
disasm_1:
-
 
3474
	rep	movsb
-
 
3475
	and	byte [edi], 0
-
 
3476
	ret
-
 
3477
@@:
-
 
3478
	mov	dl, ch
-
 
3479
	movzx	ecx, al
-
 
3480
	dec	ecx
-
 
3481
	inc	esi
-
 
3482
	rep	movsb
-
 
3483
	test	dl, 1
-
 
3484
	mov	al, 'w'
-
 
3485
	jnz	@f
-
 
3486
	mov	al, 'd'
-
 
3487
@@:	stosb
-
 
3488
	and	byte [edi], 0
-
 
3489
	ret
-
 
3490
 
-
 
3491
c67:
-
 
3492
	or	ch, 2
-
 
3493
	jmp	disasm_loop1
-
 
3494
c66:
-
 
3495
	or	ch, 1
-
 
3496
	jmp	disasm_loop1
-
 
3497
 
-
 
3498
cxlat:
-
 
3499
cunk:
-
 
3500
cerr:
-
 
3501
	mov	eax, '???'
-
 
3502
	stosd
-
 
3503
	clc
-
 
3504
	ret
-
 
3505
 
-
 
3506
cF:
-
 
3507
	call	disasm_get_byte
-
 
3508
	jmp	dword [disasm_table_2 + eax*4]
-
 
3509
 
-
 
3510
crep:
-
 
3511
	push	[disasm_cur_pos]
-
 
3512
	call	disasm_get_byte
-
 
3513
	cmp	al, 0x0F
-
 
3514
	jz	.sse
-
 
3515
	mov	dl, al
-
 
3516
	mov	eax, 'rep '
-
 
3517
	stosd
-
 
3518
	mov	al, dl
-
 
3519
@@:
-
 
3520
	and	eax, not 1
-
 
3521
	cmp	al, 0x66
-
 
3522
	jnz	@f
-
 
3523
	call	disasm_get_byte
-
 
3524
	mov	dl, al
-
 
3525
	jmp	@b
-
 
3526
@@:
-
 
3527
	cmp	al, 0xA6
-
 
3528
	jz	.repz
-
 
3529
	cmp	al, 0xAE
-
 
3530
	jz	.repz
-
 
3531
	cmp	al, 0xA4
-
 
3532
	jz	.prefix
-
 
3533
	cmp	al, 0xAA
-
 
3534
	jz	.prefix
-
 
3535
	cmp	al, 0xAC
-
 
3536
	jz	.prefix
-
 
3537
	cmp	al, 0x6C
-
 
3538
	jz	.prefix
-
 
3539
	cmp	al, 0x6E
-
 
3540
	jz	.prefix
-
 
3541
.noprefix:
-
 
3542
	pop	[disasm_cur_pos]
-
 
3543
	and	byte [edi-1], 0
-
 
3544
	ret
-
 
3545
.repz:
-
 
3546
	mov	byte [edi-1], 'z'
-
 
3547
	mov	al, ' '
-
 
3548
	stosb
-
 
3549
.prefix:
-
 
3550
	pop	[disasm_cur_pos]
-
 
3551
	jmp	disasm_loop1
-
 
3552
.sse:
-
 
3553
	pop	eax
-
 
3554
	call	disasm_get_byte
-
 
3555
iglobal
-
 
3556
rep_sse_cmds:
-
 
3557
	db	0x58,3,'add'
-
 
3558
	db	0xC2,3,'cmp'
-
 
3559
	db	0,0
-
 
3560
endg
-
 
3561
	mov	esi, rep_sse_cmds+1
-
 
3562
@@:
-
 
3563
	movzx	edx, byte [esi]
-
 
3564
	cmp	al, [esi-1]
-
 
3565
	jz	@f
-
 
3566
	lea	esi, [esi+edx+2]
-
 
3567
	cmp	byte [esi], 0
-
 
3568
	jnz	@b
-
 
3569
	sub	[disasm_cur_pos], 2
-
 
3570
	mov	eax, 'rep'
-
 
3571
	stosd
-
 
3572
	ret
-
 
3573
@@:
-
 
3574
	push	ecx
-
 
3575
	mov	ecx, edx
-
 
3576
	inc	esi
-
 
3577
	rep	movsb
-
 
3578
	pop	ecx
-
 
3579
	mov	al, 's'
-
 
3580
	stosb
-
 
3581
	jmp	rep_sse_final
-
 
3582
 
-
 
3583
crepnz:
-
 
3584
	call	disasm_get_byte
-
 
3585
	cmp	al, 0x0F
-
 
3586
	jz	.sse
-
 
3587
	mov	dl, al
-
 
3588
	mov	eax, 'repn'
-
 
3589
	stosd
-
 
3590
	mov	al, 'z'
-
 
3591
	stosb
-
 
3592
	mov	al, ' '
-
 
3593
	stosb
-
 
3594
	movzx	eax, dl
-
 
3595
	cmp	al, 0x6C
-
 
3596
	jb	crep.noprefix
-
 
3597
	cmp	al, 0x6F
-
 
3598
	jbe	.prefix
-
 
3599
	cmp	al, 0xA4
-
 
3600
	jb	crep.noprefix
-
 
3601
	cmp	al, 0xA7
-
 
3602
	jbe	.prefix
-
 
3603
	cmp	al, 0xAA
-
 
3604
	jb	crep.noprefix
-
 
3605
	cmp	al, 0xAF
-
 
3606
	ja	crep.noprefix
-
 
3607
.prefix:
-
 
3608
	jmp	cop0
-
 
3609
.sse:
-
 
3610
	call	disasm_get_byte
-
 
3611
	mov	esi, rep_sse_cmds+1
-
 
3612
@@:
-
 
3613
	movzx	edx, byte [esi]
-
 
3614
	cmp	al, [esi-1]
-
 
3615
	jz	.found0
-
 
3616
	lea	esi, [esi+edx+2]
-
 
3617
	cmp	byte [esi], 0
-
 
3618
	jnz	@b
-
 
3619
	mov	esi, sse_cmds2+1
-
 
3620
@@:
-
 
3621
	movzx	edx, byte [esi]
-
 
3622
	cmp	al, [esi-1]
-
 
3623
	jz	.found1
-
 
3624
	lea	esi, [esi+edx+2]
-
 
3625
	cmp	byte [esi], 0
-
 
3626
	jnz	@b
-
 
3627
	sub	[disasm_cur_pos], 2
-
 
3628
	mov	eax, 'repn'
-
 
3629
	stosd
-
 
3630
	mov	al, 'z'
-
 
3631
	stosb
-
 
3632
	and	byte [edi], 0
-
 
3633
	ret
-
 
3634
.found0:
-
 
3635
	push	ecx
-
 
3636
	mov	ecx, edx
-
 
3637
	inc	esi
-
 
3638
	rep	movsb
-
 
3639
	pop	ecx
-
 
3640
	mov	al, 's'
-
 
3641
	stosb
-
 
3642
	mov	al, 'd'
-
 
3643
	jmp	rep_sse_final
-
 
3644
.found1:
-
 
3645
	push	ecx
-
 
3646
	mov	ecx, edx
-
 
3647
	inc	esi
-
 
3648
	rep	movsb
-
 
3649
	pop	ecx
-
 
3650
	mov	al, 'p'
-
 
3651
	stosb
-
 
3652
	mov	al, 's'
-
 
3653
rep_sse_final:
-
 
3654
	stosb
-
 
3655
	push	ecx
-
 
3656
	push	5
-
 
3657
	pop	ecx
-
 
3658
	sub	ecx, edx
-
 
3659
	adc	ecx, 1
-
 
3660
	mov	al, ' '
-
 
3661
	rep	stosb
-
 
3662
	pop	ecx
-
 
3663
	or	ch, 1
-
 
3664
	jmp	disasm_mmx1
-
 
3665
 
-
 
3666
macro disasm_set_modew
-
 
3667
{
-
 
3668
	test	al, 1
-
 
3669
	jz	@f
-
 
3670
	or	ch, 80h
-
 
Line 3671... Line -...
3671
@@:
-
 
3672
}
-
 
3673
 
-
 
3674
cmov2:
-
 
3675
	disasm_set_modew
-
 
3676
; mov r/m,i
-
 
3677
	call	disasm_get_byte
-
 
3678
	dec	[disasm_cur_pos]
-
 
3679
	test	al, 00111000b
-
 
3680
	jnz	cunk
-
 
3681
	mov	eax, 'mov '
-
 
3682
	stosd
-
 
3683
	mov	eax, '    '
-
 
3684
	stosd
-
 
3685
	call	disasm_readrmop
-
 
3686
	mov	ax, ', '
-
 
3687
	stosw
-
 
3688
	xor	eax, eax
-
 
3689
	test	ch, 80h
-
 
3690
	jnz	.1
-
 
3691
	call	disasm_get_byte
-
 
3692
	jmp	.3
-
 
3693
.1:
-
 
3694
	test	ch, 1
-
 
3695
	jnz	.2
-
 
3696
	call	disasm_get_dword
-
 
3697
	jmp	.3
-
 
3698
.2:
-
 
3699
	call	disasm_get_word
-
 
3700
.3:
-
 
3701
	call	disasm_write_num
-
 
3702
	and	byte [edi], 0
-
 
3703
	ret
-
 
3704
 
-
 
3705
cret2:
-
 
3706
	mov	eax, 'ret '
-
 
3707
	stosd
-
 
3708
	mov	eax, '    '
-
 
3709
	stosd
-
 
3710
	xor	eax, eax
-
 
3711
	jmp	cmov2.2
-
 
3712
 
-
 
3713
disasm_write_num:
-
 
3714
	push	esi
-
 
3715
	cmp	eax, 0x80
-
 
3716
	jl	.nosymb
-
 
3717
	lea	esi, [eax-1]
-
 
3718
	test	eax, esi
-
 
3719
	jz	.nosymb
-
 
3720
	call	find_symbol
-
 
3721
	jc	.nosymb
-
 
3722
@@:
-
 
3723
	lodsb
-
 
3724
	test	al, al
-
 
3725
	jz	@f
2339
        cmp     byte [esi-1], 0
3726
	stosb
2340
        jnz     @b
3727
	jmp	@b
2341
 
3728
@@:
-
 
3729
	pop	esi
-
 
3730
	ret
-
 
3731
.nosymb:
-
 
3732
	pop	esi
-
 
3733
	push	ecx eax
-
 
3734
	inc	edi
-
 
3735
@@:
-
 
3736
	mov	ecx, eax
-
 
3737
	shr	eax, 4
-
 
3738
	jz	@f
-
 
3739
	inc	edi
-
 
3740
	jmp	@b
-
 
3741
@@:
-
 
3742
	pop	eax
-
 
3743
	cmp	ecx, 10
-
 
3744
	jb	@f
-
 
3745
	inc	edi
-
 
3746
@@:
-
 
3747
	push	edi eax
-
 
3748
@@:
-
 
3749
	mov	ecx, eax
-
 
3750
	and	al, 0xF
-
 
3751
	cmp	al, 10
-
 
3752
	sbb	al, 69h
-
 
3753
	das
-
 
3754
	dec	edi
-
 
3755
	mov	[edi], al
-
 
3756
	mov	eax, ecx
-
 
3757
	shr	eax, 4
-
 
3758
	jnz	@b
-
 
3759
	cmp	ecx, 10
-
 
3760
	jb	@f
-
 
3761
	mov	byte [edi-1], '0'
-
 
3762
@@:
-
 
3763
	pop	eax edi ecx
-
 
3764
	cmp	eax, 10
-
 
3765
	jb	@f
-
 
3766
	mov	byte [edi], 'h'
-
 
3767
	inc	edi
-
 
3768
@@:
-
 
3769
	ret
-
 
3770
 
-
 
3771
iglobal
-
 
3772
label disasm_regs32 dword
-
 
3773
label disasm_regs dword
-
 
3774
	db	'eax',0
-
 
3775
	db	'ecx',0
-
 
3776
	db	'edx',0
-
 
3777
	db	'ebx',0
-
 
3778
	db	'esp',0
-
 
3779
	db	'ebp',0
-
 
3780
	db	'esi',0
-
 
3781
	db	'edi',0
-
 
3782
disasm_regs16	dw	'ax','cx','dx','bx','sp','bp','si','di'
-
 
3783
disasm_regs8	dw	'al','cl','dl','bl','ah','ch','dh','bh'
-
 
3784
disasm_scale	db	'1248'
-
 
3785
endg
-
 
3786
disasm_readrmop:
-
 
3787
	call	disasm_get_byte
-
 
3788
	test	ch, 40h
-
 
3789
	jnz	.skip_size
-
 
3790
	push	eax
-
 
3791
	and	al, 0xC0
-
 
3792
	cmp	al, 0xC0
-
 
3793
	pop	eax
-
 
3794
	jz	.skip_size
-
 
3795
	test	ch, 80h
-
 
3796
	jz	.byte
-
 
3797
	test	ch, 1
-
 
3798
	jnz	.word
-
 
3799
	mov	dword [edi], 'dwor'
-
 
3800
	mov	byte [edi+4], 'd'
-
 
3801
	inc	edi
-
 
3802
	jmp	@f
-
 
3803
.byte:
-
 
3804
	test	ch, 20h
-
 
3805
	jz	.qb
-
 
3806
	mov	byte [edi], 't'
-
 
3807
	inc	edi
-
 
3808
.qb:
-
 
3809
	mov	dword [edi], 'byte'
-
 
3810
	jmp	@f
-
 
3811
.word:
-
 
3812
	test	ch, 20h
-
 
3813
	jz	.qw
-
 
3814
	mov	byte [edi], 'q'
-
 
3815
	inc	edi
-
 
3816
.qw:
-
 
3817
	mov	dword [edi], 'word'
-
 
3818
@@:
-
 
3819
	mov	byte [edi+4], ' '
-
 
3820
	add	edi, 5
-
 
3821
.skip_size:
-
 
3822
	test	ch, 2
-
 
3823
	jnz	disasm_readrmop16
-
 
3824
	push	ecx
-
 
3825
	movzx	ecx, al
-
 
3826
	and	eax, 7
-
 
3827
	shr	ecx, 6
-
 
3828
	jz	.vmod0
-
 
3829
	jp	.vmod3
-
 
3830
	mov	byte [edi], '['
-
 
3831
	inc	edi
-
 
3832
	cmp	al, 4
-
 
3833
	jz	.sib1
-
 
3834
	mov	eax, [disasm_regs+eax*4]
-
 
3835
	stosd
-
 
3836
	dec	edi
-
 
3837
	jmp	@f
-
 
3838
.sib1:
-
 
3839
	call	.parse_sib
-
 
3840
@@:
-
 
3841
	mov	al, '+'
-
 
3842
	stosb
-
 
3843
	dec	ecx
-
 
3844
	jz	.vmod1
-
 
3845
	call	disasm_get_dword
-
 
3846
	jmp	@f
-
 
3847
.vmod1:
-
 
3848
	call	disasm_get_byte
-
 
3849
	movsx	eax, al
-
 
3850
@@:
-
 
3851
	test	eax, eax
-
 
3852
	jns	.2
-
 
3853
	neg	eax
-
 
3854
	mov	byte [edi-1], '-'
-
 
3855
.2:
-
 
3856
	call	disasm_write_num
-
 
3857
.2a:
-
 
3858
	mov	al, ']'
-
 
3859
	stosb
-
 
3860
	pop	ecx
-
 
3861
	ret
-
 
3862
.vmod3:
-
 
3863
	pop	ecx
-
 
3864
	test	ch, 10h
-
 
3865
	jnz	.vmod3_mmi
-
 
3866
	test	ch, 80h
-
 
3867
	jz	.vmod3_byte
-
 
3868
	test	ch, 1
-
 
3869
	jnz	.vmod3_word
-
 
3870
	test	ch, 20h
-
 
3871
	jnz	.vmod3_sti
-
 
3872
	mov	eax, [disasm_regs32+eax*4]
-
 
3873
	stosd
-
 
3874
	dec	edi
-
 
3875
	ret
-
 
3876
.vmod3_byte:
-
 
3877
	mov	ax, [disasm_regs8+eax*2]
-
 
3878
@@:
-
 
3879
	stosw
-
 
3880
	ret
-
 
3881
.vmod3_word:
-
 
3882
	mov	ax, [disasm_regs16+eax*2]
-
 
3883
	jmp	@b
-
 
3884
.vmod3_sti:
-
 
3885
	mov	word [edi], 'st'
-
 
3886
	add	al, '0'
-
 
3887
	mov	byte [edi+2], al
-
 
3888
	add	edi, 3
-
 
3889
	ret
-
 
3890
.vmod3_mmi:
-
 
3891
disasm_write_mmreg = $
-
 
3892
	test	ch, 1
-
 
3893
	jz	@f
-
 
3894
	mov	byte [edi], 'x'
-
 
3895
	inc	edi
-
 
3896
@@:
-
 
3897
	mov	word [edi], 'mm'
-
 
3898
	add	al, '0'
-
 
3899
	mov	byte [edi+2], al
-
 
3900
	add	edi, 3
-
 
3901
	ret
-
 
3902
.vmod0:
-
 
3903
	mov	byte [edi], '['
-
 
3904
	inc	edi
-
 
3905
	cmp	al, 4
-
 
3906
	jz	.sib2
-
 
3907
	cmp	al, 5
-
 
3908
	jz	.ofs32
-
 
3909
	mov	eax, [disasm_regs+eax*4]
-
 
3910
	stosd
-
 
3911
	mov	byte [edi-1], ']'
-
 
3912
	pop	ecx
-
 
3913
	ret
-
 
3914
.ofs32:
-
 
3915
	call	disasm_get_dword
-
 
3916
	jmp	.2
-
 
3917
.sib2:
-
 
3918
	call	.parse_sib
-
 
3919
	mov	al, ']'
-
 
3920
	stosb
-
 
3921
	pop	ecx
-
 
3922
	ret
-
 
3923
.parse_sib:
-
 
3924
	call	disasm_get_byte
-
 
3925
	push	edx
-
 
3926
	mov	dl, al
-
 
3927
	mov	dh, 0
-
 
3928
	and	eax, 7
-
 
3929
	cmp	al, 5
-
 
3930
	jnz	@f
-
 
3931
	jecxz	.sib0
-
 
3932
@@:
-
 
3933
	mov	eax, [disasm_regs+eax*4]
-
 
3934
	stosd
-
 
3935
	dec	edi
-
 
3936
	mov	dh, 1
-
 
3937
.sib0:
-
 
3938
	mov	al, dl
-
 
3939
	shr	eax, 3
-
 
3940
	and	eax, 7
-
 
3941
	cmp	al, 4
-
 
3942
	jz	.sibret
-
 
3943
	test	dh, dh
-
 
3944
	jz	@f
-
 
3945
	mov	byte [edi], '+'
-
 
3946
	inc	edi
-
 
3947
@@:
-
 
3948
	mov	eax, [disasm_regs+eax*4]
-
 
3949
	stosd
-
 
3950
	dec	edi
-
 
3951
	shr	dl, 6
-
 
3952
	jz	@f
-
 
3953
	mov	al, '*'
-
 
3954
	stosb
-
 
3955
	movzx	eax, dl
-
 
3956
	mov	al, [disasm_scale+eax]
-
 
3957
	stosb
-
 
3958
@@:
-
 
3959
.sibret:
-
 
3960
	test	dh, dh
-
 
3961
	jnz	.sibret2
-
 
3962
	call	disasm_get_dword
-
 
3963
	cmp	byte [edi-1], '['
-
 
3964
	jz	@f
-
 
3965
	mov	byte [edi], '+'
-
 
3966
	test	eax, eax
-
 
3967
	jns	.sibns
-
 
3968
	neg	eax
-
 
3969
	mov	byte [edi], '-'
-
 
3970
.sibns:
-
 
3971
	inc	edi
-
 
3972
@@:
-
 
3973
	call	disasm_write_num
-
 
3974
.sibret2:
-
 
3975
	pop	edx
-
 
3976
	ret
-
 
3977
 
-
 
3978
iglobal
-
 
3979
disasm_rm16_1	dd	'bxsi','bxdi','bpsi','bpdi'
-
 
3980
disasm_rm16_2	dw	'si','di','bp','bx'
-
 
3981
endg
-
 
3982
disasm_readrmop16:
-
 
3983
	push	ecx
-
 
3984
	movzx	ecx, al
-
 
3985
	and	eax, 7
-
 
3986
	shr	ecx, 6
-
 
3987
	jz	.vmod0
-
 
3988
	jp	disasm_readrmop.vmod3	; mod=3 is the same in 16- and 32-bit code
-
 
3989
; 1 or 2
-
 
3990
	mov	byte [edi], '['
-
 
3991
	inc	edi
-
 
3992
	cmp	al, 4
-
 
3993
	jae	@f
-
 
3994
	mov	eax, [disasm_rm16_1+eax*4]
-
 
3995
	stosw
-
 
3996
	mov	al, '+'
-
 
3997
	stosb
-
 
3998
	shr	eax, 16
-
 
3999
	jmp	.1
-
 
4000
@@:
-
 
4001
	mov	eax, dword [disasm_rm16_2+eax*2-4*2]
-
 
4002
.1:
-
 
4003
	stosw
-
 
4004
	mov	al, '+'
-
 
4005
	stosb
-
 
4006
	xor	eax, eax
-
 
4007
	dec	ecx
-
 
4008
	jnz	.2
-
 
4009
	call	disasm_get_byte
-
 
4010
	cbw
-
 
4011
	jmp	@f
-
 
4012
.2:
-
 
4013
	call	disasm_get_word
-
 
4014
@@:
-
 
4015
	test	ax, ax
-
 
4016
	jns	@f
-
 
4017
	mov	byte [edi-1], '-'
-
 
4018
	neg	ax
-
 
4019
@@:
-
 
4020
	call	disasm_write_num
-
 
4021
.done1:
-
 
4022
	mov	al, ']'
-
 
4023
	stosb
-
 
4024
	pop	ecx
-
 
4025
	ret
-
 
4026
.vmod0:
-
 
4027
	mov	byte [edi], '['
-
 
4028
	inc	edi
-
 
4029
	cmp	al, 6
-
 
4030
	jz	.ofs16
-
 
4031
	cmp	al, 4
-
 
4032
	jae	@f
-
 
4033
	mov	eax, [disasm_rm16_1+eax*4]
-
 
4034
	stosw
-
 
4035
	mov	al, '+'
-
 
4036
	stosb
-
 
4037
	shr	eax, 16
-
 
4038
	jmp	.3
-
 
4039
@@:
-
 
4040
	mov	eax, dword [disasm_rm16_2+eax*2-4*2]
-
 
4041
.3:
-
 
4042
	stosw
-
 
4043
	jmp	.done1
-
 
4044
.ofs16:
-
 
4045
	xor	eax, eax
-
 
4046
	call	disasm_get_word
-
 
4047
	call	disasm_write_num
-
 
4048
	jmp	.done1
-
 
4049
 
-
 
4050
cpush21:
-
 
4051
	mov	eax, 'push'
-
 
4052
	stosd
-
 
4053
	mov	eax, '    '
-
 
4054
	stosd
-
 
4055
disasm_i32:
-
 
4056
	call	disasm_get_dword
-
 
Line 4057... Line -...
4057
	call	disasm_write_num
-
 
4058
	and	byte [edi], 0
-
 
4059
	ret
-
 
4060
 
-
 
4061
cpush22:
-
 
4062
	mov	eax, 'push'
-
 
4063
	stosd
-
 
4064
	mov	eax, '    '
-
 
4065
	stosd
-
 
4066
	call	disasm_get_byte
-
 
4067
	movsx	eax, al
-
 
4068
@@:
-
 
4069
	call	disasm_write_num
-
 
4070
	and	byte [edi], 0
-
 
4071
	ret
-
 
4072
 
-
 
4073
center:
-
 
4074
	mov	eax, 'ente'
-
 
4075
	stosd
-
 
4076
	mov	eax, 'r   '
-
 
4077
	stosd
-
 
4078
	xor	eax, eax
-
 
4079
	call	disasm_get_word
-
 
4080
	call	disasm_write_num
-
 
4081
	mov	al, ','
-
 
4082
	stosb
-
 
4083
	mov	al, ' '
-
 
4084
	stosb
-
 
4085
	xor	eax, eax
-
 
4086
	call	disasm_get_byte
-
 
4087
	jmp	@b
-
 
4088
 
-
 
4089
cinc1:
-
 
4090
; inc reg32
-
 
4091
cdec1:
-
 
4092
; dec reg32
-
 
4093
cpush1:
-
 
4094
; push reg32
-
 
4095
cpop1:
-
 
4096
; pop reg32
-
 
4097
cbswap:
-
 
4098
; bswap reg32
-
 
4099
	mov	edx, eax
-
 
4100
	and	edx, 7
-
 
4101
	shr	eax, 3
-
 
4102
	sub	al, 8
-
 
4103
	mov	esi, 'inc '
-
 
4104
	jz	@f
-
 
4105
	mov	esi, 'dec '
-
 
4106
	dec	al
-
 
4107
	jz	@f
-
 
4108
	mov	esi, 'push'
-
 
4109
	dec	al
-
 
4110
	jz	@f
-
 
4111
	mov	esi, 'pop '
-
 
4112
	dec	al
-
 
4113
	jz	@f
-
 
4114
	mov	esi, 'bswa'
-
 
4115
@@:
-
 
4116
	xchg	eax, esi
-
 
4117
	stosd
-
 
4118
	mov	eax, '    '
-
 
4119
	jz	@f
-
 
4120
	mov	al, 'p'
-
 
4121
@@:
-
 
4122
	stosd
-
 
4123
	xchg	eax, edx
-
 
4124
	call	disasm_write_reg1632
-
 
4125
	and	byte [edi], 0
-
 
4126
	ret
-
 
4127
 
-
 
4128
cxchg1:
-
 
4129
; xchg eax,reg32
-
 
4130
	and	eax, 7
-
 
4131
	xchg	eax, edx
-
 
4132
	mov	eax, 'xchg'
-
 
4133
	stosd
-
 
4134
	mov	eax, '    '
-
 
4135
	stosd
-
 
4136
	xor	eax, eax
-
 
4137
	call	disasm_write_reg1632
-
 
4138
	mov	ax, ', '
-
 
4139
	stosw
-
 
4140
	xchg	eax, edx
-
 
4141
	call	disasm_write_reg1632
-
 
4142
	and	byte [edi], 0
-
 
4143
	ret
-
 
4144
 
-
 
4145
cint:
-
 
4146
	mov	eax, 'int '
-
 
4147
	stosd
-
 
4148
	mov	eax, '    '
-
 
4149
	stosd
-
 
4150
disasm_i8u:
-
 
4151
	xor	eax, eax
-
 
4152
	call	disasm_get_byte
-
 
4153
	call	disasm_write_num
-
 
4154
	and	byte [edi], 0
-
 
4155
	ret
-
 
4156
 
-
 
4157
cmov11:
-
 
4158
; mov r8,i8
-
 
4159
	mov	ecx, eax
-
 
4160
	mov	eax, 'mov '
-
 
4161
	stosd
-
 
4162
	mov	eax, '    '
-
 
4163
	stosd
-
 
4164
	and	ecx, 7
-
 
4165
	mov	ax, [disasm_regs8+ecx*2]
-
 
4166
	stosw
-
 
4167
	mov	ax, ', '
-
 
4168
	stosw
-
 
4169
	jmp	disasm_i8u
-
 
4170
 
-
 
4171
cmov12:
-
 
4172
; mov r32,i32
-
 
4173
	xchg	eax, edx
-
 
4174
	mov	eax, 'mov '
-
 
4175
	stosd
-
 
4176
	mov	eax, '    '
-
 
4177
	stosd
-
 
4178
	xchg	eax, edx
-
 
4179
	and	eax, 7
-
 
4180
	call	disasm_write_reg1632
-
 
4181
	mov	ax, ', '
-
 
4182
	stosw
2342
    @@:
4183
	jmp	cmov2.1
-
 
4184
 
-
 
4185
iglobal
-
 
4186
disasm_shifts	dd	'rol ','ror ','rcl ','rcr ','shl ','shr ','sal ','sar '
-
 
4187
endg
-
 
4188
cshift2:
-
 
4189
; shift r/m,1 = D0/D1
-
 
4190
cshift3:
-
 
4191
; shift r/m,cl = D2/D3
-
 
4192
	disasm_set_modew
-
 
4193
	mov	dl, al
-
 
4194
	call	disasm_get_byte
2343
        pop     esi
4195
	dec	[disasm_cur_pos]
-
 
4196
	shr	al, 3
-
 
4197
	and	eax, 7
-
 
4198
	mov	eax, [disasm_shifts+eax*4]
-
 
4199
	stosd
-
 
4200
	mov	eax, '    '
-
 
4201
	stosd
-
 
4202
	call	disasm_readrmop
-
 
4203
	cmp	dl, 0xD2
-
 
4204
	jb	.s1
-
 
4205
	mov	eax, ', cl'
-
 
4206
	stosd
-
 
4207
	and	byte [edi], 0
-
 
4208
	ret
-
 
4209
.s1:
-
 
Line 4210... Line -...
4210
	mov	eax, ', 1'
-
 
4211
	stosd
-
 
4212
	clc
-
 
4213
	ret
-
 
4214
 
-
 
4215
cshift1:
-
 
4216
; shift r/m,i8 = C0/C1
-
 
4217
	disasm_set_modew
-
 
4218
	call	disasm_get_byte
-
 
4219
	dec	[disasm_cur_pos]
-
 
4220
	shr	al, 3
-
 
4221
	and	eax, 7
-
 
4222
	mov	eax, [disasm_shifts+eax*4]
-
 
4223
	stosd
-
 
4224
	mov	eax, '    '
-
 
4225
	stosd
-
 
4226
	call	disasm_readrmop
-
 
4227
	mov	ax, ', '
-
 
4228
	stosw
-
 
4229
	jmp	disasm_i8u
-
 
4230
 
-
 
4231
caam:
-
 
4232
	mov	eax, 'aam '
-
 
4233
	jmp	@f
-
 
4234
caad:
-
 
4235
	mov	eax, 'aad '
-
 
4236
@@:
-
 
4237
	stosd
-
 
4238
	mov	eax, '    '
-
 
4239
	stosd
-
 
4240
	xor	eax, eax
-
 
4241
	call	disasm_get_byte
-
 
4242
	cmp	al, 10
-
 
4243
	jz	@f
-
 
4244
	call	disasm_write_num
-
 
4245
@@:
-
 
4246
	and	byte [edi], 0
-
 
4247
	ret
-
 
4248
 
-
 
4249
cmov3:
-
 
4250
; A0: mov al,[ofs32]
-
 
4251
; A1: mov ax/eax,[ofs32]
-
 
4252
; A2: mov [ofs32],al
-
 
4253
; A3: mov [ofs32],ax/eax
-
 
4254
	mov	edx, 'mov '
-
 
4255
	xchg	eax, edx
-
 
4256
	stosd
-
 
4257
	mov	eax, '    '
-
 
4258
	stosd
-
 
4259
	test	dl, 2
-
 
4260
	jnz	.1
-
 
4261
	call	.write_acc
-
 
4262
	mov	ax, ', '
-
 
4263
	stosw
-
 
4264
	call	.write_ofs32
-
 
4265
	jmp	.2
-
 
4266
.1:
-
 
4267
	call	.write_ofs32
-
 
4268
	mov	ax, ', '
-
 
4269
	stosw
-
 
4270
	call	.write_acc
-
 
4271
.2:	and	byte [edi], 0
-
 
4272
	ret
-
 
4273
.write_acc:
-
 
4274
	test	dl, 1
-
 
4275
	jz	.8bit
-
 
4276
	test	ch, 1
-
 
4277
	jnz	.16bit
-
 
4278
	mov	eax, 'eax'
-
 
4279
	stosd
-
 
4280
	dec	edi
-
 
4281
	ret
-
 
4282
.16bit:
-
 
4283
	mov	ax, 'ax'
-
 
4284
	stosw
-
 
4285
	ret
-
 
4286
.8bit:
-
 
4287
	mov	ax, 'al'
-
 
4288
	stosw
-
 
4289
	ret
-
 
4290
.write_ofs32:
-
 
4291
	mov	al, '['
-
 
4292
	stosb
-
 
4293
	call	disasm_get_dword
-
 
4294
	call	disasm_write_num
-
 
4295
	mov	al, ']'
-
 
4296
	stosb
-
 
4297
	ret
-
 
4298
 
-
 
4299
disasm_write_reg:
-
 
4300
	test	ch, 80h
-
 
4301
	jnz	disasm_write_reg1632
-
 
4302
	mov	ax, [disasm_regs8+eax*2]
-
 
4303
	stosw
-
 
4304
	ret
-
 
4305
disasm_write_reg1632:
-
 
4306
	test	ch, 1
-
 
4307
	jnz	@f
-
 
4308
	mov	eax, [disasm_regs32+eax*4]
-
 
4309
	stosd
-
 
4310
	dec	edi
-
 
4311
	ret
-
 
4312
@@:
-
 
4313
	mov	ax, [disasm_regs16+eax*2]
-
 
4314
	stosw
-
 
4315
	ret
-
 
4316
 
-
 
4317
cmovzx:		; 0F B6/B7
-
 
4318
cmovsx:		; 0F BE/BF
-
 
4319
	mov	edx, eax
-
 
4320
	disasm_set_modew
-
 
4321
	mov	eax, 'movz'
-
 
4322
	cmp	dl, 0xB8
-
 
4323
	jb	@f
-
 
4324
	mov	eax, 'movs'
-
 
4325
@@:
-
 
4326
	stosd
-
 
4327
	mov	eax, 'x   '
-
 
4328
	stosd
-
 
4329
	call	disasm_get_byte
-
 
4330
	dec	[disasm_cur_pos]
-
 
4331
	shr	al, 3
-
 
4332
	and	eax, 7
-
 
4333
	call	disasm_write_reg1632
-
 
4334
	mov	ax, ', '
-
 
4335
	stosw
-
 
4336
	or	ch, 1	; 2nd operand - 8 or 16 bits
-
 
4337
	call	disasm_readrmop
-
 
4338
	and	byte [edi], 0
-
 
4339
	ret
-
 
4340
 
-
 
4341
iglobal
-
 
4342
disasm_op2cmds	dd 'add ','or  ','adc ','sbb ','and ','sub ','xor ','cmp '
-
 
4343
endg
-
 
4344
cop21:
-
 
4345
	disasm_set_modew
-
 
4346
	mov	esi, 'test'
-
 
4347
	cmp	al, 0A8h
-
 
4348
	jae	@f
-
 
4349
	shr	al, 3
-
 
4350
	and	eax, 7
-
 
4351
	mov	esi, [disasm_op2cmds+eax*4]
-
 
4352
@@:
-
 
4353
	xchg	eax, esi
-
 
4354
	stosd
-
 
4355
	mov	eax, '    '
-
 
4356
	stosd
2344
        ret
4357
	test	ch, 80h
-
 
4358
	jnz	.1632
-
 
4359
	mov	eax, 'al, '
-
 
4360
	stosd
-
 
4361
	jmp	disasm_i8u
-
 
4362
.1632:
-
 
4363
	test	ch, 1
-
 
4364
	jnz	.16
-
 
4365
	mov	eax, 'eax,'
-
 
4366
	stosd
-
 
4367
	mov	al, ' '
-
 
4368
	stosb
-
 
4369
	call	disasm_get_dword
-
 
4370
	jmp	.x
-
 
4371
.16:
-
 
4372
	mov	eax, 'ax, '
-
 
4373
	stosd
-
 
4374
	xor	eax, eax
-
 
4375
	call	disasm_get_word
-
 
4376
.x:
-
 
4377
	call	disasm_write_num
-
 
4378
	and	byte [edi], 0
-
 
4379
	ret
-
 
4380
 
-
 
4381
carpl:
-
 
4382
	xor	edx, edx
-
 
4383
	or	ch, 0C1h
-
 
4384
	mov	eax, 'arpl'
-
 
4385
	jmp	cop22.d2
-
 
4386
 
-
 
4387
ccmpxchg:
-
 
4388
	xor	edx, edx
-
 
4389
	disasm_set_modew
-
 
4390
	or	ch, 40h
-
 
4391
	mov	eax, 'cmpx'
-
 
4392
	stosd
-
 
4393
	mov	eax, 'chg '
-
 
4394
	jmp	cop22.d1
-
 
4395
 
-
 
4396
cbsf:
-
 
4397
cbsr:
-
 
4398
	or	ch, 80h
-
 
4399
 
-
 
4400
cop22:
-
 
4401
	disasm_set_modew
-
 
4402
	or	ch, 40h
-
 
4403
	mov	edx, eax
-
 
4404
	mov	esi, 'lea '
-
 
4405
	cmp	al, 8Dh
-
 
4406
	jz	@f
-
 
4407
	mov	esi, 'imul'
-
 
4408
	cmp	al, 0xAF
-
 
4409
	jz	@f
-
 
4410
	mov	esi, 'bsf '
-
 
4411
	cmp	al, 0BCh
-
 
4412
	jz	@f
-
 
4413
	mov	esi, 'bsr '
-
 
4414
	cmp	al, 0BDh
-
 
4415
	jz	@f
-
 
4416
	mov	esi, 'mov '
-
 
4417
	cmp	al, 88h
-
 
4418
	jae	@f
-
 
4419
	mov	esi, 'xchg'
-
 
4420
	cmp	al, 86h
-
 
4421
	jae	@f
-
 
4422
	mov	esi, 'test'
-
 
4423
	cmp	al, 84h
-
 
4424
	jae	@f
-
 
4425
	shr	al, 3
-
 
4426
	and	eax, 7
-
 
4427
	mov	esi, [disasm_op2cmds+eax*4]
-
 
4428
@@:
-
 
4429
	xchg	eax, esi
-
 
4430
.d2:
-
 
4431
	stosd
-
 
4432
	mov	eax, '    '
-
 
4433
.d1:
-
 
4434
	stosd
-
 
4435
	call	disasm_get_byte
-
 
4436
	dec	[disasm_cur_pos]
-
 
4437
	shr	al, 3
-
 
4438
	and	eax, 7
-
 
4439
	cmp	dl, 0x8D
-
 
4440
	jz	@f
-
 
4441
	cmp	dl, 0x86
-
 
4442
	jz	@f
-
 
4443
	cmp	dl, 0x87
-
 
4444
	jz	@f
-
 
4445
	cmp	dl, 0xBC
-
 
4446
	jz	@f
-
 
4447
	cmp	dl, 0xBD
-
 
4448
	jz	@f
-
 
4449
	test	dl, 2
-
 
4450
	jz	.d0
-
 
4451
@@:
-
 
4452
	call	disasm_write_reg
-
 
4453
	mov	ax, ', '
-
 
4454
	stosw
-
 
4455
	call	disasm_readrmop
-
 
4456
	and	byte [edi], 0
-
 
4457
	ret
-
 
4458
.d0:
-
 
4459
	push	eax
-
 
4460
	call	disasm_readrmop
-
 
4461
	mov	ax, ', '
-
 
4462
	stosw
-
 
4463
	pop	eax
-
 
4464
	call	disasm_write_reg
-
 
4465
	and	byte [edi], 0
-
 
4466
	ret
-
 
4467
 
-
 
4468
cbound:
-
 
4469
	mov	edx, eax
-
 
4470
	mov	eax, 'boun'
-
 
4471
	stosd
-
 
4472
	mov	eax, 'd   '
-
 
4473
	or	ch, 0xC0
-
 
4474
	jmp	cop22.d1
-
 
4475
 
-
 
4476
cop23:
-
 
4477
	disasm_set_modew
-
 
4478
	xchg	eax, edx
-
 
4479
	call	disasm_get_byte
-
 
4480
	dec	[disasm_cur_pos]
-
 
4481
	shr	eax, 3
-
 
4482
	and	eax, 7
-
 
4483
	mov	eax, [disasm_op2cmds+eax*4]
-
 
4484
ctest:
-
 
4485
	stosd
-
 
4486
	mov	eax, '    '
-
 
4487
	stosd
-
 
4488
	call	disasm_readrmop
-
 
4489
	mov	ax, ', '
-
 
4490
	stosw
-
 
4491
	test	ch, 80h
-
 
4492
	jz	.i8
-
 
4493
	cmp	dl, 83h
-
 
4494
	jz	.i8
-
 
4495
	test	ch, 1
-
 
4496
	jnz	.i16
-
 
4497
	call	disasm_get_dword
-
 
4498
	jmp	.ic
-
 
4499
.i8:
-
 
4500
	xor	eax, eax
-
 
4501
	call	disasm_get_byte
-
 
4502
	cmp	dl, 83h
-
 
4503
	jnz	.ic
-
 
4504
	movsx	eax, al
-
 
4505
	jmp	.ic
-
 
4506
.i16:
-
 
4507
	xor	eax, eax
-
 
4508
	call	disasm_get_word
-
 
4509
.ic:
-
 
4510
	call	disasm_write_num
-
 
4511
	and	byte [edi], 0
-
 
4512
	ret
-
 
4513
 
-
 
4514
cmovcc:
-
 
4515
	or	ch, 0C0h
-
 
4516
	and	eax, 0xF
-
 
4517
	mov	ax, [disasm_jcc_codes + eax*2]
-
 
4518
	mov	dword [edi], 'cmov'
-
 
4519
	add	edi, 4
-
 
4520
	stosw
-
 
4521
	mov	ax, '  '
-
 
4522
	stosw
-
 
4523
	call	disasm_get_byte
-
 
4524
	dec	[disasm_cur_pos]
-
 
4525
	shr	eax, 3
-
 
4526
	and	eax, 7
-
 
4527
	call	disasm_write_reg1632
-
 
4528
	mov	ax, ', '
-
 
4529
	stosw
-
 
4530
	call	disasm_readrmop
-
 
4531
	and	byte [edi], 0
-
 
4532
	ret
-
 
4533
 
-
 
4534
cbtx1:
-
 
4535
; btx r/m,i8 = 0F BA
-
 
4536
	or	ch, 80h
-
 
4537
	call	disasm_get_byte
-
 
4538
	dec	[disasm_cur_pos]
-
 
4539
	shr	al, 3
-
 
4540
	and	eax, 7
-
 
4541
	cmp	al, 4
-
 
4542
	jb	cunk
-
 
4543
	mov	eax, [btx1codes+eax*4-4*4]
-
 
4544
	stosd
-
 
4545
	mov	eax, '    '
-
 
4546
	stosd
-
 
4547
	call	disasm_readrmop
-
 
4548
	mov	ax, ', '
-
 
4549
	stosw
-
 
4550
	jmp	disasm_i8u
-
 
4551
iglobal
-
 
4552
btx1codes	dd	'bt  ','bts ','btr ','btc '
-
 
4553
endg
-
 
4554
cbtx2:
-
 
4555
; btx r/m,r = 0F 101xx011 (A3,AB,B3,BB)
-
 
4556
	shr	al, 3
-
 
4557
	and	eax, 3
-
 
4558
	mov	eax, [btx1codes+eax*4]
-
 
4559
	stosd
-
 
4560
	mov	eax, '    '
-
 
4561
	stosd
-
 
4562
	or	ch, 0xC0
-
 
4563
	call	disasm_get_byte
-
 
4564
	dec	[disasm_cur_pos]
-
 
4565
	shr	al, 3
-
 
4566
	and	eax, 7
-
 
4567
	push	eax
-
 
4568
	call	disasm_readrmop
-
 
4569
	mov	ax, ', '
-
 
4570
	stosw
-
 
4571
	pop	eax
-
 
4572
	call	disasm_write_reg1632
-
 
4573
	and	byte [edi], 0
-
 
4574
	ret
-
 
4575
 
-
 
4576
csetcc:
-
 
4577
	and	eax, 0xF
-
 
4578
	mov	ax, [disasm_jcc_codes + eax*2]
-
 
4579
	mov	dword [edi], 'setc'
-
 
4580
	add	edi, 3
-
 
4581
	stosw
-
 
4582
	mov	ax, '  '
-
 
4583
	stosw
-
 
4584
	stosb
-
 
4585
	call	disasm_readrmop
-
 
4586
	and	byte [edi], 0
-
 
4587
	ret
-
 
4588
 
-
 
4589
iglobal
-
 
4590
disasm_jcc_codes dw 'o ','no','b ','ae','z ','nz','be','a ','s ','ns','p ','np','l ','ge','le','g '
-
 
4591
endg
-
 
4592
cjcc1:
-
 
4593
cjmp2:
-
 
4594
	cmp	al, 0xEB
-
 
4595
	jz	.1
-
 
4596
	and	eax, 0xF
-
 
4597
	mov	ax, [disasm_jcc_codes + eax*2]
-
 
4598
	jmp	.2
-
 
4599
.1:
-
 
4600
	mov	ax, 'mp'
-
 
4601
.2:
-
 
4602
	mov	byte [edi], 'j'
-
 
4603
	inc	edi
-
 
4604
	stosw
-
 
4605
	mov	eax, '    '
-
 
4606
	stosb
-
 
4607
	stosd
-
 
4608
	call	disasm_get_byte
-
 
4609
	movsx	eax, al
-
 
4610
disasm_rva:
-
 
4611
	add	eax, [disasm_cur_pos]
-
 
4612
	call	disasm_write_num
-
 
4613
	and	byte [edi], 0
-
 
4614
	ret
-
 
4615
 
-
 
4616
ccall1:
-
 
4617
cjmp1:
-
 
4618
cjcc2:
-
 
4619
	mov	edx, 'call'
-
 
4620
	cmp	al, 0xE8
-
 
4621
	jz	@f
-
 
4622
	mov	edx, 'jmp '
-
 
4623
	cmp	al, 0xE9
-
 
4624
	jz	@f
-
 
4625
	mov	edx, '    '
-
 
4626
	and	eax, 0xF
-
 
4627
	mov	dx, [disasm_jcc_codes+eax*2]
-
 
4628
	shl	edx, 8
-
 
4629
	mov	dl, 'j'
-
 
4630
@@:
-
 
4631
	xchg	eax, edx
-
 
4632
	stosd
-
 
4633
	mov	eax, '    '
-
 
4634
	stosd
-
 
4635
	test	ch, 1
-
 
4636
	jnz	@f
-
 
4637
	call	disasm_get_dword
-
 
4638
	jmp	disasm_rva
-
 
4639
@@:
-
 
4640
	call	disasm_get_word
-
 
4641
	add	eax, [disasm_cur_pos]
-
 
4642
	and	eax, 0xFFFF
-
 
4643
	call	disasm_write_num
-
 
4644
	and	byte [edi], 0
-
 
4645
	ret
-
 
4646
 
-
 
4647
ccallf:
-
 
4648
	mov	eax, 'call'
-
 
4649
	stosd
-
 
4650
	mov	eax, '    '
-
 
4651
	stosd
-
 
4652
	mov	al, 'd'
-
 
4653
	test	ch, 1
-
 
4654
	jnz	@f
-
 
4655
	mov	al, 'p'
-
 
4656
@@:
-
 
4657
	stosb
-
 
4658
	mov	eax, 'word'
-
 
4659
	stosd
-
 
4660
	mov	al, ' '
-
 
4661
	stosb
-
 
4662
	test	ch, 1
-
 
4663
	jnz	.1
-
 
4664
	call	disasm_get_dword
-
 
4665
	jmp	.2
-
 
4666
.1:
-
 
4667
	xor	eax, eax
-
 
4668
	call	disasm_get_word
-
 
4669
.2:
-
 
4670
	push	eax
-
 
4671
	xor	eax, eax
-
 
4672
	call	disasm_get_word
-
 
4673
	call	disasm_write_num
-
 
4674
	mov	al, ':'
-
 
4675
	stosb
-
 
4676
	pop	eax
-
 
4677
	call	disasm_write_num
-
 
4678
	and	byte [edi], 0
-
 
4679
	ret
-
 
4680
 
-
 
4681
iglobal
-
 
4682
op11codes	dd	'test',0,'not ','neg ','mul ','imul','div ','idiv'
-
 
4683
op12codes	dd	'inc ','dec ','call',0,'jmp ',0,'push',0
-
 
4684
endg
-
 
4685
cop1:
-
 
4686
	disasm_set_modew
-
 
4687
	xchg	eax, edx
-
 
4688
	call	disasm_get_byte
-
 
4689
	movzx	esi, al
-
 
4690
	dec	[disasm_cur_pos]
-
 
4691
	shr	al, 3
-
 
4692
	and	eax, 7
-
 
4693
	cmp	dl, 0xFE
-
 
4694
	jnz	@f
-
 
4695
	cmp	al, 1
-
 
4696
	jbe	@f
-
 
4697
.0:
-
 
4698
	inc	[disasm_cur_pos]
-
 
4699
	jmp	cunk
-
 
4700
@@:
-
 
4701
	and	edx, 8
-
 
4702
	add	eax, edx
-
 
4703
	cmp	al, 11
-
 
4704
	jz	.callfar
-
 
4705
	cmp	al, 13
-
 
4706
	jz	.jmpfar
-
 
4707
	mov	eax, [op11codes+eax*4]
-
 
4708
	test	eax, eax
-
 
4709
	jz	.0
-
 
4710
	cmp	eax, 'test'
-
 
4711
	jz	ctest
-
 
4712
.2:
-
 
4713
	stosd
-
 
4714
	mov	eax, '    '
-
 
4715
	stosd
-
 
4716
	call	disasm_readrmop
-
 
4717
	and	byte [edi], 0
-
 
4718
	ret
-
 
4719
.callfar:
-
 
4720
	mov	eax, 'call'
-
 
4721
.1:
-
 
4722
	cmp	esi, 0xC0
-
 
4723
	jae	.0
-
 
4724
	stosd
-
 
4725
	mov	eax, '    '
-
 
4726
	stosd
-
 
4727
	mov	eax, 'far '
-
 
4728
	stosd
-
 
4729
	mov	al, 'd'
-
 
4730
	test	ch, 1
-
 
4731
	jnz	@f
-
 
4732
	mov	al, 'p'
-
 
4733
@@:
-
 
4734
	stosb
-
 
4735
	or	ch, 1
-
 
4736
	call	disasm_readrmop
-
 
4737
	and	byte [edi], 0
-
 
4738
	ret
-
 
4739
.jmpfar:
-
 
4740
	mov	eax, 'jmp '
-
 
4741
	jmp	.1
-
 
4742
 
-
 
4743
cpop2:
-
 
4744
	or	ch, 80h
-
 
4745
	call	disasm_get_byte
-
 
4746
	dec	[disasm_cur_pos]
-
 
4747
	test	al, 00111000b
-
 
4748
	jnz	cunk
-
 
4749
	mov	eax, 'pop '
-
 
4750
	jmp	cop1.2
-
 
4751
 
-
 
4752
cloopnz:
-
 
4753
	mov	eax, 'loop'
-
 
4754
	stosd
-
 
4755
	mov	eax, 'nz  '
-
 
4756
	test	ch, 2
-
 
4757
	jz	@f
-
 
4758
	mov	ah, 'w'
-
 
4759
@@:	jmp	cloop.cmn
-
 
4760
cloopz:
-
 
4761
	mov	eax, 'loop'
-
 
4762
	stosd
-
 
4763
	mov	eax, 'z   '
-
 
4764
	test	ch, 2
-
 
4765
	jz	@f
-
 
4766
	mov	eax, 'zw  '
-
 
4767
@@:	jmp	cloop.cmn
-
 
4768
 
-
 
4769
cjcxz:
-
 
4770
cloop:
-
 
4771
	cmp	al, 0xE2
-
 
4772
	jz	.loop
-
 
4773
	test	ch, 2
-
 
4774
	jnz	.jcxz
-
 
4775
	mov	eax, 'jecx'
-
 
4776
	stosd
-
 
4777
	mov	eax, 'z   '
-
 
4778
	jmp	.cmn
-
 
4779
.jcxz:
-
 
4780
	mov	eax, 'jcxz'
-
 
4781
	stosd
-
 
4782
	mov	eax, '    '
-
 
4783
	jmp	.cmn
-
 
4784
.loop:
-
 
4785
	mov	eax, 'loop'
-
 
4786
	stosd
-
 
4787
	mov	eax, '    '
-
 
4788
	test	ch, 2
-
 
4789
	jz	.cmn
-
 
4790
	mov	al, 'w'
-
 
4791
.cmn:
-
 
4792
	stosd
-
 
4793
	call	disasm_get_byte
-
 
4794
	movsx	eax, al
-
 
4795
	add	eax, [disasm_cur_pos]
-
 
4796
	test	ch, 1
-
 
4797
	jz	@f
-
 
4798
	and	eax, 0xFFFF
-
 
4799
@@:
-
 
4800
disasm_write_num_done:
-
 
4801
	call	disasm_write_num
-
 
4802
	and	byte [edi], 0
-
 
4803
	ret
-
 
4804
 
-
 
4805
cimul1:
-
 
4806
; imul r,r/m,i
-
 
4807
	or	ch, 80h		; 32bit operation
-
 
4808
	xchg	eax, edx
-
 
4809
	mov	eax, 'imul'
-
 
4810
	stosd
-
 
4811
	mov	eax, '    '
-
 
4812
	stosd
-
 
4813
	call	disasm_get_byte
-
 
4814
	dec	[disasm_cur_pos]
-
 
4815
	shr	al, 3
-
 
4816
	and	eax, 7
-
 
4817
	call	disasm_write_reg1632
-
 
4818
	mov	ax, ', '
-
 
4819
	stosw
-
 
4820
	call	disasm_readrmop
-
 
4821
	mov	ax, ', '
-
 
4822
	stosw
-
 
4823
	test	ch, 1
-
 
4824
	jnz	.16
-
 
4825
	cmp	dl, 0x69
-
 
4826
	jz	.op32
-
 
4827
	call	disasm_get_byte
-
 
4828
	movsx	eax, al
-
 
4829
	jmp	disasm_write_num_done
-
 
4830
.op32:
-
 
4831
	call	disasm_get_dword
-
 
4832
	jmp	disasm_write_num_done
-
 
4833
.16:
-
 
4834
	cmp	dl, 0x69
-
 
4835
	jz	.op16
-
 
4836
	call	disasm_get_byte
-
 
4837
	cbw
-
 
4838
	jmp	disasm_write_num_done
-
 
4839
.op16:
-
 
4840
	xor	eax, eax
-
 
4841
	call	disasm_get_word
-
 
4842
	jmp	disasm_write_num_done
-
 
4843
 
-
 
4844
cshld:
-
 
4845
cshrd:
-
 
4846
	mov	edx, 'shld'
-
 
4847
	test	al, 8
-
 
4848
	jz	@f
-
 
4849
	mov	edx, 'shrd'
-
 
4850
@@:
-
 
4851
	xchg	eax, edx
-
 
4852
	stosd
-
 
4853
	mov	eax, '    '
-
 
4854
	stosd
-
 
4855
	call	disasm_get_byte
-
 
4856
	dec	[disasm_cur_pos]
-
 
4857
	shr	al, 3
-
 
4858
	and	eax, 7
-
 
4859
	push	eax
-
 
4860
	or	ch, 80h
-
 
4861
	call	disasm_readrmop
-
 
4862
	mov	ax, ', '
-
 
4863
	stosw
-
 
4864
	pop	eax
-
 
4865
	call	disasm_write_reg1632
-
 
4866
	mov	ax, ', '
-
 
4867
	stosw
-
 
4868
	test	dl, 1
-
 
4869
	jz	disasm_i8u
-
 
4870
	mov	ax, 'cl'
-
 
4871
	stosw
-
 
4872
	and	byte [edi], 0
-
 
4873
	ret
-
 
4874
 
-
 
4875
ccbw:
-
 
4876
	mov	eax, 'cbw '
-
 
4877
	test	ch, 1
-
 
4878
	jnz	@f
-
 
4879
	mov	eax, 'cwde'
-
 
4880
@@:	stosd
-
 
4881
	and	byte [edi], 0
-
 
4882
	ret
-
 
4883
ccwd:
-
 
4884
	mov	eax, 'cwd '
-
 
4885
	test	ch, 1
-
 
4886
	jnz	@b
-
 
4887
	mov	eax, 'cdq '
-
 
4888
	jmp	@b
-
 
4889
 
-
 
4890
ccmpxchg8b:
-
 
4891
	call	disasm_get_byte
-
 
4892
	cmp	al, 0xC0
-
 
4893
	jae	cerr
-
 
4894
	shr	al, 3
-
 
4895
	and	al, 7
-
 
4896
	cmp	al, 1
-
 
4897
	jnz	cerr
-
 
4898
	dec	[disasm_cur_pos]
-
 
4899
	mov	eax, 'cmpx'
-
 
4900
	stosd
-
 
4901
	mov	eax, 'chg8'
-
 
4902
	stosd
-
 
4903
	mov	al, 'b'
-
 
4904
	stosb
-
 
4905
	mov	al, ' '
-
 
4906
	stosb
-
 
4907
	or	ch, 40h
-
 
4908
	call	disasm_readrmop
-
 
4909
	and	byte [edi], 0
-
 
4910
	ret
-
 
4911
 
-
 
4912
iglobal
-
 
4913
fpuD8	dd	'add ','mul ','com ','comp','sub ','subr','div ','divr'
-
 
4914
endg
-
 
4915
 
-
 
4916
cD8:
-
 
4917
	call	disasm_get_byte
-
 
4918
	dec	[disasm_cur_pos]
-
 
4919
	push	eax
-
 
4920
	shr	al, 3
-
 
4921
	and	eax, 7
-
 
4922
	mov	byte [edi], 'f'
-
 
4923
	inc	edi
-
 
4924
	xchg	eax, edx
-
 
4925
	mov	eax, [fpuD8+edx*4]
-
 
4926
	stosd
-
 
4927
	mov	ax, '  '
-
 
4928
	stosw
-
 
4929
	stosb
-
 
4930
	pop	eax
-
 
4931
	cmp	dl, 2
-
 
4932
	jb	.1
-
 
4933
	cmp	dl, 3
-
 
4934
	jbe	.2
-
 
4935
.1:
-
 
4936
	cmp	al, 0xC0
-
 
4937
	jb	.2
-
 
4938
	mov	eax, 'st0,'
-
 
4939
	stosd
-
 
4940
	mov	al, ' '
-
 
4941
	stosb
-
 
4942
.2:
-
 
4943
	or	ch, 80h or 20h
-
 
4944
	and	ch, not 1
-
 
4945
	call	disasm_readrmop
-
 
4946
	and	byte [edi], 0
-
 
4947
	ret
-
 
4948
 
-
 
4949
iglobal
-
 
4950
fpuD9_2:
-
 
4951
	dq	'fchs    ','fabs    ',0,0,'ftst    ','fxam    ',0,0
-
 
4952
	db	'fld1    fldl2t  fldl2e  fldpi   fldlg2  fldln2  fldz    '
-
 
4953
	dq	0
-
 
4954
	db	'f2xm1   fyl2x   fptan   fpatan  fxtract fprem1  fdecstp fincstp '
-
 
4955
	db	'fprem   fyl2xp1 fsqrt   fsincos frndint fscale  fsin    fcos    '
-
 
4956
fpuD9_fnop	db	'fnop    '
-
 
4957
endg
-
 
4958
cD9:
-
 
4959
	call	disasm_get_byte
-
 
4960
	sub	al, 0xC0
-
 
4961
	jae	.l1
-
 
4962
	dec	[disasm_cur_pos]
-
 
4963
	shr	al, 3
-
 
4964
	and	eax, 7
-
 
4965
	cmp	al, 7
-
 
4966
	jnz	@f
-
 
4967
	mov	eax, 'fnst'
-
 
4968
	stosd
-
 
4969
	mov	eax, 'cw  '
-
 
4970
	jmp	.x1
-
 
4971
@@:
-
 
4972
	cmp	al, 5
-
 
4973
	jnz	@f
-
 
4974
	mov	eax, 'fldc'
-
 
4975
	stosd
-
 
4976
	mov	eax, 'w   '
-
 
4977
.x1:
-
 
4978
	stosd
-
 
4979
	or	ch, 0C1h
-
 
4980
	jmp	.cmn
-
 
4981
@@:
-
 
4982
	mov	edx, 'fld '
-
 
4983
	test	al, al
-
 
4984
	jz	@f
-
 
4985
	mov	edx, 'fst '
-
 
4986
	cmp	al, 2
-
 
4987
	jz	@f
-
 
4988
	mov	edx, 'fstp'
-
 
4989
	cmp	al, 3
-
 
4990
	jnz	cunk
-
 
4991
@@:
-
 
4992
	xchg	eax, edx
-
 
4993
	stosd
-
 
4994
	mov	eax, '    '
-
 
4995
	stosd
-
 
4996
	or	ch, 80h
-
 
4997
	and	ch, not 1
-
 
4998
.cmn:
-
 
4999
	call	disasm_readrmop
-
 
5000
	and	byte [edi], 0
-
 
5001
	ret
-
 
5002
.l1:
-
 
5003
	cmp	al, 10h
-
 
5004
	jae	.l2
-
 
5005
	mov	edx, 'fld '
-
 
5006
	cmp	al, 8
-
 
5007
	jb	@f
-
 
5008
	mov	edx, 'fxch'
-
 
5009
@@:
-
 
5010
	xchg	eax, edx
-
 
5011
	stosd
-
 
5012
	mov	eax, '    '
-
 
5013
	stosd
-
 
5014
	xchg	eax, edx
-
 
5015
	and	al, 7
-
 
5016
	add	al, '0'
-
 
5017
	shl	eax, 16
-
 
5018
	mov	ax, 'st'
-
 
5019
	stosd
-
 
5020
	clc
-
 
5021
	ret
-
 
5022
.l2:
-
 
5023
	cmp	al, 0x10
-
 
5024
	jnz	@f
-
 
5025
	mov	esi, fpuD9_fnop
-
 
5026
	jmp	.l3
-
 
5027
@@:
-
 
5028
	sub	al, 0x20
-
 
5029
	jb	cerr
-
 
5030
	lea	esi, [fpuD9_2+eax*8]
-
 
5031
	cmp	byte [esi], 0
-
 
5032
	jz	cerr
-
 
5033
.l3:
-
 
5034
	movsd
-
 
5035
	movsd
-
 
5036
	and	byte [edi-1], 0
-
 
5037
	ret
-
 
5038
 
-
 
5039
cDA:
-
 
5040
	call	disasm_get_byte
-
 
5041
	cmp	al, 0xC0
-
 
5042
	jae	cunk
-
 
5043
	dec	[disasm_cur_pos]
-
 
5044
	shr	al, 3
-
 
5045
	and	eax, 7
-
 
5046
	mov	word [edi], 'fi'
-
 
5047
	inc	edi
-
 
5048
	inc	edi
-
 
5049
	mov	eax, [fpuD8+eax*4]
-
 
5050
	stosd
-
 
5051
	mov	ax, '  '
-
 
5052
	stosw
-
 
5053
	or	ch, 80h
-
 
5054
	and	ch, not 1	; 32-bit operand
-
 
5055
	call	disasm_readrmop
-
 
5056
	and	byte [edi], 0
-
 
5057
	ret
-
 
5058
 
-
 
5059
iglobal
-
 
5060
fpuDB	dd	'ild ',0,'ist ','istp',0,'ld  ',0,'stp '
-
 
5061
endg
-
 
5062
cDB:
-
 
5063
	call	disasm_get_byte
-
 
5064
	cmp	al, 0xC0
-
 
5065
	jae	.1
-
 
5066
	dec	[disasm_cur_pos]
-
 
5067
	shr	al, 3
-
 
5068
	and	eax, 7
-
 
5069
	xchg	eax, edx
-
 
5070
	mov	eax, [fpuDB+edx*4]
-
 
5071
	test	eax, eax
-
 
5072
	jz	cerr
-
 
5073
	mov	byte [edi], 'f'
-
 
5074
	inc	edi
-
 
5075
	stosd
-
 
5076
	mov	ax, '  '
-
 
5077
	stosw
-
 
5078
	stosb
-
 
5079
	or	ch, 80h
-
 
5080
	and	ch, not 1	; 32-bit operand
-
 
5081
	cmp	dl, 4
-
 
5082
	jb	@f
-
 
5083
	or	ch, 20h
-
 
5084
	and	ch, not 80h	; 80-bit operand
-
 
5085
@@:
-
 
5086
	call	disasm_readrmop
-
 
5087
	and	byte [edi], 0
-
 
5088
	ret
-
 
5089
.1:
-
 
5090
	cmp	al, 0xE3
-
 
5091
	jnz	cunk
-
 
5092
	mov	eax, 'fnin'
-
 
5093
	stosd
-
 
5094
	mov	eax, 'it'
-
 
5095
	stosd
-
 
5096
	dec	edi
-
 
5097
	ret		; CF cleared
-
 
5098
 
-
 
5099
iglobal
-
 
5100
fpuDC	dd	'add ','mul ',0,0,'subr','sub ','divr','div '
-
 
5101
endg
-
 
5102
cDC:
-
 
5103
	call	disasm_get_byte
-
 
5104
	cmp	al, 0xC0
-
 
5105
	jae	.1
-
 
5106
	dec	[disasm_cur_pos]
-
 
5107
	shr	al, 3
-
 
5108
	and	eax, 7
-
 
5109
	mov	byte [edi], 'f'
-
 
5110
	inc	edi
-
 
5111
	mov	eax, [fpuD8+eax*4]
-
 
5112
	stosd
-
 
5113
	mov	ax, '  '
-
 
5114
	stosw
-
 
5115
	stosb
-
 
5116
	or	ch, 0A1h	; qword
-
 
5117
	call	disasm_readrmop
-
 
5118
	and	byte [edi], 0
-
 
5119
	ret
-
 
5120
.1:
-
 
5121
	mov	dl, al
-
 
5122
	shr	al, 3
-
 
5123
	and	eax, 7
-
 
5124
	mov	eax, [fpuDC+eax*4]
-
 
5125
	test	eax, eax
-
 
5126
	jz	cerr
-
 
5127
	mov	byte [edi], 'f'
-
 
5128
	inc	edi
-
 
5129
	stosd
-
 
5130
	mov	eax, '   s'
-
 
5131
	stosd
-
 
5132
	mov	al, 't'
-
 
5133
	stosb
-
 
5134
	and	edx, 7
-
 
5135
	lea	eax, [edx+'0']
-
 
5136
	stosb
-
 
5137
	mov	eax, ', st'
-
 
5138
	stosd
-
 
5139
	mov	ax, '0'
-
 
5140
	stosw
-
 
5141
	ret	; CF cleared
-
 
5142
 
-
 
5143
iglobal
-
 
5144
fpuDD	dd	'fld ',0,'fst ','fstp',0,0,0,0
-
 
5145
fpuDD_2	dq	'ffree   ',0,'fst     ','fstp    ','fucom   ','fucomp  ',0,0
-
 
5146
endg
-
 
5147
cDD:
-
 
5148
	call	disasm_get_byte
-
 
5149
	cmp	al, 0xC0
-
 
5150
	jae	.1
-
 
5151
	dec	[disasm_cur_pos]
-
 
5152
	shr	al, 3
-
 
5153
	and	eax, 7
-
 
5154
	xchg	eax, edx
-
 
5155
	mov	eax, [fpuDD+edx*4]
-
 
5156
	test	eax, eax
-
 
5157
	jz	cunk
-
 
5158
	stosd
-
 
5159
	mov	eax, '    '
-
 
5160
	stosd
-
 
5161
	or	ch, 0A1h	; qword operand
-
 
5162
	call	disasm_readrmop
-
 
5163
	and	byte [edi], 0
-
 
5164
	ret
-
 
5165
.1:
-
 
5166
	push	eax
-
 
5167
	shr	al, 3
-
 
5168
	and	eax, 7
-
 
5169
	xchg	eax, edx
-
 
5170
	mov	eax, dword [fpuDD_2+edx*8]
-
 
5171
	test	eax, eax
-
 
5172
	jz	cerr
-
 
5173
	stosd
-
 
5174
	mov	eax, dword [fpuDD_2+4+edx*8]
-
 
5175
	stosd
-
 
5176
	mov	ax, 'st'
-
 
5177
	stosw
-
 
5178
	pop	eax
-
 
5179
	and	al, 7
-
 
5180
	add	al, '0'
-
 
5181
	stosb
-
 
5182
	and	byte [edi], 0
-
 
5183
	ret
-
 
5184
 
-
 
5185
iglobal
-
 
5186
fpuDE	dd	'add ','mul ',0,0,'subr','sub ','divr','div '
-
 
5187
endg
-
 
5188
cDE:
-
 
5189
	call	disasm_get_byte
-
 
5190
	cmp	al, 0xC0
-
 
5191
	jae	.1
-
 
5192
	dec	[disasm_cur_pos]
-
 
5193
	mov	word [edi], 'fi'
-
 
5194
	inc	edi
-
 
5195
	inc	edi
-
 
5196
	shr	al, 3
-
 
5197
	and	eax, 7
-
 
5198
	mov	eax, [fpuD8+eax*4]
-
 
5199
	stosd
-
 
5200
	mov	ax, '  '
-
 
5201
	stosw
-
 
5202
	or	ch, 81h		; force 16-bit
-
 
5203
	call	disasm_readrmop
-
 
5204
	and	byte [edi], 0
-
 
5205
	ret
-
 
5206
.1:
-
 
5207
	push	eax
-
 
5208
	shr	al, 3
-
 
5209
	and	eax, 7
-
 
5210
	xchg	eax, edx
-
 
5211
	mov	eax, [fpuDE+edx*4]
-
 
5212
	test	eax, eax
-
 
5213
	jz	.fcompp
-
 
5214
	mov	byte [edi], 'f'
-
 
5215
	inc	edi
-
 
5216
	stosd
-
 
5217
	mov	al, 'p'
-
 
5218
	cmp	byte [edi-1], ' '
-
 
5219
	jnz	@f
-
 
5220
	mov	byte [edi-1], al
-
 
5221
	mov	al, ' '
-
 
5222
@@:	stosb
-
 
5223
	mov	eax, '  st'
-
 
5224
	stosd
-
 
5225
	pop	eax
-
 
5226
	and	al, 7
-
 
5227
	add	al, '0'
-
 
5228
	stosb
-
 
5229
	mov	ax, ', '
-
 
5230
	stosw
-
 
5231
	mov	eax, 'st0'
-
 
5232
	stosd
-
 
5233
	ret	; CF cleared
-
 
5234
.fcompp:
-
 
5235
	pop	eax
-
 
5236
	cmp	al, 0xD9
-
 
5237
	jnz	cerr
-
 
5238
	mov	eax, 'fcom'
-
 
5239
	stosd
-
 
5240
	mov	ax, 'pp'
-
 
5241
	stosw
-
 
5242
	and	byte [edi], 0
-
 
5243
	ret
-
 
5244
 
-
 
5245
iglobal
-
 
5246
fpuDF	dd	'ild ',0,'ist ','istp','bld ','ild ','bstp','istp'
-
 
5247
endg
-
 
5248
 
-
 
5249
cDF:
-
 
5250
	call	disasm_get_byte
-
 
5251
	cmp	al, 0xC0
-
 
5252
	jae	.1
-
 
5253
	dec	[disasm_cur_pos]
-
 
5254
	shr	al, 3
-
 
5255
	and	eax, 7
-
 
5256
	xchg	eax, edx
-
 
5257
	mov	eax, [fpuDF+edx*4]
-
 
5258
	test	eax, eax
-
 
5259
	jz	cerr
-
 
5260
	mov	byte [edi], 'f'
-
 
5261
	inc	edi
-
 
5262
	stosd
-
 
5263
	mov	ax, '  '
-
 
5264
	stosw
-
 
5265
	stosb
-
 
5266
	or	ch, 81h		; force 16-bit operand
-
 
5267
	cmp	dl, 4
-
 
5268
	jb	@f
-
 
5269
	or	ch, 20h
-
 
5270
	test	dl, 1
-
 
5271
	jnz	@f
-
 
5272
	or	ch, 40h
-
 
5273
@@:
-
 
5274
	call	disasm_readrmop
-
 
5275
	and	byte [edi], 0
-
 
5276
	ret
-
 
5277
.1:
-
 
5278
	cmp	al, 0xE0
-
 
5279
	jnz	cunk
-
 
5280
	mov	eax, 'fnst'
-
 
5281
	stosd
-
 
5282
	mov	eax, 'sw  '
-
 
5283
	stosd
-
 
5284
	mov	ax, 'ax'
-
 
5285
	stosw
-
 
5286
	and	byte [edi], 0
-
 
5287
	ret
-
 
5288
 
-
 
5289
cmovd1:
-
 
5290
	mov	eax, 'movd'
-
 
5291
	stosd
-
 
5292
	mov	eax, '    '
-
 
5293
	stosd
-
 
5294
	call	disasm_get_byte
-
 
5295
	dec	[disasm_cur_pos]
-
 
5296
	shr	al, 3
-
 
5297
	and	eax, 7
-
 
5298
	call	disasm_write_mmreg
-
 
5299
	mov	ax, ', '
-
 
5300
	stosw
-
 
5301
	or	ch, 0C0h
-
 
5302
	and	ch, not 1
-
 
5303
	call	disasm_readrmop
-
 
5304
	and	byte [edi], 0
-
 
5305
	ret
-
 
5306
cmovd2:
-
 
5307
	mov	eax, 'movd'
-
 
5308
	stosd
-
 
5309
	mov	eax, '    '
-
 
5310
	stosd
-
 
5311
	call	disasm_get_byte
-
 
5312
	dec	[disasm_cur_pos]
-
 
5313
	shr	al, 3
-
 
5314
	and	eax, 7
-
 
5315
	push	eax ecx
-
 
5316
	or	ch, 0C0h
-
 
5317
	and	ch, not 1
-
 
5318
	call	disasm_readrmop
-
 
5319
	mov	ax, ', '
-
 
5320
	stosw
-
 
5321
	pop	ecx eax
-
 
5322
	call	disasm_write_mmreg
-
 
5323
	and	byte [edi], 0
-
 
5324
	ret
-
 
5325
 
-
 
5326
cmovq1:
-
 
5327
	test	ch, 1
-
 
5328
	jz	.mm
-
 
5329
	mov	eax, 'movd'
-
 
5330
	stosd
-
 
5331
	mov	eax, 'qa  '
-
 
5332
	stosd
-
 
5333
	jmp	disasm_mmx1
-
 
5334
.mm:
-
 
5335
	mov	eax, 'movq'
-
 
5336
	stosd
-
 
5337
	mov	eax, '    '
-
 
5338
	stosd
-
 
5339
	jmp	disasm_mmx1
-
 
5340
cmovq2:
-
 
5341
	test	ch, 1
-
 
5342
	jz	.mm
-
 
5343
	mov	eax, 'movd'
-
 
5344
	stosd
-
 
5345
	mov	eax, 'qa  '
-
 
5346
	stosd
-
 
5347
	jmp	disasm_mmx3
-
 
5348
.mm:
-
 
5349
	mov	eax, 'movq'
-
 
5350
disasm_mmx2:
-
 
5351
	stosd
-
 
5352
	mov	eax, '    '
-
 
5353
	stosd
-
 
5354
disasm_mmx3:
-
 
5355
	or	ch, 50h
-
 
5356
	call	disasm_get_byte
-
 
5357
	dec	[disasm_cur_pos]
-
 
5358
	push	eax
-
 
5359
	call	disasm_readrmop
-
 
5360
	mov	ax, ', '
-
 
5361
	stosw
-
 
5362
	pop	eax
-
 
5363
	shr	al, 3
-
 
5364
	and	eax, 7
-
 
5365
	call	disasm_write_mmreg
-
 
5366
	and	byte [edi], 0
-
 
5367
	ret
-
 
5368
 
-
 
5369
iglobal
-
 
5370
mmx_cmds:
-
 
5371
	db	0x60,'unpcklbw'
-
 
5372
	db	0x61,'unpcklwd'
-
 
5373
	db	0x62,'unpckldq'
-
 
5374
	db	0x63,'packsswb'
-
 
5375
	db	0x64,'pcmpgtb '
-
 
5376
	db	0x65,'pcmpgtw '
-
 
5377
	db	0x66,'pcmpgtd '
-
 
5378
	db	0x67,'packuswb'
-
 
5379
	db	0x68,'unpckhbw'
-
 
5380
	db	0x69,'unpckhwd'
-
 
5381
	db	0x6A,'unpckhdq'
-
 
5382
	db	0x6B,'packssdw'
-
 
5383
	db	0x74,'pcmpeqb '
-
 
5384
	db	0x75,'pcmpeqw '
-
 
5385
	db	0x76,'pcmpeqd '
-
 
5386
	db	0xD4,'paddq   '
-
 
5387
	db	0xD5,'pmullw  '
-
 
5388
	db	0xD8,'psubusb '
-
 
5389
	db	0xD9,'psubusw '
-
 
5390
	db	0xDA,'pminub  '
-
 
5391
	db	0xDB,'pand    '
-
 
5392
	db	0xDC,'paddusb '
-
 
5393
	db	0xDD,'paddusw '
-
 
5394
	db	0xDE,'pmaxub  '
-
 
5395
	db	0xDF,'pandn   '
-
 
5396
	db	0xE0,'pavgb   '
-
 
5397
	db	0xE3,'pavgw   '
-
 
5398
	db	0xE4,'pmulhuw '
-
 
5399
	db	0xE5,'pmulhw  '
-
 
5400
	db	0xE8,'psubsb  '
-
 
5401
	db	0xE9,'psubsw  '
-
 
5402
	db	0xEA,'pminsw  '
-
 
5403
	db	0xEB,'por     '
-
 
5404
	db	0xEC,'paddsb  '
-
 
5405
	db	0xED,'paddsw  '
-
 
5406
	db	0xEE,'pmaxsw  '
-
 
5407
	db	0xEF,'pxor    '
-
 
5408
	db	0xF4,'pmuludq '
-
 
5409
	db	0xF5,'pmaddwd '
-
 
5410
	db	0xF6,'psadbw  '
-
 
5411
	db	0xF8,'psubb   '
-
 
5412
	db	0xF9,'psubw   '
-
 
5413
	db	0xFA,'psubd   '
-
 
5414
	db	0xFB,'psubq   '
-
 
5415
	db	0xFC,'paddb   '
-
 
5416
	db	0xFD,'paddw   '
-
 
5417
	db	0xFE,'paddd   '
-
 
5418
endg
-
 
5419
cpcmn:
-
 
5420
	mov	esi, mmx_cmds
-
 
5421
@@:
-
 
5422
	cmp	al, [esi]
-
 
5423
	jz	@f
-
 
5424
	add	esi, 9
-
 
5425
	jmp	@b
-
 
5426
@@:
-
 
5427
	inc	esi
-
 
5428
	mov	al, 'p'
-
 
5429
	cmp	byte [esi], al
-
 
5430
	jz	@f
-
 
5431
	stosb
-
 
5432
@@:
-
 
5433
	movsd
-
 
5434
	movsd
-
 
5435
	cmp	byte [edi-1], ' '
-
 
5436
	jz	@f
-
 
5437
	mov	al, ' '
-
 
5438
	stosb
-
 
5439
@@:
-
 
5440
 
-
 
5441
disasm_mmx1:
-
 
5442
	or	ch, 50h
-
 
5443
	call	disasm_get_byte
-
 
5444
	dec	[disasm_cur_pos]
-
 
5445
	shr	al, 3
-
 
5446
	and	eax, 7
-
 
5447
	call	disasm_write_mmreg
-
 
5448
	mov	ax, ', '
-
 
5449
	stosw
-
 
5450
	call	disasm_readrmop
-
 
5451
	cmp	word [disasm_string], 'cm'
-
 
5452
	jz	.cmp
-
 
5453
	and	byte [edi], 0
-
 
5454
	ret
-
 
5455
.cmp:
-
 
5456
	call	disasm_get_byte
-
 
5457
	and	eax, 7
-
 
5458
	mov	dx, 'eq'
-
 
5459
	dec	eax
-
 
5460
	js	@f
-
 
5461
	mov	dx, 'lt'
-
 
5462
	jz	@f
-
 
5463
	mov	dh, 'e'
-
 
5464
	dec	eax
-
 
5465
	jnz	.no2
-
 
5466
@@:
-
 
5467
	xchg	dx, word [disasm_string+3]
-
 
5468
	mov	word [disasm_string+5], dx
-
 
5469
	and	byte [edi], 0
-
 
5470
	ret
-
 
5471
.no2:
-
 
5472
	dec	eax
-
 
5473
	jnz	@f
-
 
5474
	add	edi, 2
-
 
5475
	push	edi
-
 
5476
	lea	esi, [edi-3]
-
 
5477
	lea	ecx, [esi-(disasm_string+8)+2]
-
 
5478
	std
-
 
5479
	rep	movsb
-
 
5480
	cld
-
 
5481
	mov	cx, word [esi-3]
-
 
5482
	mov	dword [esi-3], 'unor'
-
 
5483
	mov	byte [esi+1], 'd'
-
 
5484
	mov	word [esi+2], cx
-
 
5485
	pop	edi
-
 
5486
	and	byte [edi+1], 0
-
 
5487
	ret
-
 
5488
@@:
-
 
5489
	mov	edx, 'neq'
-
 
5490
	dec	eax
-
 
5491
	jz	@f
-
 
5492
	mov	edx, 'nlt'
-
 
5493
	dec	eax
-
 
5494
	jz	@f
-
 
5495
	mov	edx, 'nle'
-
 
5496
	dec	eax
-
 
5497
	jz	@f
-
 
5498
	mov	edx, 'ord'
-
 
5499
@@:
-
 
5500
	push	edi
-
 
5501
	lea	esi, [edi-1]
-
 
5502
	lea	ecx, [esi-(disasm_string+8)+2]
-
 
5503
	std
-
 
5504
	rep	movsb
-
 
5505
	cld
-
 
5506
	mov	cx, word [esi-3]
-
 
5507
	mov	dword [esi-3], edx
-
 
5508
	mov	word [esi], cx
-
 
5509
	pop	edi
-
 
5510
	and	byte [edi+1], 0
-
 
5511
	ret
-
 
5512
 
-
 
5513
cpsrlw:
-
 
5514
	mov	eax, 'psrl'
-
 
5515
	jmp	@f
-
 
5516
cpsraw:
-
 
5517
	mov	eax, 'psra'
-
 
5518
	jmp	@f
-
 
5519
cpsllw:
-
 
5520
	mov	eax, 'psll'
-
 
5521
@@:
-
 
5522
	stosd
-
 
5523
	mov	eax, 'w   '
-
 
5524
	stosd
-
 
5525
	jmp	disasm_mmx1
-
 
5526
cpsrld:
-
 
5527
	mov	eax, 'psrl'
-
 
5528
	jmp	@f
-
 
5529
cpsrad:
-
 
5530
	mov	eax, 'psra'
-
 
5531
	jmp	@f
-
 
5532
cpslld:
-
 
5533
	mov	eax, 'psll'
-
 
5534
@@:
-
 
5535
	stosd
-
 
5536
	mov	eax, 'd   '
-
 
5537
	stosd
-
 
5538
	jmp	disasm_mmx1
-
 
5539
cpsrlq:
-
 
5540
	mov	eax, 'psrl'
-
 
5541
	jmp	@f
-
 
5542
cpsllq:
-
 
5543
	mov	eax, 'psll'
-
 
5544
@@:
-
 
5545
	stosd
-
 
5546
	mov	eax, 'q   '
-
 
5547
	stosd
-
 
5548
	jmp	disasm_mmx1
-
 
5549
 
-
 
5550
csse1:
-
 
5551
iglobal
-
 
5552
sse_cmds1:
-
 
5553
	db	0x2F,4,'comi'
-
 
5554
	db	0x54,3,'and'
-
 
5555
	db	0x55,4,'andn'
-
 
5556
	db	0x58,3,'add'
-
 
5557
	db	0xC2,3,'cmp'
-
 
5558
endg
-
 
5559
	mov	esi, sse_cmds1+1
-
 
5560
.1:
-
 
5561
@@:
-
 
5562
	movzx	edx, byte [esi]
-
 
5563
	cmp	al, [esi-1]
-
 
5564
	jz	@f
-
 
5565
	lea	esi, [esi+edx+2]
-
 
5566
	jmp	@b
-
 
5567
@@:
-
 
5568
	push	ecx
-
 
5569
	mov	ecx, edx
-
 
5570
	inc	esi
-
 
5571
	rep	movsb
-
 
5572
	pop	ecx
-
 
5573
	mov	al, 's'
-
 
5574
	cmp	byte [edi-1], 'i'
-
 
5575
	jz	@f
-
 
5576
	mov	al, 'p'
-
 
5577
@@:
-
 
5578
	stosb
-
 
5579
	mov	al, 'd'
-
 
5580
	test	ch, 1
-
 
5581
	jnz	@f
-
 
5582
	mov	al, 's'
-
 
5583
@@:
-
 
5584
	stosb
-
 
5585
	push	ecx
-
 
5586
	push	5
-
 
5587
	pop	ecx
-
 
5588
	sub	ecx, edx
-
 
5589
	adc	ecx, 1
-
 
5590
	mov	al, ' '
-
 
5591
	rep	stosb
-
 
5592
	pop	ecx
-
 
5593
	or	ch, 1		; force XMM reg
-
 
5594
	jmp	disasm_mmx1
-
 
5595
 
-
 
5596
csse2:
-
 
5597
iglobal
-
 
5598
sse_cmds2:
-
 
5599
	db	0xD0,6,'addsub'
-
 
5600
	db	0,0
-
 
5601
endg
-
 
5602
	test	ch, 1
-
 
5603
	jz	cerr
-
 
5604
	mov	esi, sse_cmds2+1
-
 
5605
	jmp	csse1.1
-
 
5606
 
-
 
5607
cpshift:
-
 
5608
	mov	dl, al
-
 
5609
	mov	ax, 'ps'
-
 
5610
	stosw
-
 
5611
	call	disasm_get_byte
-
 
5612
	push	eax
-
 
5613
	and	al, 0xC0
-
 
5614
	cmp	al, 0xC0
-
 
5615
	jnz	.pop_cunk
-
 
5616
	pop	eax
-
 
5617
	push	eax
-
 
5618
	shr	al, 3
-
 
5619
	and	eax, 7
-
 
5620
	cmp	al, 2
-
 
5621
	jz	.rl
-
 
5622
	cmp	al, 4
-
 
5623
	jz	.ra
-
 
5624
	cmp	al, 6
-
 
5625
	jz	.ll
-
 
5626
.pop_cunk:
-
 
5627
	pop	eax
-
 
5628
	jmp	cunk
-
 
5629
.ll:
-
 
5630
	mov	ax, 'll'
-
 
5631
	jmp	@f
-
 
5632
.rl:
-
 
5633
	mov	ax, 'rl'
-
 
5634
	jmp	@f
-
 
5635
.ra:
-
 
5636
	cmp	dl, 0x73
-
 
5637
	jz	.pop_cunk
-
 
5638
	mov	ax, 'ra'
-
 
5639
@@:
-
 
5640
	stosw
-
 
5641
	mov	al, 'w'
-
 
5642
	cmp	dl, 0x71
-
 
5643
	jz	@f
-
 
5644
	mov	al, 'd'
-
 
5645
	cmp	dl, 0x72
-
 
5646
	jz	@f
-
 
5647
	mov	al, 'q'
-
 
5648
@@:
-
 
5649
	stosb
-
 
5650
	mov	ax, '  '
-
 
5651
	stosw
-
 
5652
	stosb
-
 
5653
	pop	eax
-
 
5654
	and	eax, 7
-
 
5655
	call	disasm_write_mmreg
-
 
5656
	mov	ax, ', '
-
 
5657
	stosw
-
 
5658
	xor	eax, eax
-
 
5659
	call	disasm_get_byte
-
 
5660
	call	disasm_write_num
-
 
5661
	and	byte [edi], 0
-
 
5662
	ret
-
 
5663
 
-
 
5664
iglobal
-
 
5665
grp15c1	dq	'fxsave  ','fxrstor ','ldmxcsr ','stmxcsr ',0,0,0,'clflush '
-
 
5666
endg
-
 
5667
cgrp15:
-
 
5668
	call	disasm_get_byte
-
 
5669
	cmp	al, 0xC0
-
 
5670
	jae	cunk
-
 
5671
	shr	al, 3
-
 
5672
	and	eax, 7
-
 
5673
	mov	edx, eax
-
 
5674
	mov	eax, dword [grp15c1+eax*8]
-
 
5675
	test	eax, eax
-
 
5676
	jz	cerr
-
 
5677
	dec	[disasm_cur_pos]
-
 
5678
	stosd
-
 
5679
	mov	eax, dword [grp15c1+4+edx*8]
-
 
Line 5680... Line 2345...
5680
	stosd
2345
 
5681
	or	ch, 40h
2346
;-----------------------------------------------------------------------------
5682
	call	disasm_readrmop
2347
;                        Include disassembler engine
Line 5683... Line 2348...
5683
	and	byte [edi], 0
2348
 
5684
	ret
2349
include 'disasm.inc'
-
 
2350
 
5685
 
2351
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5686
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2352
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5687
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DATA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2353
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5688
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2354
 
Line 5699... Line 2365...
5699
	db	0
2365
        db      0
5700
	dd	aData, 0, 0, help_data_msg
2366
        dd      aData, 0, 0, help_data_msg
5701
	db	0
2367
        db      0
5702
	dd	aBreakpoints, 0, 0, help_breaks_msg
2368
        dd      aBreakpoints, 0, 0, help_breaks_msg
5703
	db	0
2369
        db      0
-
 
2370
 
-
 
2371
;-----------------------------------------------------------------------------
-
 
2372
;                   Commands format definitions
-
 
2373
 
-
 
2374
; TODO: make it with macros
-
 
2375
 
5704
; flags field:
2376
; flags field:
5705
; &1: command may be called without parameters
2377
; &1: command may be called without parameters
5706
; &2: command may be called with parameters
2378
; &2: command may be called with parameters
5707
; &4: command may be called without loaded program
2379
; &4: command may be called without loaded program
5708
; &8: command may be called with loaded program
2380
; &8: command may be called with loaded program
Line 5724... Line 2396...
5724
	dd	aSuspend, OnSuspend, SuspendSyntax, SuspendHelp
2396
        dd      aSuspend, OnSuspend, SuspendSyntax, SuspendHelp
5725
	db	9
2397
        db      9
5726
	dd	aResume, OnResume, ResumeSyntax, ResumeHelp
2398
        dd      aResume, OnResume, ResumeSyntax, ResumeHelp
5727
	db	0Bh
2399
        db      0Bh
5728
	dd	aStep, OnStep, StepSyntax, StepHelp
2400
        dd      aStep, OnStep, StepSyntax, StepHelp
5729
	db	9
2401
        db      0Bh
5730
	dd	aProceed, OnProceed, ProceedSyntax, ProceedHelp
2402
        dd      aProceed, OnProceed, ProceedSyntax, ProceedHelp
5731
	db	9
2403
        db      0Bh
5732
	dd	aCalc, OnCalc, CalcSyntax, CalcHelp
2404
        dd      aCalc, OnCalc, CalcSyntax, CalcHelp
5733
	db	0Eh
2405
        db      0Eh
5734
	dd	aDump, OnDump, DumpSyntax, DumpHelp
2406
        dd      aDump, OnDump, DumpSyntax, DumpHelp
5735
	db	0Bh
2407
        db      0Bh
5736
	dd	aUnassemble, OnUnassemble, UnassembleSyntax, UnassembleHelp
2408
        dd      aUnassemble, OnUnassemble, UnassembleSyntax, UnassembleHelp
Line 5758... Line 2430...
5758
	dd	aUnpack, OnUnpack, UnpackSyntax, UnpackHelp
2430
        dd      aUnpack, OnUnpack, UnpackSyntax, UnpackHelp
5759
	db	9
2431
        db      9
5760
	dd	aLoadSymbols, OnLoadSymbols, LoadSymbolsSyntax, LoadSymbolsHelp
2432
        dd      aLoadSymbols, OnLoadSymbols, LoadSymbolsSyntax, LoadSymbolsHelp
5761
	db	0Ah
2433
        db      0Ah
5762
	dd	0
2434
        dd      0
-
 
2435
 
-
 
2436
;-----------------------------------------------------------------------------
-
 
2437
;                   Help messages for commands groups
-
 
2438
 
5763
aHelp	db	5,'help',0
2439
aHelp   db      5,'help',0
5764
_aH	db	2,'h',0
2440
_aH     db      2,'h',0
5765
HelpHelp db	'Help on specified function',10
2441
HelpHelp db     'Help on specified function',10
5766
HelpSyntax db	'Usage: h or help [group | command]',10,0
2442
HelpSyntax db   'Usage: h or help [group | command]',10,0
Line 5767... Line 2443...
5767
 
2443
 
5768
help_msg db	'List of known command groups:',10
2444
help_msg db     'List of known command groups:',10
5769
	db	'"help control"     - display list of control commands',10
2445
        db      '"help control"     - display list of control commands',10
5770
	db	'"help data"        - display list of commands concerning data',10
2446
        db      '"help data"        - display list of commands concerning data',10
-
 
2447
        db      '"help breakpoints" - display list of commands concerning breakpoints',10,0
-
 
2448
 
-
 
2449
;               Control commands group
5771
	db	'"help breakpoints" - display list of commands concerning breakpoints',10,0
2450
 
5772
aControl db	8,'control',0
2451
aControl db     8,'control',0
5773
help_control_msg db	'List of control commands:',10
2452
help_control_msg db     'List of control commands:',10
5774
	db	'h = help             - help',10
2453
        db      'h = help             - help',10
5775
	db	'quit                 - exit from debugger',10
2454
        db      'quit                 - exit from debugger',10
Line 5778... Line 2457...
5778
	db	'load-symbols   - load information on symbols for program',10
2457
        db      'load-symbols   - load information on symbols for program',10
5779
	db	'terminate            - terminate loaded program',10
2458
        db      'terminate            - terminate loaded program',10
5780
	db	'detach               - detach from debugging program',10
2459
        db      'detach               - detach from debugging program',10
5781
	db	'stop                 - suspend execution of debugging program',10
2460
        db      'stop                 - suspend execution of debugging program',10
5782
	db	'g []     - go on (resume execution of debugging program)',10
2461
        db      'g []     - go on (resume execution of debugging program)',10
5783
	db	's =         - program step',10
2462
        db      's []            - program step, also ',10
5784
	db	'p =         - program wide step',10
2463
        db      'p []            - program wide step, also ',10
5785
	db	'unpack               - try to bypass unpacker code (heuristic)',10,0
2464
        db      'unpack               - try to bypass unpacker code (heuristic)',10,0
-
 
2465
 
-
 
2466
;               Data commands group
-
 
2467
 
5786
aData	db	5,'data',0
2468
aData   db      5,'data',0
5787
help_data_msg db	'List of data commands:',10
2469
help_data_msg db        'List of data commands:',10
5788
	db	'?        - calculate value of expression',10
2470
        db      '?        - calculate value of expression',10
5789
	db	'd []     - dump data at given address',10
2471
        db      'd []     - dump data at given address',10
5790
	db	'u []     - unassemble instructions at given address',10
2472
        db      'u []     - unassemble instructions at given address',10
5791
	db	'r   or',10
2473
        db      'r   or',10
5792
	db	'r = - set register value',10,0
2474
        db      'r = - set register value',10,0
-
 
2475
    
-
 
2476
;               Breakpoints commands group
-
 
2477
 
5793
aBreakpoints db 12,'breakpoints',0
2478
aBreakpoints db 12,'breakpoints',0
5794
help_breaks_msg db	'List of breakpoints commands:',10
2479
help_breaks_msg db      'List of breakpoints commands:',10
5795
	db	'bp       - set breakpoint on execution',10
2480
        db      'bp       - set breakpoint on execution',10
5796
	db	'bpm[b|w|d]   - set breakpoint on memory access',10
2481
        db      'bpm[b|w|d]   - set breakpoint on memory access',10
5797
	db	'bl []        - breakpoint(s) info',10
2482
        db      'bl []        - breakpoint(s) info',10
5798
	db	'bc ...       - clear breakpoint',10
2483
        db      'bc ...       - clear breakpoint',10
5799
	db	'bd ...       - disable breakpoint',10
2484
        db      'bd ...       - disable breakpoint',10
5800
	db	'be ...       - enable breakpoint',10,0
2485
        db      'be ...       - enable breakpoint',10,0
Line -... Line 2486...
-
 
2486
 
-
 
2487
;-----------------------------------------------------------------------------
-
 
2488
;                    Individual command help messages
5801
 
2489
 
5802
aQuit	db	5,'quit',0
2490
aQuit   db      5,'quit',0
5803
QuitHelp db	'Quit from debugger',10
2491
QuitHelp db     'Quit from debugger',10
Line 5804... Line 2492...
5804
QuitSyntax db	'Usage: quit',10,0
2492
QuitSyntax db   'Usage: quit',10,0
Line 5828... Line 2516...
5828
ResumeSyntax db	'Usage: g',10
2516
ResumeSyntax db 'Usage: g',10
5829
	db	'   or: g  - wait until specified address is reached',10,0
2517
        db      '   or: g  - wait until specified address is reached',10,0
Line 5830... Line 2518...
5830
 
2518
 
5831
aStep	db	2,'s',0
2519
aStep   db      2,'s',0
5832
StepHelp db	'Make step in debugged program',10
2520
StepHelp db     'Make step in debugged program',10
Line 5833... Line 2521...
5833
StepSyntax db	'Usage: s',10,0
2521
StepSyntax db   'Usage: s []',10,0
5834
 
2522
 
5835
aProceed db	2,'p',0
2523
aProceed db     2,'p',0
Line 5836... Line 2524...
5836
ProceedHelp db	'Make wide step in debugged program (step over CALL, REPxx, LOOP)',10
2524
ProceedHelp db  'Make wide step in debugged program (step over CALL, REPxx, LOOP)',10
5837
ProceedSyntax db 'Usage: p',10,0
2525
ProceedSyntax db 'Usage: p []',10,0
5838
 
2526
 
5839
aDump	db	2,'d',0
2527
aDump   db      2,'d',0
Line 5845... Line 2533...
5845
CalcHelp db	'Calculate value of expression',10
2533
CalcHelp db     'Calculate value of expression',10
5846
CalcSyntax db	'Usage: ? ',10,0
2534
CalcSyntax db   'Usage: ? ',10,0
Line 5847... Line 2535...
5847
 
2535
 
5848
aUnassemble db	2,'u',0
2536
aUnassemble db  2,'u',0
5849
UnassembleHelp db 'Unassemble',10
-
 
5850
UnassembleSyntax:
2537
UnassembleHelp db 'Unassemble',10
5851
	db	'Usage: u  - unassemble instructions at specified address',10
2538
UnassembleSyntax db      'Usage: u  - unassemble instructions at specified address',10
Line 5852... Line 2539...
5852
	db	'   or: u              - continue current unassemble screen',10,0
2539
                 db      '   or: u              - continue current unassemble screen',10,0
5853
 
2540
 
5854
aReg	db	2,'r',0
-
 
5855
RHelp	db	'Set register value',10
2541
aReg    db      2,'r',0
5856
RSyntax:
2542
RHelp   db      'Set register value',10
Line 5857... Line 2543...
5857
	db	'Usage: r  ',10
2543
RSyntax db      'Usage: r  ',10
5858
	db	'   or: r = - set value of  to ',10,0
2544
        db      '   or: r = - set value of  to ',10,0
5859
 
2545
 
Line 5905... Line 2591...
5905
LoadSymbolsHelp db 'Load symbolic information for executable',10
2591
LoadSymbolsHelp db 'Load symbolic information for executable',10
5906
LoadSymbolsSyntax db 'Usage: load-symbols ',10,0
2592
LoadSymbolsSyntax db 'Usage: load-symbols ',10,0
Line 5907... Line 2593...
5907
 
2593
 
Line -... Line 2594...
-
 
2594
aUnknownCommand db 'Unknown command',10,0
-
 
2595
 
-
 
2596
;-----------------------------------------------------------------------------
5908
aUnknownCommand db 'Unknown command',10,0
2597
;                             Error messages
5909
 
2598
 
5910
load_err_msg	db	'Cannot load program. ',0
2599
load_err_msg    db      'Cannot load program. ',0
5911
unk_err_msg	db	'Unknown error code -%4X',10,0
2600
unk_err_msg     db      'Unknown error code -%4X',10,0
5912
aCannotLoadFile	db	'Cannot load file. ',0
2601
aCannotLoadFile db      'Cannot load file. ',0
Line 5953... Line 2642...
5953
aInvAddr	db	'Invalid address',10,0
2642
aInvAddr        db      'Invalid address',10,0
5954
NoPrgLoaded_str	db	'No program loaded'
2643
NoPrgLoaded_str db      'No program loaded'
5955
NoPrgLoaded_len = $ - NoPrgLoaded_str
2644
NoPrgLoaded_len = $ - NoPrgLoaded_str
5956
aRunning	db	'Running'
2645
aRunning        db      'Running'
5957
aPaused		db	'Paused'
2646
aPaused         db      'Paused'
-
 
2647
aMain            db        '[ CPU ]'
-
 
2648
aSSE            db        '[ SSE ]'
-
 
2649
aAVX            db        '[ AVX ]'
-
 
2650
aMSR            db        '[ MSR ]'
5958
aPoint		db	0x1C
2651
aPoint          db      0x1C
5959
aMinus		db	'-'
2652
aMinus          db      '-'
5960
aColon		db	':'
2653
aColon          db      ':'
5961
aSpace		db	' '
2654
aSpace          db      ' '
5962
aQuests		db	'??'
2655
aQuests         db      '??'
Line 5978... Line 2671...
5978
mxp_name	db	'mxp',0
2671
mxp_name        db      'mxp',0
5979
mxp_lzo_name	db	'mxp_lzo',0
2672
mxp_lzo_name    db      'mxp_lzo',0
5980
mtappack_name	db	'mtappack',0
2673
mtappack_name   db      'mtappack',0
5981
flags		db	'CPAZSDO'
2674
flags           db      'CPAZSDO'
5982
flags_bits	db	0,2,4,6,7,10,11
2675
flags_bits      db      0,2,4,6,7,10,11
-
 
2676
 
-
 
2677
;-----------------------------------------------------------------------------
-
 
2678
;                         Registers strings
-
 
2679
 
5983
regs_strs:
2680
regs_strs:
5984
	db	'EAX='
2681
        db      'EAX='
5985
	db	'EBX='
2682
        db      'EBX='
5986
	db	'ECX='
2683
        db      'ECX='
5987
	db	'EDX='
2684
        db      'EDX='
Line 5989... Line 2686...
5989
	db	'EDI='
2686
        db      'EDI='
5990
	db	'EBP='
2687
        db      'EBP='
5991
	db	'ESP='
2688
        db      'ESP='
5992
	db	'EIP='
2689
        db      'EIP='
5993
	db	'EFLAGS='
2690
        db      'EFLAGS='
-
 
2691
fpu_strs:
-
 
2692
        db        'ST0='
-
 
2693
        db        'ST1='
-
 
2694
        db        'ST2='
-
 
2695
        db        'ST3='
-
 
2696
        db        'ST4='
-
 
2697
        db        'ST5='
-
 
2698
        db        'ST6='
-
 
2699
        db        'ST7='
-
 
2700
mmx_strs:
-
 
2701
        db        'MM0='
-
 
2702
        db        'MM1='
-
 
2703
        db        'MM2='
-
 
2704
        db        'MM3='
-
 
2705
        db        'MM4='
-
 
2706
        db        'MM5='
-
 
2707
        db        'MM6='
-
 
2708
        db        'MM7='
-
 
2709
sse_strs:
-
 
2710
        db        '-XMM0-'
-
 
2711
        db      '-XMM1-'
-
 
2712
        db      '-XMM2-'
-
 
2713
        db      '-XMM3-'
-
 
2714
        db      '-XMM4-'
-
 
2715
        db      '-XMM5-'
-
 
2716
        db      '-XMM6-'
-
 
2717
        db      '-XMM7-'
-
 
2718
avx_strs:
-
 
2719
        db      '-YMM0-'
-
 
2720
        db      '-YMM1-'
-
 
2721
        db      '-YMM2-'
-
 
2722
        db      '-YMM3-'
-
 
2723
        db      '-YMM4-'
-
 
2724
        db      '-YMM5-'
-
 
2725
        db      '-YMM6-'
-
 
2726
        db      '-YMM7-'
Line 5994... Line 2727...
5994
 
2727
 
5995
debuggee_pid	dd	0
2728
debuggee_pid    dd      0
5996
bSuspended	db	0
2729
bSuspended      db      0
5997
bAfterGo	db	0
2730
bAfterGo        db      0
-
 
2731
temp_break      dd      0
Line 5998... Line 2732...
5998
temp_break	dd	0
2732
reg_mode        db        1
5999
 
-
 
6000
disasm_table_1:
-
 
6001
	dd	cop22, cop22, cop22, cop22, cop21, cop21, cop0,  cop0		; 0x
-
 
6002
	dd	cop22, cop22, cop22, cop22, cop21, cop21, cop0,  cF
-
 
6003
	dd	cop22, cop22, cop22, cop22, cop21, cop21, cop0,  cop0		; 1x
-
 
6004
	dd	cop22, cop22, cop22, cop22, cop21, cop21, cop0,  cop0
-
 
6005
	dd	cop22, cop22, cop22, cop22, cop21, cop21, cseges,cop0		; 2x
-
 
6006
	dd	cop22, cop22, cop22, cop22, cop21, cop21, csegcs,cop0
-
 
6007
	dd	cop22, cop22, cop22, cop22, cop21, cop21, csegss,cop0		; 3x
-
 
6008
	dd	cop22, cop22, cop22, cop22, cop21, cop21, csegds,cop0
-
 
6009
	dd	cinc1, cinc1, cinc1, cinc1, cinc1, cinc1, cinc1, cinc1		; 4x
-
 
6010
	dd	cdec1, cdec1, cdec1, cdec1, cdec1, cdec1, cdec1, cdec1
-
 
6011
	dd	cpush1,cpush1,cpush1,cpush1,cpush1,cpush1,cpush1,cpush1		; 5x
-
 
6012
	dd	cpop1, cpop1, cpop1, cpop1, cpop1, cpop1, cpop1, cpop1
-
 
6013
	dd	cop0,  cop0,  cbound,carpl, csegfs,cseggs,c66,   c67		; 6x
-
 
6014
	dd	cpush21,cimul1,cpush22,cimul1,cunk,cunk,  cunk,  cunk
-
 
6015
	dd	cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1		; 7x
-
 
6016
	dd	cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1, cjcc1
-
 
6017
	dd	cop23, cop23, cop23, cop23, cop22, cop22, cop22, cop22		; 8x
-
 
6018
	dd	cop22, cop22, cop22, cop22, cunk,  cop22, cunk,  cpop2
-
 
6019
	dd	cop0,  cxchg1,cxchg1,cxchg1,cxchg1,cxchg1,cxchg1,cxchg1		; 9x
-
 
6020
	dd	ccbw,  ccwd,  ccallf,cop0,  cop0,  cop0,  cop0,  cop0
-
 
6021
	dd	cmov3, cmov3, cmov3, cmov3, cop0,  cop0,  cop0,  cop0		; Ax
-
 
6022
	dd	cop21, cop21, cop0,  cop0,  cop0,  cop0,  cop0,  cop0
-
 
6023
	dd	cmov11,cmov11,cmov11,cmov11,cmov11,cmov11,cmov11,cmov11		; Bx
-
 
6024
	dd	cmov12,cmov12,cmov12,cmov12,cmov12,cmov12,cmov12,cmov12
-
 
6025
	dd	cshift1,cshift1,cret2,cop0, cunk,  cunk,  cmov2, cmov2		; Cx
-
 
6026
	dd	center,cop0,  cunk,  cunk,  cop0,  cint,  cunk,  cunk
-
 
6027
	dd	cshift2,cshift2,cshift3,cshift3,caam,caad,cunk,  cxlat		; Dx
-
 
6028
	dd	cD8,   cD9,   cDA,   cDB,   cDC,   cDD,   cDE,   cDF
-
 
6029
	dd	cloopnz,cloopz,cloop,cjcxz, cunk,  cunk,  cunk,  cunk		; Ex
-
 
6030
	dd	ccall1,cjmp1, cunk,  cjmp2, cunk,  cunk,  cunk,  cunk
-
 
6031
	dd	clock, cunk,  crepnz,crep,  cunk,  cop0,  cop1,  cop1		; Fx
-
 
6032
	dd	cop0,  cop0,  cop0,  cop0,  cop0,  cop0,  cop1,  cop1
-
 
6033
 
-
 
6034
disasm_table_2:
-
 
6035
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cop0_F,cop0_F,cunk		; 0x
-
 
6036
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk
-
 
6037
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk		; 1x
-
 
6038
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk
-
 
6039
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk		; 2x
-
 
6040
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  csse1
-
 
6041
	dd	cunk,  crdtsc,cunk,  cunk,  cop0_F,cunk,  cunk,  cunk		; 3x
-
 
6042
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk
-
 
6043
	dd	cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc		; 4x
-
 
6044
	dd	cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc,cmovcc
-
 
6045
	dd	cunk,  cunk,  cunk,  cunk,  csse1, csse1, cunk,  cunk		; 5x
-
 
6046
	dd	csse1, cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cunk
-
 
6047
	dd	cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn		; 6x
-
 
6048
	dd	cpcmn, cpcmn, cpcmn, cpcmn, cunk,  cunk,  cmovd1,cmovq1
-
 
6049
	dd	cunk,  cpshift,cpshift,cpshift,cpcmn,cpcmn,cpcmn,cemms		; 7x
-
 
6050
	dd	cunk,  cunk,  cunk,  cunk,  cunk,  cunk,  cmovd2,cmovq2
-
 
6051
	dd	cjcc2, cjcc2, cjcc2, cjcc2, cjcc2, cjcc2, cjcc2, cjcc2		; 8x
-
 
6052
	dd	cjcc2, cjcc2, cjcc2, cjcc2, cjcc2, cjcc2, cjcc2, cjcc2
-
 
6053
	dd	csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc		; 9x
-
 
6054
	dd	csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc,csetcc
-
 
6055
	dd	cunk,  cunk,  ccpuid,cbtx2, cshld, cshld, cunk,  cunk		; Ax
-
 
6056
	dd	cunk,  cunk,  cunk,  cbtx2, cshrd, cshrd, cgrp15,cop22
-
 
6057
	dd	ccmpxchg,ccmpxchg,cunk,cbtx2,cunk, cunk,  cmovzx,cmovzx		; Bx
-
 
6058
	dd	cunk,  cunk,  cbtx1, cbtx2, cbsf,  cbsr,  cmovsx,cmovsx
-
 
6059
	dd	cunk,  cunk,  csse1, cunk,  cunk,  cunk,  cunk,  ccmpxchg8b	; Cx
-
 
6060
	dd	cbswap,cbswap,cbswap,cbswap,cbswap,cbswap,cbswap,cbswap
-
 
6061
	dd	csse2, cpsrlw,cpsrlw,cpsrlq,cpcmn, cpcmn, cunk,  cunk		; Dx
-
 
6062
	dd	cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn
-
 
6063
	dd	cpcmn, cpsraw,cpsrad,cpcmn, cpcmn, cpcmn, cunk,  cunk		; Ex
-
 
6064
	dd	cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn
-
 
Line 6065... Line 2733...
6065
	dd	cunk,  cpsllw,cpslld,cpsllq,cpcmn, cpcmn, cpcmn, cunk		; Fx
2733
 
6066
	dd	cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cpcmn, cunk
2734
include 'disasm_tbl.inc'
6067
 
2735
 
6068
reg_table:
2736
reg_table:
Line 6136... Line 2804...
6136
cmdline		rb	cmdline_width+1
2804
cmdline         rb      cmdline_width+1
6137
cmdline_len	dd	?
2805
cmdline_len     dd      ?
6138
cmdline_pos	dd	?
2806
cmdline_pos     dd      ?
6139
curarg		dd	?
2807
curarg          dd      ?
Line -... Line 2808...
-
 
2808
 
-
 
2809
cmdline_prev    rb      cmdline_width+1
6140
 
2810
 
Line 6141... Line 2811...
6141
was_temp_break	db	?
2811
was_temp_break  db      ?
6142
 
2812
 
6143
dbgbufsize	dd	?
2813
dbgbufsize      dd      ?
Line 6147... Line 2817...
6147
fileattr	rb	40
2817
fileattr        rb      40
Line 6148... Line 2818...
6148
 
2818
 
Line 6149... Line 2819...
6149
needzerostart:
2819
needzerostart:
-
 
2820
 
6150
 
2821
context:
6151
context:
2822
 
6152
_eip	dd	?
2823
_eip    dd      ?
6153
_eflags	dd	?
2824
_eflags dd      ?
6154
_eax	dd	?
2825
_eax    dd      ?
6155
_ecx	dd	?
2826
_ecx    dd      ?
6156
_edx	dd	?
2827
_edx    dd      ?
6157
_ebx	dd	?
2828
_ebx    dd      ?
6158
_esp	dd	?
2829
_esp    dd      ?
6159
_ebp	dd	?
2830
_ebp    dd      ?
6160
_esi	dd	?
-
 
6161
_edi	dd	?
2831
_esi    dd      ?
Line -... Line 2832...
-
 
2832
_edi    dd      ?
-
 
2833
oldcontext rb $-context
-
 
2834
 
-
 
2835
mmx_context:
-
 
2836
_mm0    dq        ?
-
 
2837
_mm1    dq        ?
-
 
2838
_mm2    dq        ?
-
 
2839
_mm3    dq        ?
-
 
2840
_mm4    dq        ?
-
 
2841
_mm5    dq        ?
-
 
2842
_mm6    dq        ?
-
 
2843
_mm7    dq        ?
-
 
2844
oldmmxcontext rb $-mmx_context
-
 
2845
 
-
 
2846
fpu_context:
-
 
2847
_st0    dq      ?
-
 
2848
_st1    dq      ?
-
 
2849
_st2    dq      ?
-
 
2850
_st3    dq      ?
-
 
2851
_st4    dq      ?
-
 
2852
_st5    dq      ?
-
 
2853
_st6    dq      ?
-
 
2854
_st7    dq      ?
-
 
2855
oldfpucontext rb $-fpu_context
-
 
2856
 
-
 
2857
sse_context:
-
 
2858
_xmm0    dq        2 dup ?
-
 
2859
_xmm1   dq        2 dup ?
-
 
2860
_xmm2   dq      2 dup ?
-
 
2861
_xmm3   dq      2 dup ?
-
 
2862
_xmm4   dq      2 dup ?
-
 
2863
_xmm5   dq      2 dup ?
-
 
2864
_xmm6   dq      2 dup ?
-
 
2865
_xmm7   dq      2 dup ?
-
 
2866
oldssecontext rb $-sse_context
-
 
2867
 
-
 
2868
avx_context:
-
 
2869
_ymm0   dq      4 dup ?
-
 
2870
_ymm1   dq      4 dup ?
-
 
2871
_ymm2   dq      4 dup ?
-
 
2872
_ymm3   dq      4 dup ?
-
 
2873
_ymm4   dq      4 dup ?
-
 
2874
_ymm5   dq      4 dup ?
-
 
2875
_ymm6   dq      4 dup ?
-
 
2876
_ymm7   dq      4 dup ?
-
 
2877
oldavxcontext rb $-avx_context
6162
 
2878
 
6163
oldcontext rb $-context
2879
step_num dd 0
6164
 
2880
proc_num dd 0
Line 6165... Line 2881...
6165
dumpread dd	?
2881
dumpread dd     ?
Line 6198... Line 2914...
6198
 
2914
 
6199
; stack
2915
; stack
6200
	align	400h
2916
        align   400h
6201
	rb	400h
2917
        rb      400h
-
 
2918
used_mem:
-
 
2919
 
-
 
2920
; vim: ft=fasm tabstop=4