Способы адресации команд процессора Intel 8086 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Способы адресации команд процессора Intel 8086



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

В зависимости от того, в каком сегменте кода находится требуемая команда и явно или нет указывается её адрес, выделяют следующие режимы адресации команд:

1. Внутрисегментный прямой. Команда, к которой осуществляется переход, находится в том же сегменте кода, что и текущая команда перехода, т.е. при выполнении перехода содержимое регистра CS не изменяется.

Эффективный адрес перехода (смещение команды в сегменте кода) вычисляется как сумма текущего содержимого указателя команд IP и 8- или 16- битного относительного смещения (длины пропускаемых команд). Данный режим допустим в условных и безусловных переходах. Например:

cmp ah, al; Сравнивается содержимое регистров ah и al

jne met; Если содержимое регистров не равно,

     ; выполняется переход на команду с адресом met

inc al; Увеличение содержимого регистра al на 1

met: inc ah; Увеличение содержимого регистра ah на 1

Если содержимое регистров ah и al не равно (команда jne), то осуществляется переход к команде с меткой met путём добавления к текущему содержимому регистра IP длины пропускаемой команды (inc al).

2. Межсегментный прямой. Команда, к которой осуществляется переход, находится в другом сегменте кода по отношению к текущей команде перехода, т.е. при выполнении перехода изменяется содержимое регистра CS и регистра IP.

В команде указывается пара: сегмент и смещение. Начальный адрес нового сегмента кода загружается в сегментный регистр CS, а смещение – в регистр IP. Данный режим допустим только в командах безусловного перехода.

В качестве примера рассмотрим программу, состоящую из двух сегментов кода.

c_s1 segment

assume cs:c_s1

m1: mov ah,4

add ah,7

jmp c _ s: m 2; Прямой межсегментный переход в сегмент c _ s

c_s1 ends

c_s segment

assume cs:c_s

begin:

jmp c _ s 1: m 1; Прямой межсегментный переход в сегмент c _ s 1

m2: mov ah,4ch

int 21h

c_s ends

end begin

Сегмент кода c _ s является главным (в нём содержится начало и конец программы) и с него начинается выполнение программы. Выделенные жирным шрифтом команды осуществляют прямой межсегментный переход. При этом адрес перехода, указанный в этих командах, является четырёхбайтовым (два старшие байта указывают начальный адрес сегмента, два младшие байта – смещение команды в этом сегменте). При выполнении первого перехода в регистр   CS записывается начальный адрес сегмента c _ s 1, а в регистр IP – адрес команды в этом сегменте кода (m 1). Второй межсегментный переход выполняется аналогично.

Таким образом, при прямой адресации в адресном поле команды содержится адрес перехода – адрес, по которому размещается следующая выполняемая команда.

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

Содержимое указателя команд IP заменяется соответствующим содержимым регистра или ячейки памяти. Данный способ допустим только в командах безусловного перехода.

Например:

d_s segment

  adr dw met; По адресу adr указан адрес команды,

               ; на которую должен быть выполнен переход

d_s ends

c_s segment

assume ds:d_s, cs:c_s

begin:

mov ax, d_s

mov ds, ax

add ah, al; Складывается содержимое регистров ah и al

jmp adr; Выполняется переход на команду, адрес которой

     ; указан по смещению adr в сегменте данных

inc al; Увеличение содержимого регистра al на 1

met: inc ah; Увеличение содержимого регистра ah на 1

mov ah, 4ch

int 21h

c_s ens

end begin

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

4. Межсегментный косвенный. В этом режиме четырёхбайтовый адрес перехода размещается в смежных ячейках памяти по некоторому адресу (смещению) в сегменте данных. В команде перехода это смещение указывается в регистре процессора или ячейке памяти с помощью любого режима адресации данных, кроме непосредственного и регистрового. Содержимое регистров CS и IP заменяется содержимым двух смежных слов памяти, хранящихся по этому смещению в сегменте данных. Младшее слово загружается в регистр IP, старшее – в регистр CS. Данный режим допустим только в командах безусловного перехода.

В качестве примера рассмотрим программу, состоящую из двух сегментов кода и одного сегмента данных. В сегменте данных по адресу a указан адрес перехода в виде двойного машинного слова.

d_s segment

a dd c _ s 1: m 1; По адресу a указан адрес перехода в сегмент c _ s 1

                 ; по смещению m 1

d_s ends

c_s1 segment

assume cs:c_s1

m1: mov ah,4

add ah,7

jmp c_s:m2

c_s1 ends

c_s segment

assume ds:d_s, cs:c_s

begin:

lea bp, a; В регистр bp загружается адрес ячейки a

jmp dword ptr [bp]; Выполняется безусловный межсегментный

; переход по адресу, указанному в регистре bp

m2: mov ah,4ch

int 21h

c_s ends

end begin

Перед выполнением команды перехода в регистр BP загружается адрес ячейки a, по которому хранится адрес перехода в сегмент c _ s 1 на команду с адресом m 1. В команде перехода с помощью регистра BP указывается местонахождение адреса перехода в виде двойного машинного слова с использованием косвенной регистровой адресации данных.

Рассмотренные способы адресации команд используются практически во всех системах команд, расширяя или сокращая список команд конкретного процессора.



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 138; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.150.80 (0.007 с.)