Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ASM-МК51] Сортировка элементов массива, Программирвание 
:(
    Опции темы
coerbi
Дата 22.4.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 23.3.2007

Репутация: нет
Всего: нет



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

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


Это сообщение отредактировал(а) Alexeis - 22.4.2007, 12:01
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0373 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.