Консольное приложение на Ассемблере.
При вводе производится проверка корректности. При ошибке выводится соответствующее сообщение.
Сортировка методом.. .
Алгоритмы простого выбора, вставки и обмена надоели. Если вам нужен один из них, то ищите реализации этого метода в моих ответах среди программ на Ассемблере.
А это реализация наивной сортировки:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include msvcrt.inc
includelib kernel32.lib
includelib msvcrt.lib
.stack 100h
.data
Prompt1 db 'Введите кол-во элементов массива (от 1 до 100): ',0
Prompt2 db 'Введите элементы массива: ',13,10,0
Prompt3 db 'Введите целое двухзначное число: ',0
Result db 'Отсортированный массив: ',13,10,0
TxtErr db 'Ошибка! ',0
InpFrm db '%d',0
OutFrm db '%4d',0
ExitFrm db '\n',0
.data?
Seed dd ?
Len dd ?
Number dd ?
Array db 100 dup (?)
.code
Random proc
mov eax,Seed
mov edx,08088405h
mul edx
inc eax
mov Seed,eax
mul ebx
mov esi,edx
ret
Random endp
Error proc
invoke crt_printf,addr TxtErr
invoke crt__flushall
ret
Error endp
N78043392:
mov Seed,ebx
InputLen:
invoke crt_printf,addr Prompt1
invoke crt_scanf,addr InpFrm,addr Len
or eax,eax
jz LenErr
mov ecx,Len
or ecx,ecx
js LenErr
jz LenErr
cmp ecx,100
jbe InputArray
LenErr:
call Error
jmp InputLen
InputArray:
invoke crt_printf,addr Prompt2
lea edi,Array
mov ecx,Len
InputNumber:
push ecx
RepInput:
invoke crt_scanf,addr InpFrm,addr Number
or eax,eax
jz NumErr
mov eax,Number
or eax,eax
jns Positve
neg eax
Positve:
cmp eax,10
jb NumErr
cmp eax,100
jb NoErr
NumErr:
call Error
invoke crt_printf,addr Prompt3
jmp RepInput
NoErr:
mov eax,Number
stosb
pop ecx
loop InputNumber
TestArray:
lea esi,Array
mov ecx,Len
dec ecx
TestLoop:
lodsb
cmp al,[esi]
jl Mixing
loop TestLoop
jmp OutArray
Mixing:
mov ecx,Len
dec ecx
lea edi,Array
MixLoop:
mov ebx,ecx
inc ebx
call Random
add esi,Len
sub esi,ebx
mov bl,[edi]
mov al,Array[esi]
mov Array[esi],bl
stosb
loop MixLoop
jmp TestArray
OutArray:
invoke crt_printf,addr Result
mov ecx,Len
lea esi,Array
OutLoop:
push ecx
lodsb
movsx eax,al
invoke crt_printf,addr OutFrm,eax
pop ecx
loop OutLoop
invoke crt__flushall
invoke crt_scanf,addr ExitFrm
invoke ExitProcess,0
end N78043392
P.S. Если вдруг этот "ассемблер" оказался не такой, какой нужен вам, то вы сами виноваты: не удосужились указать ни компилятор, ни процессор, ни среду выполнения. Метод сортировки тоже не указали. Вообще ничего не указали, кроме общего названия сотен, если не тысяч низкоуровневых языков программирования.