Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2016, 23:37   #1
SavantyRomero
Новичок
Джуниор
 
Регистрация: 18.05.2016
Сообщений: 1
Восклицание Изменение сортировки.

Просьба бедного фронтендщика помочь с асемблером. В универе задали задачку непростую. И очень надо ее сделать. Помощнику +20 к его карме.
Код:
;== FASM code =======================
org 100h
jmp start

mes0   db   13,10,' ARRAY:  $'
mes1   db   13,10,'SORTED:  $'
buff   db   16 dup(0)
fName  db   'array.txt',0

start:
;------ Заполняем буфер данными -------------------------------------
       mov   dx,mes0             ;
       call  message             ;
       mov   cx,16               ; всего элементов
       mov   di,buff             ;
       mov   ah,1                ;
@1:    int   21h                 ;
       stosb                     ; запись в ES:DI
       loop  @1                  ;

;------ Сортировка массива ------------------------------------------
       mov   dx,mes1             ;
       call  message             ;
sort:  mov   si,buff             ; источник,
       mov   di,si               ;     ..он-же приёмник
       mov   cx,16               ;
       xor   bx,bx               ; флаг перестановок
next:  lodsw                     ; берём 2-соседнии элемента
       cmp   ah,al               ; сравниваем их
       jae   miss                ;
       xchg  ah,al               ; перестановка если меньше
       inc   bx                  ; флаг +1
miss:  stosw                     ; перезапись элементов
       dec   si                  ; шаг назад
       dec   di                  ;
       loop  next                ; мотаем 16 раз..
       or    bx,bx               ; перестановки были?
       jnz   sort                ; да - начинаем всё сначала

;------ Выводим отсортированный массив на экран ---------------------
       mov   cx,16               ;
       mov   si,buff             ;
print: lodsb                     ;
       int   29h                 ;
       loop  print               ;

;------ Запись массива в файл ---------------------------------------
       mov   ah,3Ch              ; создать файл!
       mov   cx,20h              ; атрибут
       mov   dx,fName            ;
       int   21h                 ;
       xchg  bx,ax               ; отправляем дескриптор в BX
       mov   ah,40h              ; запись в файл!
       mov   cx,16               ; кол-во байт для записи
       mov   dx,buff             ; буфер с данными
       int   21h                 ;
       mov   ah,3Eh              ; закрыть файл!
       int   21h                 ;

exit:  xor   ax,ax               ; выход..
       int   16h                 ;
       int   20h                 ;

;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
;------------------------------------------------------------------------
message:                      ;
      mov   ah,9              ; вывод строки на экран
      int   21h               ;
ret
;
Это код, который у меня есть.
Нужно метод сортировки переработать с пузырькового на выборочный.
И вывод на экран наименьшего нечетного числа.
Запись в файл целого масива оставить. Спасайте грешную душу фронтендщика.
SavantyRomero вне форума Ответить с цитированием
Старый 19.05.2016, 08:08   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от SavantyRomero Посмотреть сообщение
Помощнику +20 к его карме.
Интересно, как ты планируешь это сделать со-своей репутацией?

Код:
;== FASM code =======================
org 100h
jmp start

mes0   db   13,10,'ARRAY.....:  $'
mes1   db   13,10,'SORTED....:  $'
mes2   db   13,10,'MIN.UNEVEN:  $'
buff   db   16 dup(0)
fName  db   'array.txt',0

start:
;------ Заполняем буфер данными -------------------------------------
       mov   dx,mes0             ;
       call  message             ;
       mov   cx,16               ; всего элементов
       mov   di,buff             ;
       mov   ah,1                ;
@1:    int   21h                 ;
       stosb                     ; запись в ES:DI
       loop  @1                  ;

;------ Cортировка прямым выбором -----------------------------------
       mov   dx,mes1             ;
       call  message             ;
       mov   di,buff             ; DI = указатель на массив
       mov   cx,16               ; CX = его длина
a0:    mov   bx,buff+16          ; BX = макс.индекс в проходе
       mov   al,byte[di]         ; AL = значение первого элемента
a1:    dec   bx                  ; уменьшаем индекс..
       cmp   al,byte[bx]         ; сравниваем первый с последним
       jbe   a2                  ; пропускаем, если первый меньше последнего
       xchg  al,byte[bx]         ; иначе: меняем их местами
a2:    cmp   bx,di               ;
       jnz   a1                  ; проход закончился?
       stosb                     ; перезапись элемента
       loop  a0                  ; мотаем СХ-раз..

;------ Выводим отсортированный массив на экран ---------------------
       mov   cx,16               ; всего
       mov   si,buff             ; адрес
print: lodsb                     ; читаем из SI
       int   29h                 ; выводим на консоль
       loop  print               ; на повтор..

;------ Выводим на экран наименьший/нечётный элемент ----------------
       mov   dx,mes2             ;
       call  message             ;
       mov   cx,16               ;
       mov   si,buff             ;
@5:    lodsb                     ; читаем байт
       test  al,1                ; у нечётных мл.бит = 1
       jnz   stop                ; закончить, если не нуль
       loop  @5                  ; сл.элемент..
stop:  int   29h                 ; выводим найденый эл.на экран

;------ Запись массива в файл ---------------------------------------
       mov   ah,3Ch              ; создать файл!
       mov   cx,20h              ; атрибут
       mov   dx,fName            ;
       int   21h                 ;
       xchg  bx,ax               ; отправляем дескриптор в BX
       mov   ah,40h              ; запись в файл!
       mov   cx,16               ; кол-во байт для записи
       mov   dx,buff             ; буфер с данными
       int   21h                 ;
       mov   ah,3Eh              ; закрыть файл!
       int   21h                 ;

exit:  xor   ax,ax               ; выход..
       int   16h                 ;
       int   20h                 ;

;ннннннннннннннннн П Р О Ц Е Д У Р Ы нннннннннннннннннннннннннннннннннннн
;------------------------------------------------------------------------
message:                      ;
      mov   ah,9              ; вывод строки на экран
      int   21h               ;
ret
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение подмассива для быстрой сортировки danil123 C# (си шарп) 3 15.09.2014 19:51
Программа, сортирующая исходный одномерный массив целых чисел методами пузырьковой сортировки и сортировки прямым выбором (язык С) igor01 Помощь студентам 7 16.05.2014 23:21
Изменение сортировки в отчете Jimmy Lenox Microsoft Office Access 5 24.01.2013 12:11
Сравнить эффективность алгоритмов шейкерной сортировки и сортировки слиянием (язык C) Ольга210993 Помощь студентам 2 20.09.2012 13:52
Алгоритмы сортировки пирамидальный(кучей) и быстрой сортировки (с++) mmd12 Помощь студентам 4 17.05.2012 14:14