Дипломированных специалистов «Информатика и вычислительная техника»



Download 12,06 Mb.
Pdf ko'rish
bet125/357
Sana22.02.2022
Hajmi12,06 Mb.
#115195
TuriДиплом
1   ...   121   122   123   124   125   126   127   128   ...   357
Bog'liq
assembler uchebnik dlya vuzov 2-e izd YuRXUW1

Безусловные переходы
Предыдущее обсуждение выявило некоторые детали механизма перехода. Коман-
ды перехода модифицируют регистр указателя команды EIP/IP и, возможно, сег-
ментный регистр кода CS. Что именно должно подвергнуться модификации,
зависит:


Безусловные переходы
от типа операнда в команде безусловного перехода (ближний или дальний);
от модификатора, который указывается перед адресом перехода в команде пе-
рехода и может принимать следующие значения (сам адрес при прямом пере-
ходе находится непосредственно в команде, а при косвенном — в регистре или
ячейке памяти):
PTR — прямой переход на метку внутри текущего сегмента кода, при
этом модифицируется только регистр EIP/IP (в зависимости от заданного
типа сегмента кода
или use32) на основе указанного в команде адреса
(метки) или выражения, использующего символ извлечения значения счет-
чика адреса команд ($);
П FAR PTR — прямой переход на метку в другом сегменте кода, при этом адрес
перехода задается в виде непосредственного операнда или адреса (метки)
и состоит из 16-разрядного селектора и 16/32-разрядного смещения, кото-
рые загружаются, соответственно, в регистры CS и EIP/IP;
D WORD PTR — косвенный переход на метку внутри текущего сегмента кода, при
этом модифицируется (значением смещения размером 16 или 32 бита из
памяти по указанному в команде адресу или из регистра) только регистр
EIP/IP;
D DWORD PTR — косвенный переход на метку в другом сегменте кода, при этом
модифицируются (значением из памяти — и только из памяти, из регистра
нельзя) оба регистра, CS и EIP/IP (первое слово/двойное слово адреса пере-
хода, представляющее собой смещение, загружается в EIP/IP; второе/третье
слово — в CS).
Команда безусловного перехода
Синтаксис команды безусловного перехода без сохранения информации о точке
возврата:
[модификатор] адрес_перехода
Здесь адрес_перехода представляет метку или адрес области памяти, в которой
находится указатель перехода.
Всего в системе команд процессора есть несколько кодов машинных команд
безусловного перехода JMP. Их различия определяются дальностью перехода
и способом задания целевого адреса. Дальность перехода определяется местопо-
ложением операнда адрес_перехода. Этот адрес может находиться в текущем сег-
менте кода или в некотором другом сегменте. В первом случае переход называется
внутрисегментным,
 близким, во втором — межсегментным, или
Внутрисегментный переход предполагает, что изменяется только содержимое
регистра EIP/IP. Можно выделить три варианта
использования
команды
к прямой короткий переход;
К прямой переход;
косвенный переход.


 Глава
Команды передачи управления
Прямой короткий внутрисегментный переход применяется, когда расстояние
от команды JMP до адреса перехода не превышает
или
байт. В этом слу-
чае транслятор ассемблера формирует машинную команду безусловного перехода
длиной всего два байта (размер обычной команды внутрисегментного безуслов-
ного перехода составляет три байта). Первый байт в этой команде — код операции,
значение которого говорит о том, что процессор должен особым образом тракто-
вать второй байт команды. Значение второго байта вычисляется транслятором как
разность между значением смещения команды, следующей за JMP, и значением
адреса перехода. При осуществлении прямого короткого перехода нужно иметь
в виду следующий важный момент, связанный с местоположением адреса перехо-
да и самой команды JMP. Если адрес перехода расположен до команды
то ас-
семблер формирует короткую команду безусловного перехода без дополнитель-
ных указаний. Если адрес перехода расположен после команды
транслятор не
может сам определить, что переход короткий, так как у него еще нет информации
об адресе перехода. Для оказания помощи компилятору в формировании команды
короткого безусловного перехода в дополнение к ранее упомянутым модификато-
рам используют модификатор SHORT PTR:
short ptr ml
;не
35-40 команд (127 байт)
Еще вариант:
m l :
более
команд (-128 байт)
jmp ml
Прямой внутрисегментный переход отличается от прямого короткого внутри-
сегментного перехода тем, что длина машинной команды
в этом случае состав-
ляет три байта. Увеличение длины связано с тем, что поле адреса перехода в ма-
шинной команде JMP расширяется до двух байтов, а это, в свою очередь, позволяет
производить переходы в пределах 64 Кбайт относительно следующей за
ко-
манды:
более 128 байт и менее 64 Кбайт
jmp ml
Косвенный внутрисегментный переход подразумевает «косвенность» задания
адреса перехода. Это означает, что в команде указывается не сам адрес перехода,
а место, где он «лежит». Приведем несколько примеров, в которых двухбайтовый
адрес перехода выбирается либо из регистра, либо из области памяти:
lea
jmp bx ;адрес перехода в регистре
ml:
ml


Безусловные переходы
jmp
перехода в ячейке памяти
Еще несколько вариантов косвенного внутрисегментного перехода:
<3>addr dw ml
<4> dw m2
mov
jmp
перехода в слове памяти
mov
jmp
В этом примере одна команда
(строка 10) может выполнять переходы на
разные метки. Выбор конкретной метки перехода определяется содержимым ре-
гистра SI. Операнд команды
определяет адрес перехода косвенно после вычис-
ления выражения addr+(SI).
<3>addr dw ml
<6>...
<7> lea
<8> jmp near
перехода в ячейке памяти addr
В данном случае указание модификатора
PTR
так как, в отли-
чие от предыдущего способа, адрес ячейки памяти addr с адресом перехода транс-
лятору передается неявно (строки 3, 7 и 8),
не имея информации о метке, он не
может определить, какой именно переход осуществляется — внутрисегментный или
межсегментный. Межсегментный переход предполагает другой формат машинной
команды
Р. При осуществлении межсегментного перехода кроме регистра EIP/IP
модифицируется также регистр CS. Аналогично внутрисегментному переходу, меж-
сегментный переход поддерживают два варианта команд безусловного перехода:
прямой и косвенный.
Команда прямого межсегментного перехода имеет длину пять байтов, из кото-
рых два байта составляют значение смещения и два байта — значение сегментной
составляющей адреса:
seg_l segment
jmp far ptr m2 ;здесь far обязательно
ml
far
seg_l ends


 Глава
Команды передачи управления
seg_2 segment
label far
jmp ml ;здесь far необязательно
Рассматривая этот пример, обратите внимание на модификатор FAR PTR в ко-
манде
Его необходимость объясняется все той же логикой работы однопро-
ходного транслятора. Если описание метки (метка ml) встречается в исходном тек-
сте программы раньше, чем соответствующая ей команда перехода, то задание
модификатора необязательно, так как транслятор все знает о данной метке и сам
формирует нужную пятибайтовую форму команды безусловного перехода. В слу-
чае, когда команда перехода встречается до описания соответствующей метки,
транслятор не имеет еще никакой информации о метке, и модификатор FAR PTR
в команде
опускать нельзя, так как транслятор не знает, какую форму коман-
ды формировать — трехбайтную или
Без специального указания мо-
дификатора транслятор будет формировать трехбайтную команду внутрисегмент-
ного перехода.
Команда косвенного межсегментного перехода в качестве операнда имеет адрес
области памяти, в которой содержатся смещение и сегментная часть целевого ад-
реса перехода:
data segment
dd ml
поле
значения смещения
;и адреса сегмента метки ml
data ends
code_l segment
jmp ml
code_l ends
code_2 segment
ml label far
code_2 ends
Как вариант косвенного межсегментного перехода необходимо отметить кос-
венный регистровый межсегментный переход. В этом виде перехода адрес перехо-
да указывается косвенно — в регистре. Это очень удобно для программирования
динамических переходов, в которых адрес перехода может изменяться на стадии
выполнения программы:
data segment
addr_ml dd ml ;в поле
значения смещения
;и адреса сегмента метки ml
data ends
code_l segment
lea
jmp
ptr[bx]
code_l ends
code_2 segment
ml label far
mov
code 2 ends


Безусловные переходы
Таким образом, модификаторы SHORT PTR, NEAR PTR и WORD PTR применяются
для организации внутрисегментных переходов, a FAR PTR и DWORD PTR — межсег-
ментных.
Для полной ясности нужно еще раз подчеркнуть, что если тип сегмента — use32,
то в тех местах, где речь шла о регистре IP, можно использовать регистр EIP и, соот-
ветственно, размеры полей смещения увеличить до 32 битов.

Download 12,06 Mb.

Do'stlaringiz bilan baham:
1   ...   121   122   123   124   125   126   127   128   ...   357




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish