Сегмент кода
.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