КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |