КАТЕГОРИИ: Архитектура-(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; Просмотров: 417; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |