Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите мне! Нужно ввести масив двузначных чисел и его размер с клавиатуры и отсортировать по убыванию. На Ассемблере

forspam Z Ученик (55), закрыт 11 лет назад
Лучший ответ
Миоко Таканава Гений (51590) 11 лет назад
Консольное приложение на Ассемблере.
При вводе производится проверка корректности. При ошибке выводится соответствующее сообщение.
Сортировка методом.. .
Алгоритмы простого выбора, вставки и обмена надоели. Если вам нужен один из них, то ищите реализации этого метода в моих ответах среди программ на Ассемблере.

А это реализация наивной сортировки:

.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. Если вдруг этот "ассемблер" оказался не такой, какой нужен вам, то вы сами виноваты: не удосужились указать ни компилятор, ни процессор, ни среду выполнения. Метод сортировки тоже не указали. Вообще ничего не указали, кроме общего названия сотен, если не тысяч низкоуровневых языков программирования.
Остальные ответы
Похожие вопросы