Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Короткий относительный переход




КОМАНДЫ БЕЗУСЛОВНОГО ПЕРЕХОДА JMP

КОМАНДА СРАВНЕНИЯ CMP

CWD – расширение слова в двойное слово

 

DX AX>0

┌┬─────┬────┐

┌────────┐ ┌────────┐

│00.....0│ │0.......│

└────────┘ └────────┘

 

Пример:

 

A^2 - B^3 + 3*C B^3 - X/4

X = --------------- Y = ----------

2*A^2 - C A

 

sseg segment stack 'stack'

db 64 dup(0)

sseg ends

dseg segment

a db -3

b db 5

c db 2

x db?

y db?

dseg ends

cseg segment

assume ss:sseg,ds:dseg,cs:cseg

;Директива assume определяет сегментные регистры

;с помощью которых будет выполняться адресация

;к сегментам программы

lab1 proc far

;главную программу будем оформлять в виде

;дальней процедуры

push ds; необходимы для

sub ax,ax; возвращения (mov ax,0)

push ax; в ДОС.

;++++++++++++++++++++++++++++++++++++++++++++++++++

mov ax,dseg; инициализация

mov ds,ax; регистра ds

;++++++++++++++++++++++++++++++++++++++++++++++++++

;В регистр DS заносится адрес сегмента

;данных параграфа. В этом случае

;DS установлен на начало сегмента данных

;Две команды, потому что команды mov ds,dseg

;не существует

;При запуске exe-файла ОС в сегментные

;регистры ds и es заносит адрес PSP, т.е.

;эти регистры не инициализированы

;В сегментный регистр ss заносится адрес

;при наличии параметра stack. В нашем

;случае ss инициализирован

;Сегментный регистр cs инициализируется

;всегда ОС.

mov al,a

imul al;al=a^2

mov bh,al;a^2->bh

mov al,b

imul al;al=b^2

imul b;al=b^3

mov bl,al;b^3->bl

mov al,3h

imul c;al=3*c

add al,bh;a^2+3c

sub al,bl;a^2-b^3+3c

mov ch,al

mov al,2

imul bh;2*a^2

sub al,c

mov cl,al;2*a^2-c

mov al,ch;\

cbw; в ax - числитель

idiv cl

mov x,al

;закончено вычисление 1-ой формулы

mov cl,4h

cbw

idiv cl;x/4

neg al;-x/4

add al.bl;b^3-x/4

cbw

idiv a

mov y,al

ret

lab1 endp

cseg ends

end lab1

;Последний end в поле операндов, которое соответствует

;стартовому адресу программы. В данном случае это начало

;процедуры или адрес 1-ой команды программы. Относительно

;начала сегмента этот адрес равен 0, поэтому в регистр IP

;заносится 0.

Если будет указано другое имя, то программа начнет выполняться с команды, адрес которой соответствует этому имени. В этом случае стартовый адрес <> 0.

 

 

 

CMP OP1,OP2

Работает аналогично команде вычитания, однако результат формируется, но не записывается. По значению результата взводятся все 6 флагов. Позволяет сравнивать знаковые и беззнаковые операнды. Обычно после этой команды стоит команда условного перехода.

 

 

 

JMP MET

Рассмотрим два формата этой команды из 5 существующих.

 

 

Осуществляет переход в пределах от -128..127

Формат:

┌───────┐ ┌───────┐

│ KOP │ │ dispL │ – смещение

└───────┘ └───────┘

Для работы этой команды требуются метки.

 

0308 m1: mov al,cl

.......................

.......................

0321 jmp m1; 2 байта

0323 jmp m2; 2 байта

0325 mov al,5

.......................

.......................

033f m2: add al,cl

 

Рассмотрим формирование поля disp jmp m1

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

disp = (адрес m1)-(адрес след. команды)

 

0308h Короткий переход формируется, если число

- 0323h расположено в пределах от -128..127. В

-------- этом случае знаковый разряд и все биты

f f e5h старшего разряда совпадают

 

┌┬┬┬┬┬┬┬──────┐

┌────────┐ ┌────────┐

│11111111│ │11100101│

└────────┘ └────────┘

 

Старший байт разряда содержит распространение знакового разряда и поэтому может не использоваться.

В данном случае disp = e5h

Если смещение не укладывается в диапазон байта со знаком, то будет формироваться формат команды jmp, которая называется "внутрисегментным переходом".

Рассмотрим алгоритм выполнения команды:

 

JMP M1

IP = 0323h

disp = E5h – команда вычисляет адрес перехода, который всегда 16-ти разрядный, поэтому необходимо выполнить расширение смещения до слова, как это делает команда CBW.

При расширении:

┌───┬───┐

disp │ FF│ E5│

└───┴───┘

disp + IP = 0323h

FFE5h

-----

0308h = IP

Результат заносится в регистр IP.

Следующая команда выбираться по адресу 0308h. Все команды перехода изменяют естественный порядок следования команд.

В командах переходов используется относительная адресация: адрес перехода вычисляется относительно адреса следующей команды.

 

АДРЕСАЦИЯ – это способ вычисления адреса перехода или адреса операндов. В арифметико-логических командах вычисления – адреса операндов, а в командах перехода и управления – адреса переходов.

 

Пример: Вычисление транслятором смещения команды JMP M2

 

JMP M2

┌───────┐ ┌───────┐

│ KOП │ │ disp │

└───────┘ └───────┘

адрес М2 033Fh

адрес команды -0325h

--------------------

disp = 001Ah - в disp заносится мл. байт

 

Выполнение команды:

0325h – адрес следующей команды

+001Ah – disp

----------

033Fh – адрес перехода в IP

 

Запись команды JMP короткого и внутрисегментного перехода имеют один и тот же вид: т. е. JMP METКА.

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

 

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 410; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.