Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Mas dw 0,1,2,3,4,5

Data

Endm

Rept 4

Masw label word

Masb label byte

Массивы

End start

Int21h

Mov ax,4c00h

Loop cycl1

Add bx,10

Pop cx

Loop cycl2

Inc si

Jne nozero

Mov cx,10

Xor si,si

Push cx

Mov cx,5

Lea bx,mas

Xor ax,ax

Mov ds,ax

Code

Db 1,0,9,8,0,7,8,0,2,0

Db 1,0,9,8,0,7,8,0,2,0

Db 1,0,9,8,0,7,8,0,2,0

Db 1,0,9,8,0,7,8,0,2,0

Mas db 1,0,9,8,0,7,8,0,2,0

Data

Stack 100h

Model small

Пример использования вложенных циклов

End start

Mov ax,4c00h

Mov ah,9

Loopne cicl

Inc si

Mov si,-1

Xor si,si

Xor ax,ax

Mov cx,len

Mov ds,ax

Code

Mas db 1,0,9,8,0,7,8,0,2,0

Len equ 10

Data

Inc si

Mov cx, 10

Mov si, 0

Mov bx, offset mas

Code

………….

nul:

mov [bx] [si], 0; обнуление

loop nul; управление на метку nul и cx уменьшается на 1

;выход из цикла, когда CX=0

…………….

Пример использования в цикле команды loopne.

 

В данном примере программа находит в массиве нулевой байт и выходит из цикла.

mes db “Нет нулевых элементов $”

start:

mov ax,@data

cicl:

cmp mas[si],0

jz exit;если найден 0, то выход

mov dx,offset mes;иначе – нет нулей в строке

int 21h

exit:

int 21h

Программа заменяет все нулевые байты в области памяти на значение 0ffh

 

start:

mov ax,@data

cycl1:

cycl2:

cmp byte ptr [bx+si],0

mov byte ptr [bx+si],0ffh

nozero:

 

Массив – структурированный тип данных, состоящий из некоторого числа элементов одного типа.

Специальных средств описания массивов в ассемблере не существует, поэтому программист должен знать:

o как в программах на ассемблере описать массив,

o как инициализировать массив,

o как организовать доступ к элементам массива,

o как организовать выполнение типовых операций с массивами.

 

Массив в программе можно смоделировать одним из следующих способов:

 

1) перечисление элементов массива

mas dd 1, 2, 3, 4, 5;массив из 5 двойных слов

 

2) используя оператор повторения

mas dw 10 dup (0);массив из 10 нулевых слов

 

3) используя директивы label и rept

Директива rept относится к макросредствам языка ассемблера и вызывает повторение указанное число раз строк, заключенных между rept и endm.

В качестве метки одной области памяти можно использовать разные имена. Каждому имени соответствует указанный тип данных. В примере можно обращаться к массиву байт по метке masb, либо к массиву слов по метке masw.

 

dw 0f1f0h;массив из 4 повторяющихся слов 0f1f0h

.

В общем случае для получения адреса элемента в одномерном массиве необходимо базовый адрес массива сложить с произведением индекса этого элемента (начиная с нуля) на размер элемента массива.

Адрес = База + (Индекс * Размер элемента массива).

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

 

Индексная адресация со смещением.

Эффективный адрес формируется из двух компонент:

постоянного (базового), указывающего на прямой адрес массива в виде имени идентификатора;

переменного (индексного), указывающего на имя индексного регистра.

 

Пример:

……………..

<== предыдущая лекция | следующая лекция ==>
Mas db 1,2,3,4,5,6,7,8,9,10 | Not операнд
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 333; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.