Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
30
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

2. Адресные операнды – задают физическое расположение операнда в памяти с помощью указания двух составляющих адреса: сегмента и смещения. К примеру:

mov ax,0000h

mov ds,ax

mov ax,ds:0000h ; записать слово в ах из области памяти по физическому адресу 0000:0000

2. Счётчик адреса. Обозначается знаком $. Когда транслятор ассемблера встречает в программе этот символ, то он подставляет вместо него текущее значение счётчика адреса.

0000 jmp $+3 ; безусловный переход на команду mov

0002 cld ; длина команды cld составляет 1 байт

0001 mov al,1

Команда jmp занимает 2 байта.

3. Регистровый операнд – это имя регистра. В программе можно использовать имена всех регистров общего назначения и большинства системных регистров. Пример:

mov al,4 ; константу 4 заносим в регистр al

mov dl, 8

add al,dl ; команда с регистровыми операндами

4. Базовый и индексный операнды. Тип операндов используется для реализации косвенной базовой, косвенной индексной адресации или их комбинаций и расширений.

5. Структурные операнды используются для доступа к конкретному элементу структуры.

6. Записи (аналогично структурному типу) используются для доступа к битовому полю некоторой записи.

Выполнение операторов ассемблера при вычислении выражений осуществляется в соответствии с их приоритетами (табл. 3.1).

Табл. 3.1. Операторы и их приоритет

Лекция №3. Команды передачи управления. Арифметические команды.

То, какая команда программы должна выполняться следующей, микропроцессор узнаёт по содержимому пары регистров cs:(e)ip, в которой:

cs – сегментный регистр кода, в котором находится физический (базовый) адрес текущего сегмента кода;

eip/ip – регистр указателя команд, в котором находится значение, представляющее собой смещение в памяти следующей команды, подлежащей выполнению, относительно начала текущего сегмента кода.

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

  1. Команды безусловной передачи управления:

– команда безусловного перехода;

– вызов процедуры и возврата из процедуры;

– вызов программных прерываний и возврат из программных прерываний;

  1. Команды условной передачи управления:

– команды перехода по результату команды сравнения;

– команды перехода по состоянию определённого флага;

– команды перехода по содержимому регистра есх/сх.

  1. Команды управления циклом:

– команда организации цикла со счётчиком есх/сх;

– команда организации цикла со счётчиком есх/сх с возможностью досрочного выхода из цикла по дополнительному условию.

Метка – это символическое имя, обозначающее определённую ячейку памяти, предназначенное для использования в качестве операнда в командах передачи управления.

Транслятор ассемблера присваивает метке три атрибута:

имя сегмента кода, где эта метка описана;

смещение – расстояние в байтах от начала сегмента кода, в котором описана метка;

тип метки или атрибут расстояния.

Тип метки может принимать два значения:

near (ближняя метка) – переход на эту метку возможен только в пределах сегмента кода, где эта метка описана. Физически это означает, что для перехода на метку достаточно изменить только содержимое регистра eip/ip.

far (дальняя метка) – переход на эту метку возможен только в результате межсегментной передачи управления, для осуществления которой требуется изменения содержимого как регистра eip/ip так и регистра cs.

Метку можно определить двумя способами:

оператором : (двоеточие);

директивой label.

Синтаксис первого способа таков:

Символическое имя :

Команда ассемблера

С помощью данного способа можно определить метку только ближнего типа – near.

Синтаксис второго способа таков:

Символическое имя label тип метки

При этом тип метки может принимать значения как near так и far. Пример эквивалентного описания метки ближнего типа:

m1:

mov ax,pole_1

и

m1 label near

mov ax,pole_1

Безусловные переходы

Команды перехода модифицируют регистр указателя команды eip/ip и, возможно сегментный регистр кода cs. Что именно должно модифицироваться зависит: