ОТЧЁТ
по лабораторной работе №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.
В ходе работы мы познакомились с организацией памяти микроконтроллера и научились передавать данные из одной области в другую. Была получена программа, сортирующая массив методом пузырька.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.