Иллюстрированный самоучитель по Assembler



Способы адресации - часть 12


;Сегмент данных

array dw 10000

;Сегмент команд

mov BX,offset array ;Базовый адрес массива в

;базовом регистре

mov SI, 0 ;Начальное значение индекса

;элемента в массиве

mov АХ, 0 ;Первое число-заполнитель

mov CX,10000 ;Число шагов в цикле

fill: mov [BX][SI],AX ;Отправим число в массив

inc AX ;Инкремент числа-заполнителя

add SI, 2 ;Смещение в массиве к следующему слову

loop fill ;На метку fill (CX раз)

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

Базово-индексная адресация со смещением. Адресуется память (байт или слово). Относительный адрес операнда определяется как сумма содержимого двух регистров и смещения.

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

Пусть в сегменте данных определен массив из 24 байтов, в котором записаны коды латинских и русских символов верхнего ряда клавиатуры:

sims db "QWERTYUIOP{}'

db "ЙЦУКЕНПШЦЗХЪ'

Последовательность команд

mov BX,12 ;Число байтов в строке

mov SI, 6

mov DL,syms[BX][SI]

загрузит в регистр DL элемент с индексом 6 из второго ряда, т.е. код ASCII буквы Г. Тот же результат можно получить, загрузив в один из регистров не индекс, а адрес массива:

mov BX, off set sym

mov SI,6

mov DL, 12 [BX] [SI]




Содержание  Назад  Вперед