Главная страница
Навигация по странице:

  • Непосредственная адресация

  • Прямая адресация

  • Регистровая адресация

  • Косвенная адресация

  • Косвенная адресация со смещением

  • Индексная адресация

  • Индексная адресация со смещением

  • Стековая адресация

  • Неявная адресация

  • Ассемблер методичка. Программа представляется в виде последовательности команд, каждая из которых записывается с помощью целого числа байт порядок команд однозначно определяется программой


    Скачать 253 Kb.
    НазваниеПрограмма представляется в виде последовательности команд, каждая из которых записывается с помощью целого числа байт порядок команд однозначно определяется программой
    АнкорАссемблер методичка.doc
    Дата21.03.2018
    Размер253 Kb.
    Формат файлаdoc
    Имя файлаАссемблер методичка.doc
    ТипПрограмма
    #17015
    страница3 из 7
    1   2   3   4   5   6   7

    1.3.Способы адресации МП Intel 8086



    Для адресации данных в процессоре 8086 можно исполь-зовать несколько способов. Данные хранятся в сегменте данных. Сегмент данных определяется программистом, а адреса данных задаются им с помощью меток. Пусть в сегменте данных меткой Mas задан массив чисел каждое размером в один байт. Этой меткой мы будем пользоваться ниже при рассмотрении способов адресации со смещением.
    Непосредственная адресация

    Это самый простой способ адресации – вместо адреса в поле операнда команды указывается сам операнд, например: 25, -6, 100. В общем виде операнд записывается как числовая константа.

    Регистры



    Поле операнда

    в команде Операнд

    Опер. память

    Прямая адресация

    Адрес операнда задается в явном виде меткой. Адрес первого элемента массива Mas будет выглядеть так: Mas. Адрес четвертого элемента можно записать как Mas+3 (так как адрес 1-го эл-та – Mas+0, 2-го – Mas+1 и т.д.). В общем виде адрес записывается как <метка><константа>.
    Регистры



    Поле операнда

    в команде Операнд

    Опер. память

    Регистровая адресация

    В поле операнда указывается имя регистра. Примеры: AX, DL, SP. Общий вид: <имя регистра>.
    Регистры



    Поле операнда

    в команде Операнд

    Опер. память

    Косвенная адресация

    В случае косвенной адресации адрес смещение операнда в сегменте данных находится в одном из регистров BX, SI, DI. Другие регистры при косвенной адресации недопустимы. Имя регистра заключается в квадратные скобки. Примеры: [SI], [DI], [BX]. Если необходимо обратиться к данным из другого сегмента, например ES, необходимо использовать так называемую замену сегмента. Для этого перед [Рег] указывают имя сегментного регистра и ставят двоеточие, например так: ES:[DI]. Общий вид: {<сегмент>:}[<регистр>]. Фигурные скобки означают, что замена сегмента не обязательна.




    Регистры



    Поле операнда

    в команде Операнд

    Опер. память

    Косвенная адресация со смещением

    К смещению, полученному с помощью косвенной адреса-ции, прибавляется дополнительное смещение, и по этому новому адресу и находится в оперативной памяти операнд. Существует несколько форм записи этой адресации, приведем две из них: Mas[SI] (эквивалентно [SI+смещение Mas]), [SI+4]. Смещение Mas можно найти с помощью директивы OFFSET Mas, то есть Mas[SI][SI+OFFSET Mas]. В этом способе адресации можно применять еще и регистр BP, например: [BP+16]. При использовании этого регистра процессор воспринимает смещение как смещение в сегменте стека. Пример: DS:[BP-12]. Общий вид: {<сегмент>:}[<Регистр>+<Смещение>].

    Регистры



    Поле операнда

    в команде Операнд

    Опер. память


    Индексная адресация

    Индексная адресация часто применяется для обработки двумерных массивов. Смещение операнда вычисляется процессором как сумма содержимого базового и индексного регистра. При этом базовыми являются регистры BX, BP, а индексными SI, DI. Применение других регистров недопустимо. Примеры такой адресации: [BX][SI], [BP][DI]. Индексная адре-сация с базовым регистром BX обращается в сегмент данных, а с BP – в стек. Возможна замена сегмента, она выполняется аналогично косвенной адресации. Рассмотрим методику работы с двумерным массивом. В BX (или BP) заносится адрес начала строки массива, а в SI (DI) – смещение операнда внутри строки. Общий вид: {<сегмент>:}[<Баз. рег>][<Инд. регистр>].
    Регистры




    Cvtotybt

    Поле операнда

    в команде Операнд

    Опер. память



    Индексная адресация со смещением

    Эта адресация более удобна для обработки двумерных массивов. К смещению, полученному с помощью индексной адресации, добавляется дополнительное смещение. По аналогии с косвенной адресацией со смещением, ее можно записать как {<сегмент>:}[<Баз. рег>][<Инд. регистр> + <смещение>]. Примеры: Mas[BX][SI]  [BX][SI + OFFSET Mas], [BP][SI+5], [BX][DI-7]. В этом случае в BX, BP указывают смещение строки внутри массива, а в SI, DI – смещение элемента массива в строке (индекс элемента). Также возможна замена сегмента.
    Регистры




    Поле операнда

    в команде Операнд

    Опер. память

    Стековая адресация

    Существуют команды, работающие со стеком. Они используют так называемую стековую адресацию, при которой адрес формируется из регистров SS и SP следующим образом: SS*16+SP (или SS:SP).


    Регистры




    Поле операнда

    в команде Операнд

    Опер. память


    Неявная адресация

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

    1   2   3   4   5   6   7


    написать администратору сайта