Главная » Просмотр файлов » Учебное пособие по ОЭВМ

Учебное пособие по ОЭВМ (775573), страница 2

Файл №775573 Учебное пособие по ОЭВМ (Учебное пособие по ОЭВМ) 2 страницаУчебное пособие по ОЭВМ (775573) страница 22017-06-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Двоичное представление op1 сдвигается вправо на op2 разрядов. Освобождающиеся разряды заполняются 0.

ASL (арифметический сдвиг влево) op1 ASL op2

Двоичное представление op1 сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются 0.

ASR (арифметический сдвиг вправо) op1 ASR op2

Двоичное представление op1 сдвигается вправо на op2 разрядов. Знаковый разряд (старший разряд) дублируется.

ROL (циклический сдвиг влево) op1 ROL op2

Двоичное представление op1 циклически сдвигается влево на op2 разрядов. Освобождающиеся разряды заполняются выдвигаемыми разрядами.

ROR (циклический сдвиг вправо) op1 ROR op2

Двоичное представление op1 циклически сдвигается вправо на op2 разрядов. Освобождающиеся разряды заполняются выдвигаемыми разрядами.

8. Приоритеты и порядок выполнения операций

Для каждой группы операций в нижеследующей таблице приоритетов операций приоритеты одинаковы. Операции с большим значением приоритета выполняются в первую очередь. Чем выше приоритет группы операций, тем выше она расположена в таблице.

Таблица 1. Приоритеты операций

9 NOT COM

8 * / %

7 + -

6 SHL SHR ROR ROL ASR ASL

5 > >= < <=

4 = <>

3 AND

2 XOR

1 OR

Все операции с одинаковыми приоритетом выполняются справа налево. Можно группировать операции с помощью скобок. Операции в скобках будут выполняться в первую очередь.

9. Арифметические преобразования в выражениях

1. Если операнды в выражениях имеют различный размер (размер операнда зависит от типа, о типах см. ниже), то все результаты операций приводятся к большему размеру.

2. При выполнении присваивания значение выражения преобразуется к размеру переменной, которой оно присваивается.

3. Уменьшение размера значения производится путем отбрасывания старших битов и никаких диагностических сообщений при этом не выводится.

10. Типы языка MCL

Тип - простая переменная:

Простые переменные предназначены для использования в программе там, где не обязательно явное указание размера переменной - управляющие переменные циклов, счетчики и т.п. Описание простой переменной производится с помощью оператора VAR и синтаксис его определяется следующим правилом:

VAR , ... ;

Например:

VAR i,j,simple_var; - описаны три простых переменных.

Простые переменные имеют предопределенный размер 16 битов и интерпретируются как целые без знака. Кроме получения значения простой переменной, возможно получение значения определенного разряда или группы разрядов.

Например:

j - значение переменной j;

j[3..3] - значение 3-го разряда переменной j;

i[0..7] - значение восьми младших разрядов переменной j.

Тип - регистр:

Регистры используются там, где необходимо точно определить размер переменной. Регистры могут иметь произвольный размер в пределах от 1 до 32 разрядов. Описание регистра производится с помощью оператора REG. Синтаксис описания регистров определяется следующим правилом:

REG [ ] , ... ;

Например:

reg ra[8], rb[8], f_zero[1], mul_res[32];

- описаны два восьмиразрядных регистра ra и rb, одноразрядный регистр f_zero и тридцатидвухразрядный регистр mul_res. Константа описывает размерность регистра.

Использование регистров полностью идентично использованию простых переменных. Так же возможно как получение значения всего регистра, так и получение значения его части.

Например:

ra - значение регистра ra; rb[7..7] - значение старшего бита регистра rb;

mul_reg[16..31] - значение старшей половины регистра mul_reg.

Тип - структура:

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

STRUCT [ ] [],.. ;

Например:

STRUCT rk[32] kop[16], r1[4], m1[4], r2[4], m2[4];

в этом примере описана 32-х разрядная структура rk с полями kop-[0..15], r1[16..19], m1[20..23], r2[24..27], m2[28..31]. Обратите внимание, что выделение полей в структуре производится начиная с младшего бита (т.е. от младших битов к старшим). Использование структур аналогично использованию регистров, но добавляется еще один метод доступа к значению группы бит - с помощью имени поля,

например:

rk - значение структуры rk;

rk[0..15] - значение младшей половины структуры rk;

rk.kop - то же самое, что и в предыдущем примере, но с использованием имени поля.

Тип - память:

Память представляет собой одномерный массив регистров. Ячейки памяти могут, как и регистры, иметь произвольный размер в пределах 1..32 разряда. Максимальный размер памяти 1024 (1K) ячеек. Индексация ячеек производится от 0. Описание памяти производится с помощью оператора MEM. Синтаксис описания памяти определяется следующим правилом:

[] ],...;

Где первая константа определяет количество ячеек в памяти, а вторая - разрядность ячейки.

Например:

MEM mb[32][8] - описана память mb с числом ячеек 32 и с разрядностью ячейки - 8 бит;

MEM ml[1024][32] - описана память ml с числом ячеек 1024 и с разрядностью ячейки 32 бита;

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

Например:

mb[5] - обращение к 6-й ячейке памяти mb (помните, что индексация ячеек начинается с 0);

ml[9,5..5] - обращение к 6-му разряду 10-й ячейки памяти ml;

ml[100,0..15]- обращение к младшей половине 101-й ячейки памяти ml.

11. Переменные языка MCL

Все переменные должны быть обязательно описаны перед ссылкой на них (неявное определение переменных не поддерживается). Максимальное число переменных, которые могут использоваться в программе одновременно составляет 100. Использование большего числа переменных приведет к ошибке. Как уже было отмечено выше, максимальная разрядность регистра или структуры - 32 разряда, а максимальное число ячеек памяти 1024.

12. Операторы языка MCL

Оператор - формат:

один оператор может занимать одну или более строк. Два или большее количество операторов могут находится на одной строке. Каждый оператор должен завершаться точкой с запятой.

Оператор - метка:

метка может стоять перед любым оператором, чтобы на этот оператор можно было перейти с помощью оператора GOTO или GOSUB. Метка состоит из идентификатора за которым стоит двоеточие. Один оператор может иметь несколько меток.

Оператор - присваивание: :=

оператор присваивания имеет следующий формат:

:= ;

Значение выражения вычисляется и присваивается переменной. В качестве переменной может использоваться любая допустимая ссылка на переменную.

Например:

ra:=15+rb/2; ml[1,2..4]:=0b111; mb[3]:=0;

rk.r1:=(ra[0..3]+rb[0..3]) ROL 2;

Оператор - безусловный переход: GOТО

оператор безусловного перехода имеет формат:

GOTO ;

Управление безусловно передается на оператор перед которым

стоит метка .

Оператор - вызов подпрограммы: GOSUB

оператор вызова подпрограммы имеет формат:

GOSUB ;

Управление передается на оператор перед которым стоит метка . Когда будет выполнен оператор RETURN, управление будет возвращено оператору следующему за GOSUB.

Например:

GOSUB SUBR;──────────────────┐ -Вызов ПП

WRITELN "MAIN PROG";<────────┼─┐ -Возврат из ПП

... │ │

... │ │

SUBR:<───────────────────────┘ │

WRITELN "SUBROUTIN"; │

RETURN;────────────────────────┘


Допускается вложение вызовов подпрограмм. Максимальный уровень вложенности - 16.

Оператор - возврат из подпрограммы: RETURN

оператор возврата из подпрограммы имеет формат:

RETURN;

Управление передается на оператор следующий за оператором GOSUB (см. пример выше).

Оператор - условный оператор: IF THEN

условный оператор имеет формат:

IF THEN ;

Сначала вычисляется значение и, если оно не равно 0, то выполняется оператор следующий за THEN. В противном случае выполняется следующий оператор. В качестве можно использовать любое (не обязательно логическое) выражение.

Например:

I:=1;

IF I THEN WRITELN "i<>0";

J:=0; IF I

PRINT "I>J";

LBL2:

END;

Результатом выполнения этой программы будет:

I<>0 I>J

Оператор - оператор цикла: FOR TO NEXT

оператор цикла имеет формат:

FOR :=TO; { } NEXT;

Переменной с именем присваивается значение , после чего выполняются все операторы до оператора NEXT. После этого к переменной прибавляется 1 и ее значение сравнивается с значением выражения . Если значение переменной больше значения выражения, то выполнение цикла прекращается и управление передается следующему за NEXT оператору, в противном случае опять выполняются все операторы до оператора NEXT и т.д. Допускается использование вложенных циклов. Максимальный уровень вложенности не должен превышать 16.

Замечание:

после выхода из цикла управляющая переменная имеет значение выражение2>+1 Цикл всегда выполняется хотя бы один раз (даже если больше ) Не рекомендуется для выхода из цикла использовать оператор GOTO, безусловный переход из тела цикла возможен только на конец программы.

Например:

FOR I:=0 TO 1023; ML[I]:=0; NEXT;

Оператор - пауза: PAUSE

оператор пауза имеет следующий формат:

PAUSE;

Этот оператор приостанавливает выполнение программы и выводит на терминал сообщение: "Приостановлено. Нажмите клавишу ENTER..." После нажатия клавиши ENTER выполнение программы возобновляется с оператора, следующего за оператором PAUSE.

Оператор - вывод: WRITE WRITELN

формат операторов вывода определяется следующими правилами:

оператор предназначен для вывода информации на терминал, выводимую информацию можно разделить на две части: пояснительный текст (строки в кавычках) и значения выражений.

Допускается три формата вывода значения выражений:

- двоичный (спецификатор формата $B),

- десятичный (спецификатор формата $D),

- шестнадцатеричный (спецификатор формата $H).

Указание спецификатора формата и длины поля вывода обязательно!

Следующая за спецификатором формата константа определяет размер поля вывода для значения выражения. При выводе значений в двоичной и шестнадцатеричной СС если размер поля больше, чем размер реально выводимого числа, то число дополняется слева нолями. При выводе значений в десятичной СС число дополняется слева пробелами. Если выводимое число больше по размеру, чем выделенное поле, то оно усекается слева.

Например:

I:=0HFFFF; {I:=65535}

WRITE $B32 I {На выходе> 00000000000000001111111111111111}

WRITE $B16 I {На выходе> 1111111111111111}

WRITE $B8 I {На выходу> 11111111}

WRITE $D7 I {На выходе> 65535}

WRITE $D5 I {На выходе> 65535}

WRITE $D1 I {На выходе> 5}

WRITE $H6 I {На выходе> 00FFFF}

WRITE $H4 I {На выходе> FFFF}

WRITE $H2 I {На выходе> FF}

Оператор WRITELN отличается от оператора WRITE тем, что он добавляет к выводимой информации символ перевода на новую строку.

Оператор – ввод: READ

оператор предназначен для ввода значений любых переменных с терминала. Значения могут вводится в виде констант в любой СС. Вводимые значения автоматически преобразуются к требуемому размеру.

Например:

READ "A=",A; READ "RK.KOP=",RK.KOP,"RA.LSB=",RA[0..7];

READ "M[I]=",M[I];

Замечание:

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

Оператор - конец программы: END

Оператор служит для завершения выполнения программы. Имеет следующий формат:

END;

В общем случае этот оператор не обязателен (выполнение программы автоматически завершится после выполнения последнего оператора в тексте), но, тем не менее, желательно в любом случае использовать оператор END.

13. Переменные-флаги

Система представляет в распоряжение пользователя три предопределенные переменные-флага:

ZF - флаг ноля;

NF - флаг отрицательного значения;

CF - флаг переноса.

Можно сказать, что эти переменные описаны неявным образом как REG ZF[1],NF[1],CF[1]. Операции языка MCL могут изменить значение каждого из флагов. Рассмотрим назначение каждого флага более подробно.

Флаг ноля: ZF.

Если результат операции равен нолю, то этот флаг устанавливается в 1, в противном случае - 0. Все без исключения операции изменяют значение этого флага.

Флаг отрицательного значения: NF.

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

Флаг переноса: CF.

Этот флаг устанавливается в 1, если при выполнении операции сложения или вычитания возникает перенос из старшего разряда результата. В противном случае этот флаг устанавливается в 0. При определении значения этого флага учитывается длина операндов выполняемой операции. Логические операции (, =, <>, >=, <=, AND, OR, XOR, NOT) безусловно устанавливают этот флаг в 0. Операции сдвига помещают в этот флаг значение последнего "выдвигаемого" разряда.

Замечание:

следует четко понимать, что значение флагов изменяют именно операции, а оператор присваивания никакого влияния на флаги не оказывает. Т.e при выполнении оператора RA:=RB; значения флагов изменены не будут (поскольку не выполнялась ни одна операция), а при выполнении оператора M[I+1]:=0; значения флагов могут быть изменены, так как при вычислении индекса выполняется операция +.

14. Общие замечания

При написании программ на языке MCL рекомендуется следующая структура построения программы:

{Описание переменных} VAR ... REG ... MEM ... STRUCT ...

{Тело главной программы} ...

END {Конец главной программы}

SUB1: {Подпрограмма 1} ...

RETURN { Конец подпрограммы 1}

... {Определение других подпрограмм}

SUBN: {Подпрограмма N} ...

RETURN {Конец подпрограммы N}

То есть, сначала описываются все переменные. После описания переменных располагаются операторы основной программы, которые завершаются оператором END. А затем идут операторы используемых подпрограмм. Безусловно, такая структура построения программ не является догмой, но она является наиболее простой для восприятия, и способствует большей ясности программы.

15. Сообщения об ошибках интерпретатора языка MCL

В случае обнаружения шибки, интерпретация программы прекращается и выдается сообщение вида:

! ERROR ! в строке номер:

Ниже приведен полный список сообщений об ошибках, распознаваемых интерпретатором языка MCL. При необходимости даются дополнительные пояснения.

Синтаксическая ошибка - неизвестный символ.

При интерпретации программы встретился неизвестный интерпретатору символ.

Слишком длинное имя.

Превышена максимальная длина идентификатора (16 символов).

Слишком длинное число.

Превышена максимальная длина числа (32 символа).

Нет закрывающей кавычки в строке.

В строке вывода оператора WRITE(LN) не найдена закрывающая кавычка. Строка вывода не может содержать символ перевода каретки.

Не найден конец комментария.

Не найден символ '}', ограничивающий комментарий.

Слишком много меток.

В программе используется слишком много меток. Максимальное число меток, которое может быть использовано в программе - 100.

Повторное определение меток.

В программе используются метки с одинаковыми именами. Все метки должны иметь уникальные имена.

Неопределенная метка.

В программе используется ссылка на неопределенную метку.

Слишком много вложенных циклов.

В программе используется слишком глубокое вложение циклов. Максимальный уровень вложенности циклов - 16.

Слишком много вложенных вызовов ПП.

В программе используется слишком глубокое вложение вызовов подпрограмм. Максимальный уровень вложенности вызовов подпрограмм - 16.

Команда NEXT без команды FOR.

Команда RETURN без команды GOSUB.

Слишком много переменных.

В программе используется слишком много переменных. Максимальное число переменных в программе - 100.

Повторное определение переменной.

Попытка описать переменную, имя которой совпадает с именем уже описанной переменной. Все переменные должны иметь уникальные имена.

Неопределенная переменная.

В программе используются обращения к неописанным переменным.

Неверный размер памяти.

Про описании переменной типа "память" используется слишком большое значение числа ячеек. Максимально допустимое значение числа ячеек - 1024.

Неверная разрядность регистра.

При описании переменной типа регистр, структура или память используется слишком большое значение разрядности регистра. Максимально допустимое значение разрядности регистра - 32.

Неверный размер полей структуры.

При описании переменной типа структура суммарный размер полей структуры больше размера самой переменной.

Слишком большой индекс.

При обращении к переменной типа "память" значение индекса ячейки памяти превышает количество ячеек указанное при описании переменной.

Неверное использование индекса или имени поля.

Попытка использовать индекс или имя поля при обращении к простой переменной или регистру.

Неопределенное имя поля.

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

Диапазон превышает размеры переменной.

При обращении к диапазону переменной указанный размер диапазона превышает размер переменной.

Некорректное выражение.

Слишком сложное выражение.

Слишком много операндов в выражении.

Непарная скобка.

Неверный тип управляющей переменной цикла.

Управляющая переменная цикла не может быть переменной типа "память".

Неверный спецификатор формата.

Допустимы значения B,D,H.

Неверная длина поля в спецификаторе формата.

Допустимы значения 1..32.

Требуется "THEN".

Требуется имя переменной памяти.

Требуется имя простой переменной (типа VAR,REG или STRUCT).

Требуется ".." или "," или "]".

Требуется "..".

Требуется ":=".

Требуется "TO".

Требуется "," или ";".

Требуется "[".

Требуется "]".

Требуются идентификатор или команда.

Требуется ":" или ":=".

Требуется ";".

Требуется идентификатор.

Требуется константа.

Требуется индекс.

Арифметико-логические устройства ЭВМ и принципы их функционирования

Аннотация.

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

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

Лабораторная работа № 1. Моделирование функционирования АЛУ при выполнении операции сложения/вычитания над числами с фиксированной точкой

Содержание

Цель работы___________________________________________________________________________ 23

Функционирование АЛУ при выполнении операции сложения/вычитания___________________ 23

Моделирование функционирования АЛУ при выполнении операции сложения с использованием обратного кода__________________________________________________ 23

Моделирование функционирования АЛУ при выполнении операции сложения с использованием дополнительного кода____________________________________________ 24

Алгоритм алгебраического сложения/вычитания двоичных чисел___________________________25

Пример выполнения операции сложения__________________________________________________28

Контрольные вопросы__________________________________________________________________ 32

Содержание отчета______________________________________________________________________32

Задание к лабораторной работе___________________________________________________________32

Цель работы

изучение работы арифметико-логического устройства при выполнении операции сложения/вычитания двоичных чисел с фиксированной запятой при использовании модифицированного кода для определения переполнения разрядной сетки. Операция сложения/вычитания выполняется в арифметико-логическом устройстве (АЛУ).

Операция сложения/вычитания двоичных чисел с фиксированной запятой может быть выполнена с использованием прямого, обратного и дополнительного кода для представления слагаемых.

Операция вычитания в ЭВМ заменяется операцией сложения при использовании обратного и дополнительного кода. Отрицательные числа представляются в обратном и дополнительном кодах.

Функционирование АЛУ при выполнении операции сложения/вычитания

Моделирование функционирования АЛУ при выполнении операции сложения с использованием обратного кода

Чтобы получить обратный код отрицательного двоичного числа, необходимо значащие разряды проинвертировать, а в знаковый разряд поставить 1. При выполнении алгебраического суммирования с использованием обратного кода положительные числа представляются в прямом коде, отрицательные числа – в обратном и производится суммирование кодов чисел, включая знаковые разряды. При возникновении 1 переноса из знакового разряда она подсуммируется к младшему разряду результата. Если знаковый разряд результата равен 0, то результат положительный и представлен в прямом коде. Если знаковый разряд результата равен 1, то результат отрицателен и представлен в обратном коде. Рассмотрим на примере выполнение алгебраического суммирования чисел с фиксированнной точкой с использованием обратного кода. В качестве слагаемых возьмем 5-разрядные числа (4 информационных разряда и 1 разряд – знаковый): А=510, В=410. В двоичной системе счисления прямой код числа: Апр=00101, Впр=00100, и обратный код числа: Аобр=11010, Вобр=11011.

Пример 1.

Рассмотрим операцию алгебраического сложения: С=А+(-В).

В двоичной системе счисления положительные числа представляется в прямом коде, а отрицательные – в обратном. Следовательно, Апр=00101 и Вобр=11011. Производим операцию сложения:

Зн.

Инф. разр.

0

0101

1

1011

1 0

0000

1

единица переноса подсуммируется к младшему разряду

0

0001

В знаковом разряде результата 0, следовательно, результат положительный и представлен в прямом коде.

Пример 2.

Рассмотрим операцию алгебраического сложения: С=(-А)+В.

В двоичной системе счисления положительные числа представляется в прямом коде, а отрицательные – в обратном. Следовательно, Аобр=11010 и Впр=00100. Производим операцию сложения:

Зн.

Инф. разр.

1

1010

0

0100

1

1110

В знаковом разряде результата 1, следовательно, результат отрицательный и представлен в обратном коде. Прямой код результата Спр=10001(2)=-1(10).

Моделирование функционирования АЛУ при выполнении операции сложения с использованием дополнительного кода

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

Рассмотрим на примере выполнение алгебраического суммирования чисел с фиксированнной точкой с использованием дополнительного кода. В качестве слагаемых возьмем 5-разрядные числа (4 информационных разряда и 1 разряд – знаковый): А=510, В=410. В двоичной системе счисления прямой код числа: Апр=00101, Впр=00100, и дополнительный код числа: Адоп=11011, Вдоп=11100.

Пример 3.

Рассмотрим операцию алгебраического сложения: С=А+(-В).

В двоичной системе счисления положительные числа представляется в прямом коде, а отрицательные – в дополнительном. Следовательно, Апр=00101 и Вдоп=11100. Производим операцию сложения:

Зн.

Инф. разр.

0

0101

1

1100

0

0001

единица переноса отбрасывается

В знаковом разряде результата 0, следовательно, результат положительный и представлен в прямом коде.

Пример 4.

Рассмотрим операцию алгебраического сложения: С=(-А)+В.

В двоичной системе счисления положительные числа представляется в прямом коде, а отрицательные – в дополнительном. Следовательно, Адоп=11011 и Впр=00100. Производим операцию сложения:

Зн.

Инф. разр.

1

1011

0

0100

1

1111

В знаковом разряде результата 1, следовательно, результат отрицательный и представлен в дополнительном коде. Прямой код результата Спр=10001(2)=-1(10).

В ЭВМ отрицательные числа с фиксированной точкой в памяти хранятся либо в обратном, либо в дополнительном коде. В настоящее время наиболее часто используется дополнительный код, поэтому в лабораторной работе рассматривается алгоритм алгебраического сложения/вычитания двоичных чисел с фиксированной запятой при использовании дополнительного кода для представления слагаемых.

Алгоритм алгебраического сложения/вычитания двоичных чисел

с фиксированной запятой при использовании дополнительного кода для представления слагаемых.

Алгоритм алгебраического сложения/вычитания двоичных чисел с фиксированной запятой при использовании дополнительного кода для представления слагаемых.

Выполнение операции вычитания сводится к выполнению операции сложения с отрицательным вторым слагаемым, поэтому рассмотрим алгоритм выполнение операции сложения. Если слагаемое положительно, то прямой код слагаемого совпадает с дополнительным кодом. Поэтому при выполнении операции сложения положительные слагаемые представляются в прямом коде, а отрицательные – в дополнительном. Производится сложение двоичных кодов, включая разряды знаков. Для отслеживания переполнения существует 2 основных метода:

  • по наличию и отсутствию переноса;

  • использование модифицированного кодирования.

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

Во втором случае для представления знака отводится два или более разрядов. В случае использования двух знаковых разрядов комбинация 00 позволяет сделать вывод о том, что результат получился положительным, 11 – отрицательным, 10 или 01 – переполнение.

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

Пример 5.

Рассмотрим пример операции сложения: С=А+В. В качестве слагаемых возьмем 5-разрядные числа (4 информационных разряда и 1 разряд – знаковый): А=11, В=-4. В двоичной системе счисления положительные числа представляется в прямом коде, а отрицательные – в дополнительном. Следовательно, А=01011 и В=11100. Производим операцию сложения:

Зн.

Инф. разр.

0

1011

1

1100

0

0111

Переполнения разрядной сетки не было, так как был перенос и в знаковый разряд, и из знакового разряда.

Так как знак результата равен 0, то получаем положительный результат в прямом коде С=00111(2)=7(10).

Пример 6.

Рассмотрим пример операции вычитания: С=А-В. В качестве уменьшаемого и вычитаемого возьмем 5-разрядные числа (4 информационных разряда и 1 разряд – знаковый): А=11(10)=01011(2), В=-6(10)=11010(2).

Для выполнения операции вычитания берем дополнительный код вычитаемого. Получаем, что В=00110. Производим операцию сложения:

Зн.

Инф. разр.

0

1011

0

0110

1

0001

Так как был перенос в знаковый разряд, и не было переноса из знакового разряда, то произошло переполнение разрядной сетки.

Моделирование функционирования АЛУ.

Структурная схема АЛУ показана на рис. 5.

Рис. 5. Структурная схема АЛУ

Из оперативной памяти по входной информационной шине Швх в регистр RA поступает первое слагаемое/уменьшаемое А и в регистр RB – второе слагаемое/вычитаемое. В случае операции сложения второй операнд переписывается в регистр R1 без изменения. Если выполняется операция вычитания, то операнд переписывается в регистр R1 в обратном коде. Далее, в случае операции сложения происходит суммирование операндов, а в случае операции вычитания – суммирование с добавлением 1. Результат операции записывается в регистр суммы RC и выдается из АЛУ в оперативную память по выходной информационной шине Швых.

Для того, чтобы отследить переполнение разрядной сетки, пpи выполнении операции сложения/вычитания используется модифицированный код. Под него отводится девять разрядов: семь информационных и два знаковых. После выполнения операции производится анализ знаковых разрядов, если их значения совпадают - переполнения нет, а если значения различны - было переполнение.

Таким образом, алгоритм выполнения операции сложения/вычитания заключается в следующем:

  1. ввод операндов;

  2. дешифрация кода операции;

  3. в случае операции сложения: сложение операндов; в случае операции вычитания: представление вычитаемого в обратном коде и сложение операндов с добавлением 1;

  4. проверка на переполнение разрядной сетки результата;

  5. вывод результата.

Блок-схема выполнения операции сложения/вычитания показана на рис. 6.

На примере рассмотрим выполнение операции сложения.

В качестве Швх и Швых выступают входные восьмиразрядные регистры INPA и INPB, в которые вводятся операнды. Так как переполнение отслеживается с помощью модифицированных кодов, то регистры операндов RA и RB девятиразрядные.

Рис. 6. Блок-схема выполнения операции сложения/вычитания

Пример микропрограммы выполнения операции сложения

Текст программы:

writeln "**************************************************";

writeln "* Моделирование алгоритма сложения *";

writeln "**************************************************";

REG RA[9],RB[9],R1[9],RC[9],INPA[8],INPB[8],Z[9];

start:

write "A=";read INPA;

write "B=";read INPB;

RA:=INPA; RA[8..8]:=INPA[7..7];

RB:=INPB; RB[8..8]:=INPB[7..7];

writeln "RA=",$B9 RA;

writeln "RB=",$B9 RB;

writeln "Сложение (A+B):";

R1:=RB;

RC:=RA+R1;

writeln "R1=",$B9 R1;

writeln "RC=",$B9 RC;

IF RC[8..8]<>RC[7..7] THEN

writeln "!!! Переполнение разрядной сетки !!!";

IF (RC[8..8]=RC[7..7]) AND (RC[8..8]=0) THEN

writeln "Результат Z=",$B9 RC,"=",$D3 RC;

IF (RC[8..8]=RC[7..7]) AND (RC[8..8]=1) THEN GOSUB WREZ;

writeln "***************** Конец программы ****************";

END;

WREZ:

Z:=COM(RC);

Z[8..8]:=1;

write "Результат Z= ",$B9 Z,"=-";

Z[8..8]:=0;

writeln $D3 Z;

RETURN;

Результат работы программы

  1. В случае получения положительного результата:

Рис. 7. Получение положительного результата

**************************************************

* Моделирование алгоритма сложения *

**************************************************

A=3

B=6

RA=000000011

RB=000000110

Сложение (A+B):

R1=000000110

RC=000001001

Результат Z=000001001= 9

***************** Конец программы ****************

Содержимое таблицы переменных

00 Переменная: ZF типа регистр; разрядность 1 бит; значение = 1

01 Переменная: NF типа регистр; разрядность 1 бит; значение = 0

02 Переменная: CF типа регистр; разрядность 1 бит; значение = 0

03 Переменная: RA типа регистр; разрядность 9 бит; значение = 3

04 Переменная: RB типа регистр; разрядность 9 бит; значение = 6

05 Переменная: R1 типа регистр; разрядность 9 бит; значение = 6

06 Переменная: RC типа регистр; разрядность 9 бит; значение = 9

07 Переменная: INPA типа регистр; разрядность 8 бит; значение = 3

08 Переменная: INPB типа регистр; разрядность 8 бит; значение = 6

09 Переменная: Z типа регистр; разрядность 9 бит; значение = 0

  1. В случае получения отрицательного результата:


Рис. 8. Получение отрицательного результата

**************************************************

* Моделирование алгоритма сложения *

**************************************************

A=28

B=-37

RA=000011100

RB=111011011

Сложение (A+B):

R1=111011011

RC=111110111

Результат Z= 100001001=- 9

***************** Конец программы ****************

Содержимое таблицы переменных

00 Переменная: ZF типа регистр; разрядность 1 бит; значение = 0

01 Переменная: NF типа регистр; разрядность 1 бит; значение = 0

02 Переменная: CF типа регистр; разрядность 1 бит; значение = 0

03 Переменная: RA типа регистр; разрядность 9 бит; значение = 28

04 Переменная: RB типа регистр; разрядность 9 бит; значение = 475

05 Переменная: R1 типа регистр; разрядность 9 бит; значение = 475

06 Переменная: RC типа регистр; разрядность 9 бит; значение = 503

07 Переменная: INPA типа регистр; разрядность 8 бит; значение = 28

08 Переменная: INPB типа регистр; разрядность 8 бит; значение = 4294967259

09 Переменная: Z типа регистр; разрядность 9 бит; значение = 9

  1. В случае переполнения:

Рис. 9. Переполнение

**************************************************

* Моделирование алгоритма сложения *

**************************************************

A=14

B=125

RA=000001110

RB=001111101

Сложение (A+B):

R1=001111101

RC=010001011

!!! Переполнение разрядной сетки !!!

***************** Конец программы ****************

Содержимое таблицы переменных

00 Переменная: ZF типа регистр; разрядность 1 бит; значение = 1

01 Переменная: NF типа регистр; разрядность 1 бит; значение = 0

02 Переменная: CF типа регистр; разрядность 1 бит; значение = 0

03 Переменная: RA типа регистр; разрядность 9 бит; значение = 14

04 Переменная: RB типа регистр; разрядность 9 бит; значение = 125

05 Переменная: R1 типа регистр; разрядность 9 бит; значение = 125

06 Переменная: RC типа регистр; разрядность 9 бит; значение = 139

07 Переменная: INPA типа регистр; разрядность 8 бит; значение = 14

08 Переменная: INPB типа регистр; разрядность 8 бит; значение = 125

09 Переменная: Z типа регистр; разрядность 9 бит; значение = 0

Контрольные вопросы

  1. Особенности выполнение операции сложения/вычитания чисел с фиксированной запятой при использовании обратного и дополнительного кодирования.

  2. Методы определения переполнения.

  3. Состав и назначение основных регистров АЛУ для выполнения операции сложения/вычитания чисел с фиксированной запятой.

Содержание отчета

  1. Формулировка задания.

  2. Структурная схема АЛУ для выполнения операции сложения/вычитания чисел с фиксированной запятой при использовании дополнительного кода для представления слагаемых.

  3. Блок-схема выполнения операции сложения/вычитания чисел с фиксированной запятой при использовании дополнительного кода для представления слагаемых.

  4. Программа на языке MCL, моделирующая выполнение операции сложения/вычитания чисел с фиксированной запятой при использовании дополнительного кода для представления слагаемых.

  5. Результаты выполнения программы в виде распечатки содержимого поля для вывода текстовой информации и скриншота (как показано в примере на рис. 7, 8, 9) в момент завершения выполнения программы.

Задание к лабораторной работе

Промоделировать работу АЛУ при выполнении команд сложения/вычитания в соответствие с вариантом задания. Варианты задания представлены в таблице 1. Рекомендуется использовать следующие обозначения:

I-код операции: 0-сложение

1-вычитание

INPA,INPB-регистры для ввода операндов;

RA-первый операнд АЛУ;

RВ-второй операнд АЛУ;

R1-второй операнд в обратном коде;

RC-результат операции в АЛУ.

При моделировании использовать девятиразрядные регистры, т.к. используются модифицированные коды. Регистры INPA, INPB – восьмиразрядные. При моделировании должно быть отслежено переполнение (используются модифицированные коды). Вывести на печать содержимое всех регистров в двоичной системе счисления, исходные данные и результат – в двоичной и десятичной системе счисления.

Таблица 1. Варианты задания для моделирования операции сложения/вычитания

№ варианта

Первый операнд

Второй операнд

Операция

1

-25

7

75

40

25

59

+

-

+

2

-45

5

100

10

45

30

+

-

+

3

-30

6

89

7

30

60

+

-

+

4

22

-22

90

-9

-8

-38

+

-

+

5

73

-73

67

-13

-10

-93

+

-

+

6

46

-46

-57

-17

-23

-73

+

-

+

7

27

10

92

17

27

-43

+

-

-

8

70

11

94

19

70

-45

+

-

-

9

28

14

103

16

28

-34

+

-

-

10

68

25

98

17

68

-55

+

-

-

11

16

-16

-105

-70

17

70

+

-

-

12

26

-26

-28

-28

15

117

+

-

-

13

-24

5

65

40

25

63

+

-

+

14

-43

6

99

10

45

30

+

-

+

15

-32

5

88

7

30

60

+

-

+

16

20

-19

95

-9

-8

38

+

-

+

17

61

-63

-77

-13

-10

-93

+

-

+

18

46

-46

-57

-17

-23

-73

+

-

+

19

25

11

-87

17

27

-43

+

-

-

20

68

10

-92

19

70

-45

+

-

-

21

27

-13

-102

-16

28

-34

+

-

-

22

58

23

-96

17

68

-55

+

-

-

23

15

-15

-104

-70

17

70

+

-

-

24

25

-25

-26

-28

15

-117

+

-

-

Лабораторная работа № 2. Моделирование функционирования АЛУ при выполнении операции умножения над числами с фиксированной точкой

Содержание

Цель работы___________________________________________________________________________ 36

Функционирование АЛУ при выполнении операции умножения_____________________________36

Моделирование функционирования АЛУ при выполнении операции умножения двоичных чисел,представленных в прямом коде________________________________________ 36

Моделирование функционирования АЛУ при выполнении операции умножения двоичных чисел, представленных в дополнительном коде_______________________________ 39

Алгоритм выполнения операции умножения двоичных чисел_______________________________ 40

Пример выполнения операции умножения________________________________________________ 42

Контрольные вопросы__________________________________________________________________ 45

Содержание отчета______________________________________________________________________45

Задания к лабораторной работе__________________________________________________________ 46

Цель работы

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

Функционирование АЛУ при выполнении операции умножения

Алгоритм умножения двоичных чисел с фиксированной запятой, представленных в прямом коде

В каждом цикле выполнения операции умножения анализируется очередная цифра множителя. Если очередная цифра множителя равна 1, то к сумме частичных произведений прибавляется множимое, в противном случае прибавляется нуль. Цикл завершается сдвигом множимого относительно суммы частичных произведений либо сдвигом суммы частичных произведений относительно неподвижного множимого. Таким образом, выполнение операции умножения в АЛУ сводится к последовательности операций сложения и сдвига.

В случае отрицательного операнда при умножении чисел, представленных в прямом коде, операция умножения сводится к выполнению следующих этапов:

  1. определение знака произведения путем сложения по модулю 2 знаковых разрядов множимого и множителя;

  2. обнуление знаковых разрядов отрицательных операндов;

  3. выполнение операции умножения чисел, представленных в прямом коде.

Существует четыре способа умножения чисел с фиксированной точкой. При выполнении операции умножения можно сдвигать либо множимое, либо промежуточный результат и начинать анализ множителя либо с младших разрядов, либо со старших. Соответственно различают четыре структуры АЛУ для этой операции.

Рассмотрим указанные способы умножения чисел с фиксированной точкой.

  1. Умножение чисел, представленных в прямом коде, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений вправо и при неподвижном множимом.

Пример 1.

Рассмотрим пример выполнения операции умножения: С=А*В, где А=14(10)=01110(2), В=4(10)=00100(2). При выполнении операции умножения будем сдвигать сумму частичных произведений вправо и анализировать разряды множителя, начиная с младшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).

Множитель

Зн.

Информ. разряды

4-й

3-й

2-й

1-й

0-й

0

0

1

0

0

Зн.

Информ. разряды

Описание действий

0

1110

Множимое (мн-ое)

0

0100

Множитель (мн-ль)

0

0000

->

Сумма частичных произведений (СЧП)

0

0000

0 ->

Сдвиг СЧП на 1 разряд вправо (0-й разряд множителя =0)

+0

0000

00

Сдвиг СЧП на 1 разряд вправо (1-й разряд множителя =0)

0

1110

Множимое

0

1110

00 ->

СЧП (2-й разряд множителя =1)

0

0111

000 ->

Сдвиг СЧП на 1 разряд вправо

0

0011

1000 ->

Сдвиг СЧП на 1 разряд вправо (3-й разряд множителя =0)

0

0001

11000

Сдвиг СЧП на 1 разряд вправо (4-й разряд множителя =0)

Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=00=0. Результат С=0000111000(2)=56(10).

  1. Умножение чисел, представленных в прямом коде, начиная с младших разрядов множителя, со сдвигом множимого влево и при неподвижной сумме частичных произведений.

Пример 2.

Рассмотрим пример выполнения операции умножения: С=А*В, где А=11(10)=01011(2), В=-5(10)=10101(2). Числа представлены в прямом коде. При выполнении операции умножения будем сдвигать множимое влево и анализировать разряды множителя, начиная с младшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).

Множитель

Зн.

Информац. разряды

4-й

3-й

2-й

1-й

0-й

0

0

1

0

1

Информ. разряды

Описание действий

01011

Множимое

00101

Множитель

+

00000

Сумма частичных произведений, 0-ой разряд множителя =1

01011

Множимое

+

01011

СЧП, Сдвиг мн-ого на 1 разряд влево, 1-й разряд множителя =0

0

0000

+0

01011

СЧП, Сдвиг мн-ого на 1 разряд влево, 2-й разряд множителя =1

01

011

Сдвинутое множимое

+01

10111

СЧП, Сдвиг мн-ого на 1 разряд влево, 3-й разряд множителя =0

000

00

+001

10111

СЧП, Сдвиг мн-ого на 1 разряд влево, 4-й разряд множителя =0

0000

0

0001

10111

Результат операции умножения

Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=01=1. Результат С=1000110111(2)=-55(10).

  1. Умножение чисел, представленных в прямом коде, начиная со старших разрядов множителя, со сдвигом суммы частичных произведений влево и при неподвижном множимом.

Пример 3.

Рассмотрим пример выполнения операции умножения: С=А*В, где А=13(10)=01101(2), В=9(10)=01001(2). При выполнении операции умножения будем сдвигать сумму частичных произведений влево и анализировать разряды множителя, начиная со старшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).

Множитель

Зн.

Информац. разряды

4-й

3-й

2-й

1-й

0-й

0

1

1

0

1

Информ. разряды

Описание действий

01101

Множимое

01001

Множитель

<-

00000

СЧП, 4-ый разряд множителя =0

+0

00000

Сдвиг СЧП на 1 разряд влево, 3-й разряд множителя =1

01101

Множимое

<-0

01101

Сумма частичных произведений

+00

11010

Сдвиг СЧП на 1 разряд влево, 2-й разряд множителя =0

00000

<-00

11010

Сумма частичных произведений

+001

10100

Сдвиг СЧП на 1 разряд влево, 1-й разряд множителя =0

00000

<-001

10100

Сумма частичных произведений

+0011

01000

Сдвиг СЧП на 1 разряд влево, 0-й разряд множителя =1

01101

Множимое

0011

10101

Результат операции умножения

Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=00=0. Результат С=0001110101(2)=117(10).

  1. Умножение чисел, представленных в прямом коде, начиная со старших разрядов множителя, со сдвигом множимого вправо и при неподвижной сумме частичных произведений.

Пример 4.

Рассмотрим пример выполнения операции умножения: С=А*В, где А=11(10)=01011(2), В=15(10)=01111(2). Числа представлены в прямом коде. При выполнении операции умножения будем сдвигать множимое вправо и анализировать разряды множителя, начиная со старшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).

Множитель

Зн.

Информац. разряды

4-й

3-й

2-й

1-й

0-й

0

1

1

1

1

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

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

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

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