Изучение архитектуры и системы команд INTEL-совместимых микропроцессоров. Коршунов А.Д. - 24 стр.

UptoLike

Составители: 

24
1.3.5. Адресация по базе со сдвигом
Теперь скомбинируем два предыдущих метода адресации: следующая
команда
mov ax,[bx]+2
помещает в регистр AX слово, находящееся в сегменте, указанном в DS, со
смещением на 2 большим, чем число, находящееся в BX. Так как слово занимает
ровно два байта, эта команда поместила в AX слово, непосредственно следующее
за тем, которое есть в предыдущем примере. Такая форма адресации используется
в тех случаях, когда в регистре находится адрес начала структуры данных, а
доступ надо осуществить к какому-нибудь элементу этой структуры. Другое
важное применение адресации по базе со сдвигом доступ из подпрограммы к
параметрам, данным в стеке, используя регистр BP в качестве базы и номер
параметра в качестве смещения.
До 80386 в качестве базового регистра можно было использовать только BX,
BP, SI или DI и
сдвиг мог быть только байтом или словом (со знаком). С помощью
этого метода можно организовывать доступ к одномерным массивам байт:
смещение соответствует адресу начала массива, а число в регистреиндексу
того элемента массива, который надо обработать.
1.3.6. Адресация по базе с индексированием
В этом методе адресации смещение операнда в памяти
вычисляется как
сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано:
mov ax,[bx+si]+2
В регистр AX помещается слово из ячейки памяти со смещением, равным
сумме чисел, содержащихся в BX и SI, и числа 2. Из шестнадцатибитных
регистров так можно складывать только BX+SI, BX+DI, BP+SI и BP+DI. Так
можно прочитать, например, число из двумерного массива: если задана таблица
10x10 байт, 2 — смещение ее начала от начала сегмента данных, BX = 20, а SI = 7,
приведенная команда прочитает слово, состоящее
из седьмого и восьмого байт
третьей строки.
                                                                             24
       1.3.5. Адресация по базе со сдвигом


    Теперь скомбинируем два предыдущих метода адресации: следующая
команда
            mov   ax,[bx]+2

помещает в регистр AX слово, находящееся в сегменте, указанном в DS, со
смещением на 2 большим, чем число, находящееся в BX. Так как слово занимает
ровно два байта, эта команда поместила в AX слово, непосредственно следующее
за тем, которое есть в предыдущем примере. Такая форма адресации используется
в тех случаях, когда в регистре находится адрес начала структуры данных, а
доступ надо осуществить к какому-нибудь элементу этой структуры. Другое
важное применение адресации по базе со сдвигом — доступ из подпрограммы к
параметрам, данным в стеке, используя регистр BP в качестве базы и номер
параметра в качестве смещения.
    До 80386 в качестве базового регистра можно было использовать только BX,
BP, SI или DI и сдвиг мог быть только байтом или словом (со знаком). С помощью
этого метода можно организовывать доступ к одномерным массивам байт:
смещение соответствует адресу начала массива, а число в регистре — индексу
того элемента массива, который надо обработать.


       1.3.6. Адресация по базе с индексированием


    В этом методе адресации смещение операнда в памяти вычисляется как
сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано:
            mov   ax,[bx+si]+2

    В регистр AX помещается слово из ячейки памяти со смещением, равным
сумме чисел, содержащихся в BX и SI, и числа 2. Из шестнадцатибитных
регистров так можно складывать только BX+SI, BX+DI, BP+SI и BP+DI. Так
можно прочитать, например, число из двумерного массива: если задана таблица
10x10 байт, 2 — смещение ее начала от начала сегмента данных, BX = 20, а SI = 7,
приведенная команда прочитает слово, состоящее из седьмого и восьмого байт
третьей строки.