Сегмент кода CODE MAIN PROC INVOKE CharToOemA OFFSET OFFSET INVOKE Cha

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Сегмент кода
.CODE
MAIN PROC
INVOKE CharToOemA, OFFSET W, OFFSET W
INVOKE CharToOemA, OFFSET W, OFFSET W
INVOKE GetStdHandle, -10
MOV HIn, EAX ; аналог в си: " HIn=GetStdHandle(-10); "
INVOKE GetStdHandle, -11
MOV HOut, EAX
INVOKE lstrlenA, OFFSET W
; Вывести приглашение к вводу
INVOKE WriteConsoleA, HOut, OFFSET W, EAX, OFFSET Temp, 0
; Произвести ввод
INVOKE ReadConsoleA, HIn, OFFSET String, 400, OFFSET Lenght, 0
; Вызов процедуры удаления повтора символа в строке
INVOKE Del, OFFSET String, Lenght, DWORD PTR Char
POP Lenght
;--------- вывод результата ---------
INVOKE lstrlenA, OFFSET W2
; Вывести приглашение к вводу
; тут уже редачить не стал, итак понятно что к чему)
PUSH 0
PUSH OFFSET Temp
PUSH EAX
PUSH OFFSET W2
PUSH HOut
CALL WriteConsoleA@20
PUSH 0
PUSH OFFSET Temp
PUSH Lenght
PUSH OFFSET String
PUSH HOut
CALL WriteConsoleA@20
MainExit:
INVOKE Sleep, 5000
INVOKE ExitProcess, 0
MAIN ENDP
Del PROC
cld
MOV EBP, ESP
MOV EDI,[EBP+4]
MOV ECX,[EBP+8]
MOV EAX,[EBP+12]
MOV EBX,ECX
delloop:
REPNE SCASB
MOV ESI,EDI
CMP ECX,0
JE endloop
DEC EDI
DEC EBX
PUSH ECX
PUSH EDI
REP MOVSB
POP EDI
POP ECX
JMP delloop
endloop:
MOV [EBP+12],EBX
RET 8
Del ENDP
read_of_con proc
read_of_con ENDP
END MAIN