Иллюстрированный самоучитель по 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]

 




- Начало -  - Назад -  - Вперед -



Книжный магазин