Массивы. Сортировка массива в порядке возрастания. Распределение памяти. Текст программы

Страницы работы

Содержание работы

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра систем автоматического управления

ОТЧЁТ

по лабораторной работе №4

«Массивы»

по курсу «ВМ, системы и сети»

Студент:

Ву Ван

гр. 3083/2

Преподаватель:

Санкт-Петербург — 2010 г.

Задание

Дан одномерный массив, расположенный в ячейках внешней памяти

Нужно отсортировать массив в порядке возрастания. Передать его с переворотом во внутреннюю память. Передать полученный массив во внешнюю память.

Описание

Для сортировки массива будем использовать «метод пузырька», который заключается в том, что мы сравниваем два соседних элемента и меняем их местами, при необходимости при этом устанавливаем флаг совершения перестановки, который показывает, что перестановки были. Далее весь цикл повторяется до тех пор, пока перестановок не будет на всём цикле.

Для реализации сортировки сначала необходимо загрузить массив во внутреннюю память. Для указателя элементов во внутренней памяти будем использовать регистр R0. Для указателя на внешнюю память – DPTR. Передавать элементы будем поочерёдно, используя аккумулятор как промежуточное звено.

Распределение памяти

Блок-схема

Текст программы

ORG 8000H

MOV DPTR,#9000H ;DPTR указывает на первый элемент в внешней памяти

MOV R2,#4H ;R2- количество элементов массива

MOV R0,#50H; R0 указывает на место во внутренней памяти,

MOV A,R2;куда будет посылаться первый элемент массива

MOV R3,A ; R3 счётчик

;загрузка массива из внешней памяти во внутреннюю

FOR1:

MOVX A,@DPTR

MOV @R0,A      

DEC R3;декремент счётчика

MOV A,R3;загрузка в аккумулятор значения счётчика

JZ ENDFOR1;выход из цикла, если А=0

INC DPTR;сдвинуть указатель

INC R0;сдвиг указателя

JMP FOR1;повторить цикл

ENDFOR1:

;сортировка массива во внутренней памяти

;используется метод пузырька

DEC R2;декремент счётчика

MOV A,R2;загрузка в аккумулятор значения счётчика

JZ ENDDO1;выход, если А=0

DO1:

;обмен содержимого регистров

MOV A,R0

MOV R1,A

MOV A,R2

MOV R3,A

MOV R5,#0H;загрузка нуля

FOR2:

MOV A,@R1

MOV R4,A

MOV A,R1

MOV R7,A

MOV R1,#49h

MOV A,R4

MOV @R1,A

MOV A,R7

MOV R1,A

DEC R1;декремент регистра-указателя

MOV A,@R1;загрузка нового значения в аккумулятор

CLR C;очистка регистра

CJNE A,49H,CONTINUE2;переход на метку при равенстве

CONTINUE2:

JNC CONTINUE3;переход, если А=0

MOV R5,#01H

INC R1

MOV @R1,A

DEC R1

MOV A,R4

MOV @R1,A

CONTINUE3:

DEC R3;декремент счётчика

MOV A,R3;загрузка в аккумулятор значения счётчика

JZ ENDFOR2;выход из цикла, если А=0

JMP FOR2;безусловный переход на метку       

ENDFOR2:          

MOV A,R5

JZ ENDDO1

JMP DO1            

ENDDO1:

;загрузка массива во внешнюю память

MOV DPTR,#9000H

INC R2

MOV A,R2;загрузка в аккумулятор количества элементов массива

MOV R3,A;установка счётчика

FOR3:

MOV A,@R0;загрузка элемента в аккумулятор

MOVX @DPTR,A;пересылка из аккумуляторо во внеш память

DEC R3;декремент счётчика

MOV A,R3;загрузка в аккумулятор значения счётчика

JZ ENDFOR3;переход на метку если А=0

DEC R0;сдвиг указателя

INC DPTR;сдвиг указателя

JMP FOR3;безусловный переход на метку

ENDFOR3:

END

Результаты

Для проверки работы программы был подан массив из 4-х чисел: 42, 16, 33, 33. В результате массив был отсортирован во внутренней памяти : 16, 33, 33, 42, а затем перевёрнут и послан во внешнюю память: 42, 33, 33, 16.

Вывод

В ходе работы мы познакомились с организацией памяти микроконтроллера и научились передавать данные из одной области в другую. Была получена программа, сортирующая массив методом пузырька.

Похожие материалы

Информация о работе