русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2013-12-23; просмотров: 622; Нарушение авторских прав


Mov si,4

...

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

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

Mov esi,19

Mas dw 0,1,2,3,4,5,456,876,7,8752 ; 00 00 00 01 00 02 00 03 00 04

; 00 05 01 С8 03 6С 00 07 22 30

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

1) Mas[19] ; =30

2) Mas[13h] ; =C8

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]



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


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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