;***************************************************************************
; . - 1, ( 0 255)
;***************************************************************************
.486; create 32 bit code
.model flat, stdcall; 32 bit memory model
option casemap:none; case sensitive
include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
buf_in DB 64 dup (0)
sort_arr DB 64 dup (0)
stdin DD?
stdout DD?
str1 DB "Vvedite massiv 4isel 4erez probel:",0,10,13
str4 DB "Out:",0
titel DB 'Sortirovka',0
count dd 0
arraydec DB 20 dup (0)
nRead DD?
nRead_buf DD?
nWrite DD?
.code
start:
invoke AllocConsole; ,
invoke SetConsoleTitle, offset titel;
invoke GetStdHandle,STD_OUTPUT_HANDLE;
mov stdout,eax
invoke GetStdHandle,STD_INPUT_HANDLE;
mov stdin,eax
;------------------------------------
invoke WriteConsole,stdout,addr str1,sizeof str1,addr nWrite,0;
invoke ReadConsole,stdin,ADDR buf_in,64,ADDR nRead_buf,NULL;
;---------------------
xor ebx,ebx; ebx
xor edx,edx
xor ecx,ecx
lea esi,buf_in; esi buf_in
lea edi, arraydec
call readdec
call sortirovka
lea edi,sort_arr;edi - ASCII
lea ebx,arraydec;ebx -
mov ecx,count
h1: xor eax,eax
mov al,byte ptr[ebx]
call printdec
mov byte ptr[edi],' ';
inc edi
inc ebx
loop h1
invoke WriteConsole,stdout,addr str4,sizeof str4,addr nWrite,0;
invoke WriteConsole,stdout,addr sort_arr,sizeof sort_arr,addr nWrite,0;
invoke Sleep,6000; 6
kon: invoke ExitProcess,0;
;
readdec proc; ESI arraydec, count -
xor eax,eax; eax
mov ebx,10;
m2: mov cl, byte ptr [esi]
cmp cl,0Dh; 0A,0D -
je m1
cmp cl,0Ah
je m1
cmp cl,20h; -
|
|
je nextnum
cmp cl,30h; 10- ..
jl kon
cmp cl,39h
ja kon
sub cl, 30h; ASCII
mul ebx
add eax,ecx
inc esi;
jmp m2
nextnum: mov byte ptr[edi],al
inc esi
inc edi
inc count
xor eax,eax
jmp m2
m1: mov byte ptr[edi],al
inc edi
inc count
ret
readdec endp
;
;-------------------------------------------------------
; arraydec
sortirovka proc
mov ecx, count; ECX -
a4:
push ecx
mov ecx,count
dec ecx
mov ebx, offset arraydec
a2:
mov al, [ebx]
mov dl, [ebx+1]
cmp al,dl
jb a3
mov [ebx],dl
mov [ebx+1], al
a3:
inc ebx
loop a2
pop ecx
loop a4
;---------------
mov ecx,count
mov esi, offset arraydec
ret
sortirovka endp
;
;-----------------------------------------------------------
;
printdec proc; e edi
;eax -
;edi -
push ecx;
push edx
push ebx
cld
mov ebx,10;
XOR eCX,eCX; e
@@m1: XOR edx,edx
DIV ebx; 10
PUSH eDX; ( )
INC eCX
TEST eAX,eAX
JNZ @@m1
@@m2: POP eAX
ADD AL,'0'; ASCII
STOSb;
LOOP @@m2;
pop ebx;
POP edx
POP ecx
RET
printdec endp
;-----------------------------------------------
end start