Разделы презентаций


Системное программирование Лекция №6 Команды передачи управления

Содержание

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

Слайды и текст этой презентации

Слайд 1Системное программирование
Лекция №6



Команды передачи управления



Системное программированиеЛекция №6Команды передачи управления

Слайд 2Передача управления
Решение о том, какая команда будет выполняться в программе

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

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

Слайд 3Команды передачи управления
1. Команды безусловной передачи управления:
команда безусловного перехода;
вызов процедуры

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

прерываний;
2. Команды безусловной передачи управления:
команды перехода по результату команды сравнения;
команды перехода по состоянию определенного флага;
команды перехода по содержимому регистра СХ.
3. Команды управления циклом:
команда организации цикла со счетчиком СХ;
команда организации цикла со счетчиком СХ с возможностью досрочного выхода из цикла по дополнительному условию.
Команды передачи управления1. Команды безусловной передачи управления:команда безусловного перехода;вызов процедуры и возврата из процедуры;вызов программных прерываний и

Слайд 4Метки
Место, куда необходимо передать управление, определяется меткой. Метка – это

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

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

Слайд 5Атрибут расстояния
Может принимать два значения:
NEAR – переход на эту

метку возможен только в пределах сегмента кода, в котором описана

метка. Физически это означает, что для перехода на метку достаточно изменить только содержимое регистра IP;
FAR – переход на эту метку возможен только в результате межсегментной передачи управления, для осуществления которой требуется изменение содержимого как регистра IP, так и регистра CS.
Атрибут расстояния Может принимать два значения:NEAR – переход на эту метку возможен только в пределах сегмента кода,

Слайд 6Метки
Метку можно определить двумя способами:
оператором : (двоеточие);
директивой LABEL.

С помощью оператора

можно определить метку только ближнего типа – NEAR. Символическое имя

в программе может быть определено только один раз. Определенную таким образом метку можно использовать в качестве операнда в командах JCC, JMP, CALL. Эти команды должны быть в сегменте кода, где определена метка. Команда ассемблера может находиться как на одной строке с меткой, так и на следующей.

Синтаксис директивы LABEL:
символическое_имя LABEL тип метки
Тип метки принимает значения NEAR или FAR.
МеткиМетку можно определить двумя способами:оператором : (двоеточие);директивой LABEL.С помощью оператора можно определить метку только ближнего типа –

Слайд 7Примеры создания меток
Описания меток ближнего типа эквивалентны:
m1:
MOV AX,pole_1 ;
и
m1 LABEL NEAR
MOV AX,pole_1

При необходимости использовать

для одной и той же команды метку и дальнего, и

ближнего типов:
;…
PUBLIC m_far ;сделать метку m_far видимой
;для внешних программ

m_far LABEL FAR ;определение метки дальнего типа m_far
m_near: ; определение метки ближнего типа m_near
MOV AX,pole_1
Примеры создания меток Описания меток ближнего типа эквивалентны:m1:				MOV	AX,pole_1	;иm1		LABEL	NEAR			MOV	AX,pole_1При необходимости использовать для одной и той же команды метку

Слайд 8Примеры создания меток

mas_b LABEL BYTE
mas_w DW 15 DUP (0)

;в этом фрагменте оба идентификатора

относятся
;к одной области памяти
;и дают возможность работать с ней,

используя
;разные имена, либо как с
;байтовым массивом, либо как с массивом слов

MOV mas_b+10,AL ;запись из AL в массив байтов
;(в 11-й байт)

MOV mas_w,AX ; запись из AХ в первое слово
;области mas_w
;

Примеры создания меток …mas_b	LABEL	BYTEmas_w	DW	15 DUP (0)…;в этом фрагменте оба идентификатора относятся ;к одной области памяти;и дают возможность

Слайд 9Счетчик адреса команд
Счетчик адреса команд – это смещение конкретной команды

относительно начала сегмента кода. Т.о., каждая команда во время трансляции

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

Str_mes DB 'Строка'
Len_Msg = $ - Str_mes ;После ассемблирования Len_mes ;будет равно длине строки

ORG выражение – задает значение счетчика адреса.
Счетчик адреса командСчетчик адреса команд – это смещение конкретной команды относительно начала сегмента кода. Т.о., каждая команда

Слайд 10Безусловные переходы
Что именно модифицирует команда перехода зависит:
от типа операнда в

команде безусловного перехода (ближний или дальний);
от указания перед адресом перехода

(в команде перехода) модификатора; при этом сам адрес перехода может находиться либо непосредственно в команде (прямой переход), либо в регистре или ячейке памяти (косвенный переход). Модификатор может принимать следующие значения:
NEAR PTR – прямой переход на метку внутри текущего сегмента кода. Модифицируется только регистр IP на основе указанных в команде адреса (метки) или выражения, использующего символ извлечения значения счетчика адреса команд - $.
FAR PTR – прямой переход на метку в другом сегменте кода. Адрес перехода задается в виде непосредственного операнда или адреса (метки) и состоит из 16-битного селектора и 16-битного смещения, которые загружаются, соответственно, в регистры CS и IP.
WORD PTR – косвенный переход на метку внутри текущего сегмента кода. Модифицируется (значением смещения из памяти, по указанному в команде адресу или из регистра) только IP. Размер смещения 16 бит.
DWORD PTR - косвенный переход на метку в другом сегмента кода. Модифицируются (значением из памяти – и только из памяти, из регистра нельзя) оба регистра, CS и IP. Первое слово этого адреса представляет смещение и загружается в IP; второе загружается в CS.
Безусловные переходыЧто именно модифицирует команда перехода зависит:от типа операнда в команде безусловного перехода (ближний или дальний);от указания

Слайд 11Команда безусловного перехода JMP
Синтаксис команды безусловного перехода:
JMP [модификатор] адрес_перехода –


безусловный переход без сохранения информации о точке возврата. Адрес_перехода представляет

собой адрес в виде метки либо адрес области памяти, в котором находится указатель перехода.

Внутрисегментный переход предполагает, что изменяется только содержимое регистра IP. Три варианта внутрисегментного использования команды JMP:
прямой короткий (расстояние от команды JMP до адреса_перехода не более чем –128 или +127 байтов);
прямой (позволяет производить переходы в пределах 64 Кбайт относительно следующей за JMP команды);
косвенный.
Команда безусловного перехода JMPСинтаксис команды безусловного перехода:JMP [модификатор] адрес_перехода – безусловный переход без сохранения информации о точке

Слайд 12Команда безусловного перехода JMP
JMP SHORT PTR m1
…;не более 35-40 команд (127

байтов)
m1:
или
m1:
…;не более 35-40 команд (-128 байтов)
JMP m1
__________________________
LEA BX,m1
JMP BX ;адрес перехода в регистре ВХ

m1:
__________________________
Сегмент

данных:
Addr_m1 DW m1

Сегмент кода:

JMP addr_m1 ;адрес перехода к ячейке памяти addr_m1

m1:
Команда безусловного перехода JMP	JMP	SHORT PTR m1…;не более 35-40 команд (127 байтов)m1:илиm1:…;не более 35-40 команд (-128 байтов)	JMP	m1__________________________	LEA		BX,m1	JMP	BX		;адрес перехода

Слайд 13Команда безусловного перехода JMP
Переходы на разные метки (в зависимости от

содержимого SI)
Сегмент данных:
addr DW m1
DW m2
Сегмент кода:
cycl:
MOV SI,0
JMP addr[SI] ;адрес перехода в слове памяти addr+(SI)

MOV SI,2
JMP cycl
m1:

m2:
______________________
Сегмент данных:
addr DW m1
Сегмент

кода:
LEA SI,addr
JMP NEAR PTR[SI] ;адрес перехода в ячейке памяти addr
… ;модификатор NEAR PTR обязателен!
m1:
Команда безусловного перехода JMPПереходы на разные метки (в зависимости от содержимого SI)Сегмент данных:addr	DW	m1			DW	m2Сегмент кода:cycl:	MOV	SI,0	JMP	addr[SI]	;адрес перехода в слове

Слайд 14Команда безусловного перехода JMP
Межсегментные переходы
SEG_1 SEGMENT
JMP FAR PTR m2 ;здесь FAR

обязательно
m1 LABEL FAR
SEG_1 ENDS
SEG_2 SEGMENT
m2 LABEL FAR ;здесь FAR обязательно
JMP m1
________________________
DATA SEGMENT
addr_m1 DD m1 ;в поле addr_m1 значение смещения и
;адреса сегмента

метки m1
DATA ENDS
CODE_1 SEGMENT
JMP m1
CODE_1 ENDS
CODE_2 SEGMENT
m1 LABEL FAR
MOV AX,BX
CODE_2 ENDS
Команда безусловного перехода JMPМежсегментные переходыSEG_1	SEGMENT			JMP	FAR  PTR  m2	;здесь FAR обязательноm1		LABEL		FARSEG_1	ENDSSEG_2	SEGMENTm2		LABEL		FAR			;здесь FAR обязательно			JMP	m1	________________________DATA	SEGMENTaddr_m1	DD		m1		;в поле addr_m1 значение смещения

Слайд 15Команда безусловного перехода JMP
Косвенный регистровый межсегментный переход
DATA SEGMENT
addr_m1 DD m1 ;в поле addr_m1 значение

смещения и
;адреса сегмента метки m1
DATA ENDS
CODE_1 SEGMENT

LEA BX,addr_m1
JMP DWORD PTR [BX]

