Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Типовые операции с массивами

Читайте также:
  1. III. Группа вспомогательных инструментов для содействия в выполнении основного этапа операции.
  2. Алгебра логики (логические операции, таблицы истинности, основные соотношения алгебры логики)
  3. Арифметические операции
  4. Архитектура функционального модуля ТПТС (Типовые программно-технические средства).
  5. Асинхронные операции в среде .NET. Асинхронный вызов делегатов.
  6. Банковские операции, осуществляемые ЦБ РФ
  7. Билет № 12 . Мышление и речь. Основные формы мышления. Виды мышления и речи. Мыслительные операции
  8. Бронхоэктатическая болезнь. Этиопатогенез, стадии, клиника, диагностика, лечение, показания к операции.
  9. Валютные операции
  10. Валютные операции коммерческих банков

Для демонстрации основных приемов работы с массивами лучше всего подходят программы поиска или сортировки. Рассмотрим одну такую программу, выполняющую сортировку массива по возрастанию (листинг 2).

Листинг 6. Сортировка массива

MODEL small

STACK 256

.data

mes1 db 0ah,0dh,'Исходный массив — $',0ah,0dh;некоторые сообщения

mes2 db 0ah,0dh,'Отсортированный массив — $',0ah,0dh

n equ 9;количество элементов в массиве, считая с 0

mas dw 2,7,4,0,1,9,3,6,5,8;исходный массив

tmp dw 0;переменные для работы с массивом

i dw 0

j dw 0

.code

main:

mov ax,@data

mov ds,ax

xor ax,ax

;вывод на экран исходного массива

mov ah,09h

lea dx,mes1

int 21h;вывод сообщения mes1

mov cx,10

mov si,0

show_primary:;вывод значения элементов

;исходного массива на экран

mov dx,mas[si]

add dl,30h

mov ah,02h

int 21h

add si,2

loop show_primary

;строки 40-85 программы эквивалентны следующему коду на языке С:

;for (i=0;i<9;i++)

; for (j=9;j>i;j--)

; if (mas[i]>mas[j])

; {tmp=mas[i];

; mas[i]=mas[j];

; mas[j]=tmp;}

mov i,0;инициализация i

;внутренний цикл по j

internal:

mov j,9;инициализация j

jmp cycl_j;переход на тело цикла

exchange:

mov bx,i;bx=i

shl bx,1

mov ax,mas[bx];ax=mas[i]

mov bx,j;bx=j

shl bx,1

cmp ax,mas[bx];mas[i]? mas[j] — сравнение

jle lesser;если mas[i] меньше, то обмен не нужен и переход на продвижение далее по массиву иначе tmp=mas[i], mas[i]=mas[j], mas[j]=tmp, tmp=mas[i]

mov bx,i;bx=i

shl bx,1;умножаем на 2, так как элементы — слова

mov tmp,ax;tmp=mas[i]

;mas[i]=mas[j]

mov bx,j;bx=j

shl bx,1;умножаем на 2, так как элементы — слова

mov ax,mas[bx];ax=mas[j]

mov bx,i;bx=i

shl bx,1;умножаем на 2, так как как элементы — слова

mov mas[bx],ax;mas[i]=mas[j]

;mas[j]=tmp

mov bx,j;bx=j

shl bx,1;умножаем на 2, так как элементы — слова

mov ax,tmp;ax=tmp

mov mas[bx],ax;mas[j]=tmp

lesser:;продвижение далее по массиву во внутреннем цикле

dec j;j--

;тело цикла по j

cycl_j:

mov ax,j;ax=j

cmp ax,i;сравнить j? i

jg exchange;если j>i, то переход на обмен

;иначе на внешний цикл по i

inc i;i++

cmp i,n;сравнить i? n — прошли до конца массива

jl internal;если i вывод отсортированного массива

mov ah,09h

lea dx,mes2

int 21h

prepare:

mov cx,10

mov si,0

show:;вывод значения элемента на экран

mov dx,mas[si]

add dl,30h

mov ah,02h

int 21h

add si,2

loop show

exit:

mov ax,4c00h;стандартный выход

int 21h

end main;конец программы

 

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

В программе два цикла. Внешний цикл определяет позицию в массиве очередного элемента, с которым производится попарное сравнение элементов правой части массива (относительно этого элемента). За каждую итерацию внешнего цикла на месте этого очередного элемента оказывается меньший элемент из правой части массива (если он есть).

В остальном программа достаточно проста и на языке высокого уровня заняла бы около десятка строк.

 

ЛИТЕРАТУРА

1. ГСТУ 3008-95. Документация. Отчеты в сфере науки и технологии. Структура и правила оформления. – Киев: Изд-во стандартов, 1995.

2. Единая система программной документации / Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. ГОСТ 19.701- 90. - М.

3. Методические указания к курсовому проектированию для студентов колледжа «Сервер», 2014 г.

4. Абель П. Ассемблер. Язык и программирование для IBM. - М.: Век, 2003

5. Калашников О.А. Ассемблер? Это просто! Учимся программировать. – СПб.:БХВ-Петербург, 2007

6. Кучеренко В. Ассемблер: тонкости, хитрости и секреты программирования.- М.: Майор, 2001

7. Юров В. Assembler. Практикум. – СПб: ПИТЕР, 2004

8. Юров В. Assembler. Учебник. – СПб: ПИТЕР, 2003

9. Зубков С.В. Assembler. Для DOS, Windows и Unix. – М.:ДМК, 1999.




Дата добавления: 2015-04-11; просмотров: 18 | Поможем написать вашу работу | Нарушение авторских прав

1 | 2 | <== 3 ==> |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав