Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Микропроцессор позволяет масштабировать индекс. Необходимость в масштабировании возникает при работе с массивами, которые имеют размер элементов, равный 2, 4 или 8 байтам

Mov si,4

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

Способы адресации, используемые при работе с массивами

Mov esi,19

Mas[esi]; =30

4) Mov esi,6*2; 2 байта – размер элементов

Mov ax, Mas[esi]; ax=01C8

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

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

база + (индекс*размер элемента)

 


1) индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:

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

l переменного (индексного) — указанием имени индексного регистра.

К примеру:

...

;поместить 3-й элемент массива mas в регистр ax:

mov ax,mas[si]

 

2) базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:

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

b. переменного (базового) — указанием имени базового регистра;

c. переменного (индексного) — указанием имени индексного регистра.

 

Этот вид адресации используется при обработке двухмерных массивов. Например:

Mov eax,mas[bx][si]

В качестве базового регистра может использоваться любой из восьми регистров общего назначения. В качестве индексного регистра также можно использовать любой регистр общего назначения, за исключением esp/sp.

 


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

Пример 6: Просмотр массива слов с использованием масштабирования

;prg_12_2.asm. Для DOS16.

MASM

MODEL small

STACK 256

.data;начало сегмента данный

;тексты сообщений:

mes1 db "не равен 0!$",10,13

mes2 db "равен 0!$",10,13

mes3 db 10,13,'Элемент $'

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

.code

;.486;это обязательно

start:

mov ax,@data

mov ds,ax;связка ds с сегментом данных

xor ax,ax;обнуление ax

prepare:

mov сx,10;значение счетчика цикла в cx

mov esi,0;индекс в esi

compare:

mov dx,mas[esi*2];первый элемент массива в dx

cmp dx,0;сравнение dx с 0

je equal;переход, если равно

not_equal:;не равно

mov ah,09h;вывод сообщения на экран

lea dx,mes3

int 21h

mov ah,02h;вывод номера элемента массива на экран

mov dx,si

add dl,30h

int 21h

mov ah,09h

lea dx,mes1

int 21h

inc esi;на следующий элемент

dec сх;условие для выхода из цикла

jcxz exit;cx=0? Если да - на выход

jmp compare;нет - повторить цикл

equal:;равно 0

mov ah,09h;вывод сообщения mes3 на экран

lea dx,mes3

int 21h

mov ah,02h

mov dx,si

add dl,30h

int 21h

mov ah,09h; вывод сообщения mes2 на экран

lea dx,mes2

int 21h

inc esi;на следующий элемент

dec ex;все элементы обработаны?

jcxz exit

jmp compare

exit:

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

int 21h

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

 


Возможны следующие случаи при адресации массивов:

1) если для описания адреса используется только один регистр, то такая адресация называется базовой адресацией и этот регистр рассматривается как базовый:

; переслать байт из области данных, адрес которой находится в

; регистре ebx

mov al,[ebx]

 

2) если для задания адреса в команде используется прямая адресация (в виде идентификатора) в сочетании с одним регистром, то такая адресация называется индексной адресацией со смещением. Регистр считается индексным и поэтому можно использовать масштабирование для получения адреса нужного элемента массива:

;сложить содержимое eax с двойным словом в памяти по адресу

; mas + (ebx)*4

add eax,mas[ebx*4]

 

3) если для описания адреса используются два регистра, то такая адресация называется базово-индексной адресацией со смещением. Левый регистр рассматривается как базовый, а правый — как индексный.

Базово-индексную адресацию можно сочетать с прямой адресацией или указанием непосредственного значения. Адрес тогда будет формироваться как сумма всех компонентов.

 

К примеру:

mov ax,mas[ebx][ecx*2]

;адрес операнда равен [mas+(ebx)+(ecx)*2]

...

sub dx,[ebx+8][ecx*4]

;адрес операнда равен [(ebx)+8+(ecx)*4]

 

<== предыдущая лекция | следующая лекция ==>
Доступ к элементам массива | Двумерные массивы
Поделиться с друзьями:


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


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



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




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