Главная » Просмотр файлов » В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования

В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования (1110549), страница 13

Файл №1110549 В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования (В.Г. Баула - Введение в архитектуру ЭВМ и системы программирования) 13 страницаВ.Г. Баула - Введение в архитектуру ЭВМ и системы программирования (1110549) страница 132019-04-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 13)

if op1 <отношение> op2 then goto L

где отношение – один из знаков операции отношения = (равно), <> (не равно), > (больше), < (меньше), <= (меньше или равно), >= (больше или равно). Если обозначить rez=op1–op2, то оператор условного перехода можно записать в эквивалентном виде сравнения с нулём

if rez <отношение> 0 then goto L

Все машинные команды условного перехода, кроме одной, вычисляют условие перехода, анализируя один, два или три флага из регистра флагов, и лишь одна команда условного перехода вычисляет условие перехода, анализируя значение регистра CX. Команда условного перехода в языке Ассемблер имеет вид

j<мнемоника перехода> i8; IP := (IP + i8)mod 216

Мнемоника перехода (это от одной до трёх букв) связана со значением анализируемых флагов (или регистра CX), либо со способом формирования этих флагов. Чаще всего программисты формируют флаги, проверяя отношение между двумя операндами op1 <отношение> op2, для чего выполняется команда вычитания или команда сравнения. Команда сравнения имеет мнемонический код операции cmp и такой же формат, как и команда вычитания:

cmp op1,op2

Она и выполняется точно так же, как команда вычитания за исключением того, что разность не записывается на место первого операнда. Таким образом, единственным результатом команды сравнения является формирование флагов, которые устанавливаются так же, как и при выполнении команды вычитания. Вспомним, что программист может трактовать результат вычитания (сравнения) как производимый над знаковыми или же беззнаковыми числами. Как мы уже знаем, от этой трактовки зависит и то, будет ли один операнд больше другого или же нет. Так, например, рассмотрим два коротких целых числа 0FFh и 01h. Как знаковые числа 0FFh = -1 < 01h = 1, а как беззнаковые числа 0FFh = 255 > 01h = 1.

Исходя из этого, принята следующая терминология: при сравнении знаковых целых чисел первый операнд может быть больше (greater) или меньше (less) второго операнда. При сравнении же беззнаковых чисел будем говорить, что первый операнд выше (above) или ниже (below) второго. Ясно, что действию "выполнить переход, если первый операнд больше второго" будут соответствовать разные машинные команды, если трактовать операнды как знаковые или же беззнаковые целые числа. Это учитывается в различных мнемониках этих команд.

Ниже в Таблице 7.1 приведены мнемоники команд условного перехода. Некоторые команды имеют разную мнемонику, но выполняются одинаково (переводятся программой Ассемблера в одну и ту же машинную команду), такие команды указаны в одной строке таблицы.

Таблица 7.1. Мнемоника команд условного перехода

КОП

Условие перехода

Логическое условие перехода

Результат (rez) команды вычитания или cоотношение операндов op1 и op2 команды сравнения

je

jz

ZF = 1

Rez = 0 или op1 = op2

(результат = 0, операнды равны)

jne

jnz

ZF = 0

rez <> 0 или op1 <> op2

Результат <> 0, операнды не равны

jg

jnle

(SF=OF) and (ZF=0)

rez > 0 или op1 > op2

Знаковый результат > 0, op1 больше op2

jge

jnl

SF = OF

rez >= 0 или op1 >= op2

Знаковый результат >= 0, т.е.

op1 больше или равен (не меньше) op2

jl

jnge

SF <> OF

rez < 0 или op1 < op2

Знаковый результат < 0, т.е.

op1 меньше (не больше или равен) op2

jle

jng

(SF<>OF) or (ZF=1)

rez <= 0 или op1 <= op2

Знаковый результат <= 0, т.е.

op1 меньше или равен(не больше) op2

ja

jnbe

(CF=0) and (ZF=0)

rez > 0 или op1 > op2

Беззнаковый результат > 0, т.е.

op1 выше (не ниже или равен) op2

jae

jnb

jnc

CF = 0

rez >= 0 или op1 >= op2

Беззнаковый результат >= 0, т.е.

op1 выше или равен (не ниже) op2

jb

jnae

jc

CF = 1

rez < 0 или op1 < op2

Беззнаковый результат < 0, т.е.

op1 ниже (не выше или равен) op2

jbe

jna

(CF=1) or (ZF=1)

rez >= 0 или op1 >= op2

Беззнаковый результат >= 0, т.е.

op1 ниже или равен (не выше) op2

js

SF = 1

Знаковый бит разультата (7-й или 15-ый, в зависимости от размера) равен единице

jns

SF = 0

Знаковый бит разультата (7-й или 15-ый, в зависимости от размера) равен нулю

jo

OF = 1

Флаг переполнения равен единице

jno

OF = 0

Флаг переполнения равен нулю

jp

jpe

PF = 1

Флаг чётности 1 равен единице

jnp

jpo

PF = 0

Флаг чётности равен единице

jcxz

CX = 0

Значение регистра CX равно нулю

В качестве примера рассмотрим, почему условному переходу jl/jnge соответствует логическое условие перехода SF<>OF. При выполнении команды сравнения cmp op1,op2 или команды вычитания sub op1,op2 нас будет интересовать трактовка операндов как знаковых целых чисел, поэтому возможны два случая, когда первый операнд меньше второго. Во-первых, если при выполнении операции вычитания op1-op2 результат получился правильным, т.е. не было переполнения (OF=0), то бит знака у правильного результата равен единице (SF=1). Во-вторых, при вычитании мог получиться неправильный результат, т.е. было переполнение (OF=0), но в этом случае знаковый бит результата будет неправильным, т.е. равным нулю. Видно, что в обоих случаях эти два флага не равны друг другу, т.е. должно выполняться условие SF<>OF, что и указано в нашей таблице. Для тренировки разберите правила формирования и других условий переходов.

Как видим, команд условного перехода достаточно много, поэтому понятно, почему для них реализован только один формат – близкий короткий относительный переход. Реализация других форматов команд условного перехода привела бы к резкому увеличению числа команд в языке машины и, как следствие, к усложнению центрального процессора и росту объёма программ. В то же время наличие только одного формата команд условного перехода может приводить к плохому стилю программирования. Пусть, например, надо реализовать на Ассемблере условный оператор языка Паскаль

if X>Y then goto L;

Соответствующий фрагмент на языке Ассемблера, реализующий этот оператор для знаковых X,Y

mov ax,X

cmp ax,Y

jg L

. . .

L:

может быть неверным, если расстояние между меткой и командой условного перехода велико (не помещается в байт). В таком случае придётся использовать такой фрагмент на Ассемблере со вспомогательной меткой L1 и вспомогательной командой безусловного перехода:

mov ax,X

cmp ax,Y

jle L1

jmp L

L1:

. . .

L:

Таким образом, на самом деле мы вынуждены реализовывать такой фрагмент программы на языке Паскаль:

if X<=Y then goto L1; goto L; L1:;

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

В качестве примера использования команд условного перехода рассмотрим программу, которая вводит знаковое число A в формате слова и вычисляет значение X по формуле

include io.asm

; файл с макроопределениями для макрокоманд ввода-вывода

data segment

A dw ?

X dw ?

Diagn db ′Ошибка – большое значение!$′

Data ends

Stack segment stack

db 128 dup (?)

stack ends

code segment

assume cs:code, ds:data, ss:stack

start:mov ax,data; это команда формата r16,i16

mov ds,ax ; загрузка сегментного регистра DS

inint A ; ввод целого числа

mov ax,A ; ax := A

mov bx,ax ; bx := A

inc ax ; ax := A+1

jo Error

cmp bx,2 ; Сравнение A и 2

jle L1 ; Вниз по первой ветви вычисления X

dec bx ; bx := A-1

jo Error

imul bx ; (dx,ax):=(A+1)*(A-1)

jo Error ; Произведение (A+1)*(A-1) не помещается в ax

L: mov X,ax ; Результат берётся только из ax

outint X; Вывод результата

newline

finish

L1: jl L2; Вниз по второй ветви вычисления X

mov ax,4

jmp L; На вывод результата

L2: mov bx,7; Третья ветвь вычисления X

cwd ; (dx,ax):= длинное (A+1) – иначе нельзя!

idiv bx; dx:=(A+1) mod 7, ax:=(A+1) div 7

mov ax,dx

jmp L; На вывод результата

Error:mov dx,offset Diagn

outstr

newline

finish

code ends

end start

В нашей программе мы сначала закодировали вычисление по первой ветви нашего алгоритма, затем по второй и, наконец, по третьей. Программист, однако, может выбрать и другую последовательность кодирования ветвей, это не влияет на суть дела. В нашей программе предусмотрена выдача аварийной диагностики, если результаты операций сложения (A+1), вычитания (A-1) или произведения (A+1)*(A-1) слишком велики и не помещается в одно слово.

Для увеличения и уменьшения операнда на единицу мы использовали команды

inc op1 и dec op1

Здесь op1 может иметь формат r8, r16, m8 и m16. Например, команда inc ax эквивалентна команде add ax,1 , но не меняет флага CF. Таким образом, после этих команд нельзя проверить флаг переполнения, чтобы определить, правильно ли выполнились такие операции над беззнаковыми числами.

Обратите также внимание, что мы использовали команду длинного деления, попытка использовать здесь короткое деление, например

L2: mov bh,7; Третья ветвь вычисления X

idiv bh; ah:=(A+1) mod 7, al:=(A+1) div 7

может привести к ошибке. Здесь остаток от деления (A+1) на число 7 всегда поместится в регистр ah, однако частное (A+1) div 7 может не поместиться в регистр al (пусть A=27999, тогда (A+1) div 7 = 4000 – не поместится в регистр al).

Характеристики

Тип файла
Документ
Размер
1,73 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6508
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее