Моделирование микропрограмм выполнения арифметических операций в двоичной системе счисления

Автор работы: Пользователь скрыл имя, 12 Ноября 2012 в 10:14, лабораторная работа

Описание

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

Работа состоит из  1 файл

Лр1 твп ира.docx

— 509.24 Кб (Скачать документ)

МИНОБР НАУКИ РОССИИ

Федеральное государственное  бюджетное образовательное учреждение высшего профессионального образования

«Юго-Западный государственный  университет»

Кафедра  вычислительной  техники

 

 

Лабораторная  работа №1, по дисциплине

«Теория вычислительных процессов»

 

МОДЕЛИРОВАНИЕ МИКРОПРОГРАММ  ВЫПОЛНЕНИЯ

АРИФМЕТИЧЕСКИХ   ОПЕРАЦИЙ В ДВОИЧНОЙ СИСТЕМЕ 

СЧИСЛЕНИЯ

 

 

 

Выполнила:                                                                          студентка группы ВМ-01 
                                                                                                  Косилова  И.Ю.

                                                                                                     

Проверил:                                         к.т.н., доцент   
                                                                                               Чернецкая И. Е.

 

 

 

 

Курск 2012

1.Задание на  лабораторную работу

 

 

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

 

 

Номер варианта

Разрядность операндов

Разрядность сумматора

5

16

4


 

 

 

 

 

 

 

 

 

 

 

НАЧАЛО


 

Рг А:=ШZ

 

 

Рг В:=ШZ

 

ТгР := 0

Ст   :=  0

 

 

Y1

Y2

Y3

X1

1

0

 

операция

сложения

 

 

РгВ[0] :=ùРгВ[0]

 

 

 

Y4

X2

1

0

 

РгА[0]=0

 

 

 

 

     РгA:=ùРгA

 

 

 

 

    РгA:=РгA + 1

 

 

 

1

Y5

Y6

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


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

X3

1

0

 

РгB[0]=0

 

 

 

 

     РгB:=ùРгB

 

 

 

 

 РгB:=РгB + 1

 

 

 

 

 

РгС[ст]:=РгА[ст]+РгВ[ст]+ТгР

 

 

Ст := Ст+1

 

1

0

 

X5

1

0

 

РгC[0]=0

 

 

 

 

  РгC:=ùРгC

 

 

 

 

 РгC:=РгC + 1

 

 

 

 

   ШZ:=РгС

 

 

 

Ст > 4

 

 

 

Конец

Y7

Y8

Y9

Y10

X4

Y11

Y12

Y13

RgC


ТгР

Ст

RgA

RgB

SM

DMUX

MUX

MUX

0

15

0

0

15

0

15

15

0

15

0

15

0

3

0

3

0

3

0

3

0

3

0

3

0

0

0

15

15

15

перенос

16

16

y1

y2

y

3

y3

A

A

A

y9

 

A

 

Z

Z

y4

y6

y7

y5

y8

y10

y11

y12

y13

3. Структура операционного  автомата выполнения арифметических  операций сложения и вычитания  чисел


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Список микрокоманд и условий

y1:  RgA:=ШZ;

y2: RgB:= ШZ

y3: ТгР:=0; Ст:=0;

y4: RgB[0]:=ù RgB[0];

y5: RgA:=ù RgA

          y6: RgA:= RgA + 1

y7: RgB:=ù RgB

          y8: RgB:= RgB + 1

y9: RgC[ст];= RgA[ст] -RgB[ст]-ТгР;

y10:Ст:=Ст+1;

y11: RgC:=ù RgC

          y12: RgC:=РгC + 1

y13: ШZ:=RgC;

 

x1: определение операции;

          x2: RgA [0]=0;

x3: RgB[0]=0;

x4:Ст>1.

          x5: RgC[0]=0.

 

 

 

 

 

 

5.Разработанная  программа на алгоритмическом  языке высокого уровня, моделирующая  полученную микропрограмму

#include<iostream>

#include<conio.h>

#include<math.h>

#include<stdio.h>

 #include<ctype.h>

 

using namespace std;

//ф-ция перевода в двоичный код

bool sum(bool a, bool b, bool c)

{

bool f;

if(a==b)f=0;

else f=1;

if(f==c)f=0;

else f=1;

return f;

}

//ф-ция переноса

bool counter(bool a, bool b, bool c){

bool  f=0;

if(a+b+c>1)

f=1;

return f;

}

//перевод в дк и обратно

void trans (bool   a[16]){

int i=15;

while (a[i]==false)--i;//--i;

// дальше нужно  инвертировать число

--i;

for( ; i >=0 ; --i)

if(a[i]==true) a[i]=false;

else a[i]=true;

}

//вывод массива числа

void out (bool   a[16]){

for(int i=0; i<16; ++i)

cout << a[i]  ;

cout << endl;

}

 

 

int main(){

 

setlocale(LC_ALL,"Rus");

 

bool var = 1;

while(var!=0){

cout << endl << " Введите значения А и В" << endl;

 

 

short int A , a, B,  b; 

cin >> A;

cin >> B;

a=abs(A);

b=abs(B);

if(!isdigit(a)==false || !isdigit(b)==false){

cout << " вы ввели не целочисленное значение" << endl;

getch();

return 0;

}

cout << " Выберите операцию: + или - " << endl;

char op;

cin >> op;

if (op !='+' && op !='-' ){

cout << " Введена некорректная операция" <<cout;

continue ;

}

if(op=='-')B=-B;

int c=pow(2.0,15.0);

if(a+b>c && a+b<-c){

cout << "Введенные значения не удовлетворяют условиям" << endl;

getch ();

return 0;

}

// перевод чисел  к основанию 2

bool  _a[16]={0} ,  _b[16]={0} , _c[16]={0};

for(int i=15; i>0; --i){

_a[i]=a%2;

_b[i]=b%2;

a=a/2;

b=b/2;

}

cout << endl << "Двоичное представление числа в пк " << A << ": ";

if (A<0)cout << "1" ;

else cout << "0" ;

for(int i=1; i<16; ++i)

cout << _a[i]  ;

cout << endl << "Двоичное представление числа в пк " << B << ": ";

if (B<0)cout << "1" ;

else cout << "0" ;

for(int i=1; i<16; ++i)

cout << _b[i]  ;

// проверяем знак  числа для перевода в дк

if(A<0){// то переводим в дк

trans(_a);

cout << endl << endl << "Двоичное представление числа в дк " << A << ": ";

out(_a);

}

if(B<0){// то переводим в дк

trans(_b);

cout << endl << endl << "Двоичное представление числа в дк " << B << ": ";

out(_b);

}

//сложение чисел

int tetra=3,

cnt=0,// сколько тетрад мы прошли, или которую тетраду мы идем

j=16;

bool trg=0;// счетчик говорит о том, был ли перенос

do{

do{

--j;

_c[j]=sum(_a[j],_b[j],trg);

trg=counter(_a[j],_b[j],trg);

--tetra;

}while(tetra>=0);

tetra=3;

++cnt;

cout  << endl <<" trg=" <<  trg << endl;

for(int p=j; p<16; ++p){

cout << _c[p];

}

}while (j>0);

if( A + B < 0){

trans(_c);

cout << endl << "Конечный результат в прямом коде: 1" ;

for(int i=1; i<16; ++i)

cout << _c[i]  ;

}

var = 0;

cout << endl << " Начать заново 1, остановить 0 " << endl;

cin >> var;

}

getch();

return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Тестовые  примеры  для различных соотношений знаков  операндов.

 

           15 + 15 = 30  (111102)

     

 

 

15 + (-8)  = 7 (1112)

 

 

 

 

-9 – (-9) = 0

 

 

 

-5 + 3 = -2 ( 102 )

 

 

 

 

 

 

7. Выводы по  работе

 

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


Информация о работе Моделирование микропрограмм выполнения арифметических операций в двоичной системе счисления