CODE_1 ENDS
CODE_2 SEGMENT

m1 LABEL FAR
MOV AX,BX

CODE_2 ENDS

Команда безусловного перехода JMPКосвенный регистровый межсегментный переходDATA	SEGMENTaddr_m1	DD		m1	;в поле addr_m1 значение смещения и 							;адреса сегмента метки m1DATA	ENDSCODE_1	SEGMENT…	LEA	BX,addr_m1	JMP	DWORD PTR

Слайд 16Процедуры
Команды, осуществляющие работу с контекстом:
CALL [модификатор] имя_процедуры – вызов процедуры

(подпрограммы). Команда CALL, подобно JMP, передает управление по адресу с

символическим именем имя_процедуры. При этом процессор загружает в стек текущее значение регистра IP, если процедура имеет параметр NEAR, или значение CS, а потом значение IP, еслм процедура имеет параметр FAR. После этого процессор загружает регистр IP (для NEAR) или пару регистров CS:IP (для FAR) адресом начала подпрограммы и выполняет команды процедуры до того момента, пока не встретит команду RET. Адрес возврата – это адрес команды, следующей после команды CALL.
RET [число] – возвратить управление вызывающей программе. Команда RET считывает адрес возврата из стека и загружает его в регистр CS и IP, тем самым возвращая управление на команду, следующую за командой CALL. [число] – необязательный параметр, обозначающий количество элементов, удаляемых из стека при возврате процедуры.
ПроцедурыКоманды, осуществляющие работу с контекстом:CALL [модификатор] имя_процедуры – вызов процедуры (подпрограммы). Команда CALL, подобно JMP, передает управление

Слайд 17Процедуры
Процедуру с атрибутом NEAR можно вызвать косвенно, используя переменную размером

в слово:
CALL WORD PTR [BX]
CALL WORD PTR [BX][SI]
CALL WORD PTR variabl_name
CALL WORD PTR variabl_name[BX]
CALL MEM_WORD
CALL WORD

PTR ES:[BX] [SI]

Процедуру с атрибутом FAR можно вызвать косвенно, используя переменную размером в двойное слово:
CALL DWORD PTR [BX]
CALL MEM_DWORD
CALL WORD PTR SS: variabl_name [SI]
ПроцедурыПроцедуру с атрибутом NEAR можно вызвать косвенно, используя переменную размером в слово:	CALL	WORD PTR [BX]	CALL	WORD PTR [BX][SI]	CALL	WORD PTR

Слайд 18Условные переходы
МП имеет 18 команд условного перехода, позволяющие проверить:
отношение между

операндами со знаком («больше-меньше»);
отношение между операндами без знака («выше-ниже»);
состояниями арифметических

флагов ZF,SF,CF,OF,PF (но не AF).
Источниками такого условия могут быть:
любая команда, изменяющая состояние арифметических флагов;
команда сравнения CMP, сравнивающая значение двух операндов;
состояние регистра СХ.

Синтаксис:
JX близкая_метка
Х – модификатор, состоящий из одной, двух или трех букв. Запись операнда близкая_метка подчеркивает, что метка перехода должна находиться только в пределах текущего сегмента кода; межсегментной передачи управления в условных переходах не допускается.
Условные переходыМП имеет 18 команд условного перехода, позволяющие проверить:отношение между операндами со знаком («больше-меньше»);отношение между операндами без

Слайд 19Команда сравнения CMP
Подобно команде SUB команда СМР вычитает операнд-источник из

операнда-приемника и в зависимости от результата устанавливает или обнуляет флаги.

В отличие от команды SUB команда СМР не сохраняет результат вычитания.
Команда сравнения CMPПодобно команде SUB команда СМР вычитает операнд-источник из операнда-приемника и в зависимости от результата устанавливает

Слайд 20Перечень команд условного перехода для команды СМР оп_1 оп_2

Перечень команд условного перехода для команды СМР оп_1 оп_2

Слайд 21Базово-индексная адресация со смещением
Программа, которая обнуляет поле pole_m длиной n

байт
.DATA
n EQU 50
pole_m DB n DUP(?)
.CODE
XOR BX,BX
M1: MOV pole_m[BX],0
INC BX
CMP BX,n
JNE m1
Exit:
_______________
.DATA
mas DB DUP (?)
.CODE

CMP mas[SI],5 ;сравнить очередной элемент массива с 5
JE eql ;переход, если элемент

mas равен 5
JL low ; переход, если элемент mas меньше 5
JG grt ; переход, если элемент mas больше 5

Базово-индексная адресация со смещениемПрограмма, которая обнуляет поле pole_m длиной n байт.DATAn				EQU	50pole_m		DB	n DUP(?).CODE				XOR	BX,BXM1:			MOV	pole_m[BX],0				INC	BX				CMP	BX,n				JNE	m1Exit:_______________.DATAmas		DB	DUP (?).CODE…				CMP	mas[SI],5	;сравнить очередной элемент массива с

Слайд 22Команды условного перехода и флаги

Команды условного перехода и флаги

Слайд 23Команды условного перехода и регистр СХ
Архитектура МП предполагает специфическое использование

многих регистров. Регистр СХ также имеет определенное функциональное назначение –

он выполняет роль счетчика в командах управления циклами и при работе с цепочками символов.
Синтаксис этой команды условного перехода:
JCXZ метка_перехода – переход, если СХ=0;
Эту команду очень удобно использовать при организации цикла и при работе с цепочками символов. Нужно отметить ограничение, свойственное команде JCXZ. В отличие от других команд условной передачи управления, команда JCXZ может адресовать только короткие переходы – на –128 байт или на +127 байт от следующей за ней командой.
Команды условного перехода и регистр СХАрхитектура МП предполагает специфическое использование многих регистров. Регистр СХ также имеет определенное

Слайд 24Организация циклов
В МП существует три команды для управления циклом:
LOOP метка_перехода –

повторить цикл.
Команда выполняет следующие действия:
декремент регистра СХ;
сравнение регистра СХ с

нулем:
если СХ > 0, то управление передается на метку перехода;
если СХ = 0, то управление передается на следующую после LOOP команду.
LOOPE/ LOOPZ метка_перехода – повторить цикл пока СХ <> 0 или ZF=0.
Команда выполняет следующие действия:
декремент регистра СХ;
сравнение регистра СХ с нулем;
анализ состояния флага нуля ZF:
если СХ > 0 и ZF=1, управление передается на метку перехода;
если СХ = 0 или ZF=0, управление передается на следующую после LOOP команду.
Организация цикловВ МП существует три команды для управления циклом:LOOP	метка_перехода – повторить цикл.Команда выполняет следующие действия:декремент регистра СХ;сравнение

Слайд 25Организация циклов
LOOPNE/LOOPNZ метка_перехода – повторить цикл пока СХ 0 или

ZF=1.
Команда выполняет следующие действия:
декремент регистра СХ;
сравнение регистра СХ с нулем;
анализ

состояния флага нуля ZF:
если СХ > 0 и ZF=0, управление передается на метку перехода;
если СХ = 0 или ZF=1, управление передается на следующую после LOOP команду.

Недостаток команд организации цикла в том, что они реализуют только короткие переходы.
Организация цикловLOOPNE/LOOPNZ	метка_перехода – повторить цикл пока СХ 0 или ZF=1.Команда выполняет следующие действия:декремент регистра СХ;сравнение регистра СХ

Слайд 26Команды управления флагами
Команды STC (SeT Carry flag – установить флаг

переноса) и CLC (CLear Carry flag – обнулить флаг переноса)

переводят флаг CF в состояние 0 или 1 соответственно. Команда CMC (Complement Carry flag – обратить флаг переноса) переводит флаг CF в состояние 0, если он имел состояние 1, и наоборот.
Команды STD (SeT Direction flag – установить флаг направления) и CLD (CLear Direction flag – обнулить флаг направления) переводят флаг CF в состояние 0 или 1 соответственно.
Команда CLI (clear interrupt flag – обнулить флаг прерываний) обнуляет флаг IF, что заставляет МП игнорировать маскируемые прерывания, инициируемые внешними устройствами системы. Команда SТI (set interrupt flag – установить флаг прерываний) переводит флаг IF в состояние 1, что разрешает МП реагировать на прерывания, инициируемые внешними устройствами системы.
Команды управления флагамиКоманды STC (SeT Carry flag – установить флаг переноса) и CLC (CLear Carry flag –

Слайд 27Команды внешней синхронизации
Команда HLT (halt - остановиться) переводит МП в

состояние останова, при котором он находится на холостом ходу и

не выполняет никакие команды. Микропроцессор выходит из состояния останова только в том случае, если его заново инициировать или он получил внешнее прерывание, немаскируемое или маскируемое (если флаг IF=1).
Команда WAIT (wait – ожидать) также переводит МП на холостой ход, но при этом через каждые пять тактов он проверяет активность входной линии по имени TEST.
Команда ESC (escape - убежать) заставляет МП извлечь содержимое указанного в ней операнда и передать его на шину данных. Формат команды:
ESC внешний_код, источник
где внешний_код – 6-битовый непосредственный операнд, а источник – регистр или переменная. Команда ESC часто используется для передачи команд математическому сопроцессору.
Команда NOP (no operation – нет операции) не выполняет никакой операции, а только увеличивает значение указателя команд IP.

Команды внешней синхронизацииКоманда HLT (halt - остановиться) переводит МП в состояние останова, при котором он находится на

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика