Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [ASM-МК51] Сортировка элементов массива


Автор: coerbi 22.4.2007, 09:29
Здравствуйте, у меня вопрос, я написал программу сортировки элементов массива по возрастанию, находящейся во внутренней памяти, код самой программы вот: 
Код

MAX_ITEM EQU 02Eh         ; переменная для максимального значения.
IN_ADR EQU 030h           ; начальный адрес размещения данных во внутренней памяти данных.
NUM_ITEM EQU 007h         ; количество элементов массива.       
org 0000h
jmp Start                 ; переход к началу программы.
org 0100h                 ; начало программы. 
Start:  mov SP, 0080h     ; установка указателя стека. 
mov R0, #IN_ADR           ; загрузка начальных данных во внутреннюю память данных. 
mov A, #255 
mov @R0, A
inc R0
mov A, #128 
mov @R0, A
inc R0
mov A, #16
mov @R0, A
inc R0
mov A, #0 
mov @R0, A
inc R0
mov A, #40 
mov @R0, A
inc R0
mov A, #108
mov @R0, A
inc R0
mov A, #127
mov @R0, A
call SORT_UP                     ; вызов подпрограммы SORT_UP.
SORT_UP: mov R7, #NUM_ITEM       ; в R7 загружаем количество прходов N-1.   
IN_SORT_UP_3:  dec R7
push aR7                         ; сохраняем в стеке количество проходов.  
mov R0, #IN_ADR                  ; в R0 организуем указатель на n-й элемент массива. 
mov R1, #IN_ADR
inc R1                           ; в R1 организуем указатель на (n+1)-й элемент массива.
IN_SORT_UP_2: mov 02Eh, @R0      ; начинаем проход. В переменную MAX_IYEM загружаем содержимое n элемента массива.
mov A, @R1                       ; в аккумулятор загружаем содержимое (n+1) элемента массива.
cjne A, MAX_ITEM, IN_SORT_UP_1   ; если (n+1)<n то необходимо поменять элементы местами (выполнить IN_SWAP_UP), 
IN_SORT_UP_1: jc IN_SWAP_UP      ; иначе перейтди к IN_SORT_UP_4 
jmp IN_SORT_UP_4                 
IN_SWAP_UP: mov @R0, A           ; на место n элемента загружается (n+1) элемент,  
mov @R1, MAX_ITEM ;              ; на место (n+1) элемента загружается n элемент.
IN_SORT_UP_4 : inc R0            ; увеличваем указатель на элемент массива
inc R1                           ; увеличваем указатель на элемент массива 
djnz R7, IN_SORT_UP_2            ; уменьшаем содержимое R7 и повторяем проход если R7 не достигло нуля.
pop aR7                          ; восстанавливаем из стека данные о выполненом проходе, 
djnz R7, IN_SORT_UP_3            ; уменьшаем на 1 количество шагов в следующем проходе, и повторяем если не достигнут конец.
ret                              ; возврат из подпрограммы.

Loop:        sjmp  Loop  


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

Заранее благодарен.


M
Alexeis
Модератор: используйте подсветку пода http://forum.vingrad.ru/index.php?showtopic=126445

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)