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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2016, 16:45   #1
andrey1177
Новичок
Джуниор
 
Регистрация: 08.06.2016
Сообщений: 3
По умолчанию Помогите...нужно чтобы в этом коде выводило наибольший четный элемент...

Код:
;== 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

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 08.06.2016 в 16:57.
andrey1177 вне форума Ответить с цитированием
Старый 08.06.2016, 17:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
наименьший/нечётный элемент
'MIN.UNEVEN: $'
на английском "нечётный" - это "ODD"

andrey1177, а Вы не пробовали разобраться в выложенном Вами (судя по всему - чужом) коде?
Или Вам не надо разбираться, Вам сдать нужно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2016, 17:06   #3
andrey1177
Новичок
Джуниор
 
Регистрация: 08.06.2016
Сообщений: 3
По умолчанию

ну да нужно здать...и очень нужна помощь

Последний раз редактировалось andrey1177; 08.06.2016 в 17:09.
andrey1177 вне форума Ответить с цитированием
Старый 08.06.2016, 17:10   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так, в порядке бреда (концепции)
ошибок наверняка море.
Но идею можно развить и отладить код до рабочего состояния


Код:
mes2   db   13,10,'MAX EVEN:  $'
mes_no_even db ' ERROR! NO EVEN IN ARRAY!$'
maxeven db 1

.....

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

       mov al, maxeven
       test  al,1                ; у нечётных мл.бит = 1
       jnz   no_even_mess ; если нечётное - то сообщение об ошибке
       int   29h                 ; выводим найденый эл.на экран
       jmp  continue2
no_even_mess:
       mov   dx,mes_no_even
       call  message             
       
continue2:

........
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.06.2016, 17:51   #5
andrey1177
Новичок
Джуниор
 
Регистрация: 08.06.2016
Сообщений: 3
По умолчанию

спасибо)
andrey1177 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подпрограмма: Дана матрица. Подсчитать количество строк, в которых элемент побочной диагонали четный darkshade Паскаль, Turbo Pascal, PascalABC.NET 9 18.04.2013 23:05
Что нужно заменить в этом масиве чтобы он вместо чисел индекс которых кратный 3 удалял все нечетные числа?С++ или С. DIQUON Помощь студентам 13 01.11.2012 19:00
Как написать программу так,чтобы в ответе выводило число и буквы,например 12 evro ? Knopo4ka Паскаль, Turbo Pascal, PascalABC.NET 3 19.02.2012 01:43
наибольший элемент ольгару Помощь студентам 1 29.01.2011 08:03
Переставляя строки и столбцы матрицы добиться, чтобы наибольший элемент оказался в верхнем левом углу aigulia Помощь студентам 2 02.04.2010 19:35