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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2016, 20:08   #1
Maksgreatman
 
Регистрация: 31.05.2016
Сообщений: 5
По умолчанию Сортировка массива пузырьковым методом

Здравствуйте! Помогите выполнить задачу:
Написать программу сортировки массива пузырьковым методом, элементы массива ввести с клавиатуры (количество элементов 12), отсортированный массив записать в файл. На экран вывести сумму парных элементов.
Вот код:
Код:
org 100h
jmp start

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

start:

       mov   dx,mes0            
       call  message             
       mov   cx,12               
       mov   di,buff             
       mov   ah,1                
@1:    int   21h                 
       stosb                     
       loop  @1                  


       mov   dx,mes1             
       call  message            
sort:  mov   si,buff           
       mov   di,si               
       mov   cx,12              
       xor   bx,bx               
next:  lodsw                    
       cmp   ah,al              
       jae   miss                
       xchg  ah,al               
       inc   bx                 
miss:  stosw                    
       dec   si                  
       dec   di                  
       loop  next               
       or    bx,bx                     
     jnz   sort                


       mov   cx,12               
       mov   si,buff             
print: lodsb                     
       int   29h                 
       loop  print               


       mov   ah,3Ch            
       mov   cx,20h             
     mov   dx,fName    
        int   21h               
       xchg  bx,ax           
       mov   ah,40h         
       mov   cx,12           
       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; 01.06.2016 в 11:25.
Maksgreatman вне форума Ответить с цитированием
Старый 31.05.2016, 23:28   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Maksgreatman Посмотреть сообщение
Вот код:
И что в нём не работает? Какие именно проблемы?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 01.06.2016, 11:15   #3
Maksgreatman
 
Регистрация: 31.05.2016
Сообщений: 5
По умолчанию

не знаю как вывести сумму парных елементов
Maksgreatman вне форума Ответить с цитированием
Старый 01.06.2016, 14:25   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..а что есть "парные элементы"? Пример привести сможешь?
Пусть массив у тебя вот-это сообщение. Какие буквы в нём будут относиться к парным элементам?
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 01.06.2016, 15:25   #5
Maksgreatman
 
Регистрация: 31.05.2016
Сообщений: 5
По умолчанию

Ой извините!
вывести сумму четных элементов
Maksgreatman вне форума Ответить с цитированием
Старый 01.06.2016, 17:14   #6
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..ну ты молодец! Даже задание озвучить толком не можешь.
У чётных чисел значение нулевого бита равно нулю, у нечётных - единице.
Биты считаются справа-налево:
Код:
  100 = 0110 0100
  101 = 0110 0101
  102 = 0110 0110
  103 = 0110 0111
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 01.06.2016, 17:29   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

дополню ответ.
вот так выглядит проверка младшего бита числа в AL:
Код:
        test al,1
        jz even         ; переход, если число чётное
odd:    ...
even:   ...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.06.2016, 18:40   #8
Maksgreatman
 
Регистрация: 31.05.2016
Сообщений: 5
По умолчанию

Извините за наглость но я ассемблер не шарю
Если вам не трудно допишите код вывода суммы четных элементов в тот код
что вместе с заданием )
Просто очень надо.
Maksgreatman вне форума Ответить с цитированием
Старый 02.06.2016, 05:47   #9
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
но я ассемблер не шарю
Ты ассемблер не шаришь, но задания сдаёшь и получаешь диплом. Преподу твоему по-барабану, он зарплату получает и больше не хочет ничего знать. В итоге - уровень знаний студентов ниже плинтуса, и виновато в этом сообщество форумов, участники которых подкидывают готовые решения студентам. Куда катится мир..
Код:
org 100h
       push start                   ;
       ret                          ; на EntryPoint..
       xor   ax,ax                  ;
       int   16h                    ;
       ret                          ; выход в дос!

mes0   db    13,10,' Array..: $'     ;
mes1   db    13,10,' Sorted.: $'     ;
mes2   db    13,10,' Even...: $'     ;
buff   db    13,0,16 dup('$')       ; буфер 12 байт
fName  db    'array.txt',0          ;

start: mov   dx,mes0           ;
       call  message           ;
       call  saveString        ; создаём массив

       call  sortArray         ; сортируем его

       mov   dx,mes1           ;
       call  message           ;
       mov   dx,buff+3         ; выводим отсортированный
       call  message           ;

       mov   dx,mes2           ;
       call  message           ;
       call  printEven         ; выводим чётные

       call  createFile        ; создаём файл
       jmp   $$+4              ; уходим на начало файла!

;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
message:                       ; мессага
       mov   ah,9              ;
       int   21h               ;
       ret                     ;
;---------------------------------------------------------------
saveString:                    ;
       mov   ah,0Ah            ; fn.0Ah - ввод строки в буфер
       mov   dx,buff           ;
       int   21h               ;
       ret                     ;
;---------------------------------------------------------------
sortArray:                     ; сортируем пузырьком
       mov   si,buff+2         ;
       mov   di,si             ;
       xor   bx,bx             ;
       xor   cx,cx             ;
       mov   cl,[buff+1]       ;
next:  lodsw                   ;
       cmp   ah,al             ;
       jae   miss              ;
       xchg  ah,al             ;
       inc   bx                ;
miss:  stosw                   ;
       dec   si                ;
       dec   di                ;
       loop  next              ;
       or    bx,bx             ;
       jnz   sortArray         ;
       ret                     ;
;---------------------------------------------------------------
printEven:                     ; выводим чётные
       mov   si,buff+2         ;
       xor   cx,cx             ;
       mov   cl,[buff+1]       ;
@@2:   lodsb                   ;
       test  al,1              ; проверка младшего бита!
       jnz   fuck              ;
       int   29h               ;
fuck:  loop  @@2               ;
       ret                     ;
;---------------------------------------------------------------
createFile:                    ; создаём файл
       mov   ah,3Ch            ;
       mov   cx,20h            ;
       mov   dx,fName          ;
       int   21h               ;
       xchg  bx,ax             ;
       mov   ah,40h            ; запись в него
       xor   cx,cx             ;
       mov   cl,[buff+1]       ;
       mov   dx,buff+3         ;
       int   21h               ;
       mov   ah,3Eh            ; close File.
       int   21h               ;
       ret                     ;
Изображения
Тип файла: jpg 01.JPG (10.8 Кб, 74 просмотров)
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 02.06.2016 в 05:50.
R71MT вне форума Ответить с цитированием
Старый 02.06.2016, 08:25   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

R71MT, ему сумму чётных надо...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива пузырьковым методом Swatq Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 17.05.2016 17:27
Cортировка массива пузырьковым методом Оксана33 Общие вопросы по Java, Java SE, Kotlin 6 26.09.2015 07:25
Сортировка методом включением массива СИ DimaNIKul Помощь студентам 0 12.05.2013 14:42
Сортировать список пузырьковым методом Lunatik Помощь студентам 3 13.05.2009 13:30