УДК 37.02 ББК 74.202
Н. И. Витиска, Р. А. Попов
РАЗРАБОТКА УЧЕБНОЙ ПРОГРАММЫ НА АССЕМБЛЕРЕ ДЛЯ ДЕМОНСТРАЦИИ СКОРОСТИ РЕАЛИЗАЦИИ ПРОГРАММНЫХ И БЫСТРЫХ СОРТИРОВОК МАССИВОВ
Аннотация. В статье рассмотрены авторские методы создания учебной программы на ассемблере, которая отличается компактностью реализации за счет использования макросов и процедур. Предложена методика оценки различных алгоритмов сортировки по скорости их реализации. Приведены результаты моделирования сортировок массивов различной длины с возможностью изменения количества элементов в массиве.
Ключевые слова: программа, ассемблер, сортировка, моделирование, макрос, процедура, скорость обмена, дерево данных.
N. I. Vitiska, R. A. Popov
DEVELOPMENT OF THE EDUCATIONAL PROGRAM ON THE PROGRAMMING LANGUAGE ASSEMBLER FOR PRESENTATION OF THE VELOCITY OF IMPLEMENTATION OF PROGRAMMING AND QUICK ARRAY'S SORTS
Abstract. In this article the author's method of creating educational program on assembler. It differs compactness of realization due to using of macros and procedures. The methods of evaluation different sorting algorithms by the velocity of its realization. The results of modeling array's sorting different length with opportunity changing quantity of elements in array.
Key words: program, assembler, sorting, modeling, macro, procedure, exchange velocity, tree of
data.
Программирование алгоритмов сортировки на ассемблере или в командах микропроцессора позволяет исключить этап трансляции с языков высокого уровня и максимально адаптировать управление к реально протекающим процессам. Особенно это важно, когда мы работаем в заданном временном интервале, или когда выделяется минимальное значение времени на сортировку. Из известных самых быстрых алгоритмов сортировки особо следует выделить аппаратные сортировки, например, на специализированных сетях [1-3], или на матрице процессоров [4, 5] или на дереве контроллеров [6], количество которых зависит от числа N элементов в сортирующих массивах. Данное обстоятельство приводит к необоснованным аппаратным затратам. Поэтому в работе исследуются программные сортировки [7, 8, 9], не связанные с дополнительными аппаратными затратами. Разработанная учебная программа максимально реализует все возможности ассемблерной программы и программно объединяет следующие сортировки:
1. Сортировка прямым обменом (пузырьковая сортировка) [7, 8].
2. Сортировка массива, представленного в виде дерева в памяти [7].
3. Сортировка Хора (быстрая сортировка) [9].
Ниже приводится разработанная программа на ассемблере:
;сортировка массива различными методами
model small
stack 150h
include tree.inc
include piramid.inc
include obmen.inc
.data
infile db 'mas.txt',0h
outfile db 'outmas.txt',0h
mass db 65000 dup (?) ;сортируемый массив
n dw 0 ;количество элементов в сортируемом массиве
m dw 0 ;n/2
n1 dw 0
i dw 1
r dw 0
mess db 0ah,0dh,'выбрана сортировка обменом! ','$'
mess1 db 0ah,0dh,'выбрана сортировка деревом! ','$'
mess2 db 0ah,0dh,'выбрана быстрая сортировка! ','$'
x db 0
.code
main:
mov ax,@data
mov ds,ax
xor ax,ax
mov ah,09h
;заполнение массива из файла
;открываем описатель файла
mov ax,3d00h
mov dx,offset infile
int 21h
mov bx,ax
;вычисляем длину файла
mov ax,4202h
xor cx,cx
xor dx,dx
int 21h
mov n,ax ;длина файла
;устанавливаем указатель на начало фала
xor cx,cx
xor dx,dx
mov ax,4200h
int 21h
;записываем файл в массив
mov cx,n
mov ah,3fh
lea dx,mass+1
int 21h
;закрываем описатель файла
mov ah,3eh
int 21h
; Сортировка массива
cmp n,100
jae jmp1
mov ah,09h ;выбран метод прямого обмена
mov dx,offset mess
int 21h
obmen
jmp jmpe
jmp1:
cmp n,32001
jae jm2
mov ah,09h ;выбрана быстрая сортировка
mov dx,offset mess2
int 21h
mov ax,n
mov r,ax
call hor
jmp jmpe
jm2:
mov ah,09h ;выбрана сортировка деревом
mov dx,offset mess1
int 21h
piramid
jmpe:
Запись массива в файл
;извлечь атрибут файла
mov cx,9
mov ax,3500h
mov dx,offset outfile
int 21h
cmp ax,2
je j mp2 ;если файл не существует то jmp1
mov ah,41h ;иначе удаляем файл
mov dx,offset outfile
int 21h jmp2: ;создаем фал
mov ah,5bh
mov dx,offset outfile
xor cx,cx
int 21h ;записываем в файл
mov bx,ax ;описатель в bx
mov ah,40h
mov cx,n
mov dx,offset mass+1
int 21h
;закрываем описатель файла
mov ah,3eh
int 21h
mov ax,4c00h
int 21h
include horl.inc end main
Ниже приведенный листинг программы позволяет определить количество обменов и сравнений. Это позволяет оценить скорость работы предложенных методов сортировки.
cicl4:
mov bl,mass[si]
mov dl,mass[si-1]
inc j
cmp dl,bl
jb jmp1
inc g
mov mass[si],dl
mov mass[si-1],bl
dec si
loop cicl4
jmpl:
Разработанная программа заполняет массив данными из файла, затем сортирует их и записывает в другой файл, в качестве чисел используются коды символов ASCI. Так как каждый символ представляет собой код ASCI размером 1 байт, то можно этот символ поместить в массив и отсортировать как массив элементов. После того, как сортировка будет закончена, символы будут упорядочены и записаны в другой файл. В данном случае размерностью массива элементов выступает размер файла в байтах, зная этот размер можно выбрать оптимальный алгоритм сортировки для данного массива. Для обработки небольших массивов в программе используется сортировка прямым обменом. Сортировка Хора оказывается самой быстрой из представленных сортировок при обработке больших массивов, однако данный метод использует много памяти и не эффекти-
вен при обработке массивов более 32000 элементов. Сортировка деревом работает немного медленнее сортировки Хора, но данный метод не требователен к используемой памяти, поэтому используется для обработки массивов более 32000 элементов. Использование макросов и процедуры в разработанной программе, позволяет программно объединить 3 алгоритма сортировки . В разработанной программе используется 3 макроса:
1. Макрос сортировки с помощью дерева:
; макрос
; Сортировка массива
; с помощью дерева!
; Создаем древовидную структуру
piramid macro
local tree
local sort
mov cx,n ;запись числа элементов в переменную n
mov n1,cx
; dec n1 ;n1 граница просмотра
mov si,n
shr si,1
mov cx,si ;число повторов
; dec si ;si=n-1 начальный просмотр
tree:
tree1 ;макрос создает древовидную структуру массива
dec si
loop tree
; Сортируем дерево
mov cx,n
;dec cx
mov di,cx
sort:
mov si,1 ;начальный индекс для tree1
mov bl,mass[si] ;;;;;;;;;
mov al,mass[di] ;меняем местами элементы
mov mass[si],al ;массива
mov mass[di],bl ;;;;;;;;;
mov n1,di
dec n1 ;задает границу для tree1
tree1 ;макрос создает дерево
dec di
loop sort
endm
2. Макрос приведение к древовидному виду:
макрос приведение массива к древовидному виду
использует параметры si и п1
si-номер элемента в последовательности
mass-массив элементов
^-правая граница просмотра массива
m=n1/2 - используется в задании условия конца просмотра
tree1 macro a1
local cicll
local ecicll
local jmpl
local quit
push si
push di
push bx
mov al,mass[si]
mov x,al ;сохраняем элемент массива в x
mov di,si ;di=si
cicll:
mov ax,n1
mov m,ax
shr m,1 ;m=nl/2
cmp si,m
ja ecicll ;если si>m то ecicll
mov di,si ;иначе di=si
shl di,1 ;si=si*2
cmp di,n1
jae jmpl ;если di>=n1 то переход на jmp1
cmp si,n1 ;иначе сравниваем si и n1
jae jmpl ;если si>=n1 то переход на jmp1
mov bl,mass[di] ;иначе
cmp bl,mass[di+1] ;сравниваем mass[di] и mass[di+1]
jae jmpl ;если mass[di]>=mass[di+l] то jmpl
inc di ;иначе di=di+l
jmpl:
mov al,x
cmp al,mass[di] сравниваем x и mass[di]
jae ecicll ;если x>mass[di] то mass[si]=x
mov al,mass[di] ;иначе
mov mass[si],al ;mass[si]=mass[di]
mov si,di ;si=di
jmp cicll
ecicll:
mov al,x
mov mass[si],al ;записываем x в mass[si] и выходим
quit:
pop bx
pop di
pop si
endm
3. Макрос сортировки прямым обменом.
;макрос сортировка массива
;методом прямого обмена
obmen macro
local cicl3
local cicl4
local jmpl
mov cx,n
mov si,l
; dec cx
cicl3:
push si
push cx
mov cx,si
cid4:
mov bl,mass[si]
mov dl,mass[si-1]
cmp Ш,Ы
]Ь jmp1
mov mass[si],dl
mov mass[si-1],bl
dec si
loop cid4
PoP cx
PoP si
inc si
loop tid3
endm
Также в разработанной программе используется одна процедура сортировки Хора (быстрая сортировка):
;процедура быстрой сортировки
;в качестве параметров использует
;значения переменных i и г:
^ - начальный индекс массива;
;г - конечный индекс массива.
^г proc ;;;;;;;;;;;;;;;
inc x
@hor:
mov si,i
add si,r
shr si,1
mov cl,mass[si]
mov si,i
mov di,r
@rep:
@wh1:
cmp mass[si],cl
jae @wh2
те si
jmP @wh1
@wh2:
cmp cl,mass[di]
jae
dec di
№ @wh2
cmp si,di
ja @unt1
mov al,mass[si]
xchg mass[di],al
mov mass[si],al
inc si
dec
@unt1:
cmp si,di
jle @rep
cmp
jae @if2
push r
mov r,di
call hor
pop r
@if2:
cmp si,r
jae @if3
push i
mov i,si
call hor
pop i
@if3:
ret
hor endp
Использование макросов и процедуры в разработанной программе даёт возможность программно объединить несколько алгоритмов сортировки, что в результате позволило обеспечить оптимальную скорость работы программы при обработке массивов различной длины и значительно уменьшить аппаратные затраты. Оптимальная скорость работы программы обеспечивается благодаря динамическому выбору алгоритма сортировки в зависимости от размера обрабатываемого массива.
Вывод. Применение языка ассемблера при программировании алгоритмов сортировки позволяет максимально увеличить скорость выполнения программы на ЭВМ и уменьшить аппаратные затраты. Введение макросов и процедур при программировании на языке ассемблера позволяет сократить временные затраты, связанные с отладкой программы и ее разработкой, а в тех случаях, когда уже имеется отлаженный код в виде макроса или процедуры, уменьшается количество ошибок в процессе разработки программы.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Batcher, K. E. Sorting Networks and their applications // Proc. AFIPS SPRING JOINT conf. Afips Press. - New Jersey, 1968. - Vol 32. - P. 307-314.
2. Batcher, K. E. The flip network in staran. New York // Proc Int. Conf. On Parallel Processing. - 1976. - Aug. -P. 65-71.
3. Kautz, W. H. Cellular Interconnection Arrays. IEEE Transactions on Computers // Proc Int. Conf. On Parallel Processing. - 1968. - Vol. 17. - P. 443-451.
4. Ромм, Я. Е. Сортировка слиянием по матрицам сравнений. I // Кибернетика и системный анализ. - 1994. -№ 5. - С. 3-23.
5. Ромм, Я. Е. Сортировка слиянием по матрицам сравнений. II // Кибернетика и системный анализ. - 1995. - № 4. - С. 13-27.
6. Ульман, Д. Д. Вычислительные аспекты СБИС / Д. Д. Ульман. - М.: Радио и связь, 1990.
7. Иванова, Г. С. Основы программирования: учебник для вузов / Г. С. Иванова. - М.: Изд-во МГТУ имени Н.Э. Баумана, 2001. - С. 319.
8. Кнут, Д. Э. Искусство программирования для ЭВМ / Д. Э. Кнут. - М.: Мир, 1978. - Т. 3. Сортировка и Поиск. - С. 844.
9. Режим доступа: http://netsoftware.ucoz.ru/news/bystraja_sortirovka_metodom_khora_1992_god/2012-05-14-63
УДК 53.08: 621.38: 378.164 ББК 74.58
В. М. Глушань
ВИРТУАЛЬНЫЕ ЛАБОРАТОРИИ В ОБРАЗОВАТЕЛЬНОМ ПРОЦЕССЕ
Аннотация. Дается представление о виртуальной лаборатории по электронике, которая в условиях дефицита соответствующего оборудования в педагогическом вузе является удачным решением вопроса с организацией лабораторных работ по курсу «Разработка и создание учебных приборов и оборудования».
Ключевые слова: виртуальная лаборатория, информационные технологии, эффективность, облачные вычисления.