Арифметические основы построения ЭВМ

 

Чувашский государственный университет имени И.Н. Ульянова

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













КУРСОВАЯ РАБОТА

по информатике на тему:

«Арифметические основы построения ЭВМ»




Выполнил: студент гр. ИВТ 41-08

Михайлов Л.В.

Проверил: преподаватель

Стеценко В.Г.





г. Чебоксары

Цель:


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

Задача:

Разработать алгоритм и программу операции деления целых чисел в формате Упакованное десятичное на сумматоре прямого кода. Десятичное число содержит не более 18 цифр.

В коде 8421.

Разрядная сетка машины - 80 разрядов.

Описание формата;

Операции над десятичными числами (десятичная арифметика) часто включается в cocтaв основных команд универсальных ЭВМ. Кроме того десятичная арифметика реализуется широко в электронных калькуляторах и персональных микроЭВМ. Поэтому кроме общей информацмии о возможности представления десятичных чисел разработчику необходимо знать и алгоритм выполнения арифметических операций.

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

Разрешённые комбинации:


Десятичный разряд:Двоичная комбинация:00000100012001030011401005010160110701118100091001Остальные комбинации - запрещенные. Появление таких комбинаций означает ошибку или необходимость обработки результата (коррекция).



Диапазон представления чисел

Диапазон представления чисел для нашей задачи следующий:

Минимальное положительное значение определяется следующим образом:

Х=0 000000 0000…0001

т.е. Х=1

А максимальное:

Х=0 0000000 100110011001…10011001

т.е Х=999999999999999999

минимальное по модулю отрицательное:

Х=1 0000000 0000...0001

т.е. Х=-1

А максимальное по модулю отрицательное:

Х=1 0000000 100110011001…10011001

т.е Х=-999999999999999999

)Разработка алгоритма преобразования десятичного числа в BCD формат

1) На вход программа получает две строки с максимальным количеством символов, равным 18.

Так как пользователь может ошибиться (ввести вместо цифры символ или ввести слишком много цифр), понадобятся дополнительные проверки.

1. После считывания строки проверяется её длина. Если она превышает 19, тогда флагу ошибочной длины присваивается значение true.

. Если же нет то проверяется на наличие знака - если он присутствует, тогда проводиться перевод i-ого символа в двоичный код столько раз, какова длина строки не считая первого так как он является - .

. Если же знак - отсутствует, то проверяется его длина. Если она не превышает 18, то проводится перевод i-ого символа в двоичный код столько раз, какова длина строки. При превышении, флагу ошибочной длины присваивается значение true.

ГСА преобразования строки в заданный формат представлена на Рис.1

2) При переводе i-ого символа в формат упакованное десятичное полученный двоичный код будет храниться в байте, по две тетрады в каждом.

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

. В противном случае находят номер элемента хранения и определятся надобность сдвига в лево на 4 разряда. Далее полученная цифра добавляется в элемент хранения со с сдвигом или без.

ГСА упаковки цифры в элемент хранения представлена на Рис. 2


















Рис1.ГСА перевода полученной строки в BCD формат












Рис. 2 ГСА п/п перевода цифры в двоичный код


Пример перевода из строки в число формата BCD На входе строка : 1986258163

Цифра 3 имеет код 0011

60110

10001

71000

50101

0010

0110

1000

9 1001

1 0001

Получаем :


Разработка алгоритма арифметической операции.

Для определения формальных правил поразрядного сложения чисел, представленных в Д-коде, рассмотрим те особенности, которые присущи этим кодам.

1.Наличие запрещённых комбинаций.

Её появление свидетельствует о ошибке или же о необходимости коррекции результата.

2.При сложении тетрад возникает потетрадный перенос. Это также приводит к необходимости коррекции результата.


В самом деле, если складывать и,

то сумма равна

,


Где - I - ый разряд суммы; Пi-1 - перенос из младшей тетрады; Пi - перенос в старшую тетраду.

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

В случае если сумма больше или равна 10, то требуется коррекция результата в данной тетраде введением поправки, равной +0110.

)Пример сложения целых чисел в формате упакованное десятичное


Алгоритм операции сложения

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

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

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

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

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

Перевод в дополнительный код проводиться следующим образом: сначала к каждой цифре прибавляется 6-ка, далее всё число инвертируется и к нему прибавляется еденица

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

программа код чило сумматор эвм


Рис. 3 ГСА арифметической операции Рис. 4 ГСА п\п суммы чисел




Рис. 7 ГСА Вывода двоиного Рис. 8 ГСА п\п перевода в

представления числа дополнительный код

































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


Рис. 11 Сложение.


Рис.12 Вывод помощи.


Приложение:


unit Adding;

interface

cod: array[1..11] of string =('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','errr');

n=9;

pack=array [1..10] of byte;

vvod,vivod:string[20];

A,B,C:pack;

i,j,k:byte;

symb:boolean;

long,bola,bolb:boolean;Auto;Step;crt;box(f:byte ;str:string; var X:pack);

z,q:byte;

j:=0;

symb:=false;

q:=length(str);

for i:=20 downto f-q do

begin

j:=ord(str[q])-48;

dec(q);

k:=round(i/2);

z:=4*(i mod 2);

X[k]:=X[k]+ j shl z;

end;;obnul(var x:pack);q:byte;

for q:=1 to 10 do

x[q]:=0;;vivd (x:pack);

for j:=1 to 10 do

write(X[j],'|');

writeln;;Boxing(var X:pack);

obnul(x);

readln(vvod);

box(21,vvod,X);

vivd(x);;perevod(var x:pack);

obnul(x);

readln(vvod);

if length(vvod)<=19 then

if vvod[1]='-' then

begin

x[1]:= 8 shl 4;

box(22,vvod,x);

end

else

begin

if length(vvod)<19 then

begin

box(21,vvod,x);

end

else

long:=true

end

else

long:=true;;gettetr(X:pack; p:byte): byte;

z,r:byte;

z:=round(p/2);

r:=X[z] shr 4;

if p mod 2 = 0 then

gettetr:=x[z] - r shl 4

else gettetr:=r;;vivdcode(X:pack);q,e:byte ;

for q:=1 to 20 do

begin

e:=gettetr(x,q);

if e<=9 then

write(cod[e+1])

else write(cod[11]);

end;

writeln;;tetrsum(x,y:pack;var z:byte; p :byte ;v:byte);e,r:byte;

e:=0;

r:=0;

e:=gettetr(x,p);

r:=gettetr(y,p);

z:=e+r+v;;sum(x,y: pack ; var d:pack);

q,e,g,k,z,cj,h:byte;

obnul(d);

cj:=0;

for q:=20 downto 3 do

begin

tetrsum(x,y,e,q,cj);

cj:=0;

k:=round(q/2);

h:=q mod 2;

if e>9 then

begin

e:=e-10;

cj:=1 ;

end;

z:=4*h;

d[k]:=d[k]+ e shl z;

end;;bolshe (x,y:pack; var bool1,bool2:boolean);i:word;

bool1:=false;

bool2:=false;

i:=2;

repeat

if x[i]>y[i] then bool1:=true

else bool2:=true;

inc(i);

until (i>10) or (bool1=true) or (bool2=true);;deBox(X:pack);q,z:byte;

vh:string[20];

vh:='00000000000000000000';

for q:=20 downto 3 do

begin

z:=gettetr(x,q);

vh[q]:=char(z+48);

end;

write(vh);;addnum(var x:pack;num:byte);q,i,e,r,z,k,cj:byte;

d:pack;

cj:=0;

d:=x;

obnul(x);

for q:=20 downto 3 do

begin

e:=gettetr(d,q);

e:=e+num+cj;

num:=0;

cj:=0;

k:=round(q/2);

i:=q mod 2;

if e>9 then

begin

e:=e-10;

cj:=1 ;

end;

z:=4*i;

x[k]:=x[k]+ e shl z;

end;;dop(var x:pack);q:byte;

for q:=2 to 10 do

begin

x[q]:= x[q] + $66;

x[q]:= not x[q];

end;

x[q]:= x[q] + 1;;undop(var x:pack);q:byte;

for q:=2 to 10 do

begin

x[q]:=not x[q];

x[q]:=x[q] - $66;

end;

addnum(x,1);;Auto;

writeln('Insert A');

perevod(a) ;

vivdcode(a);

if (long=false) and (symb=false) then

begin

writeln('Insert B');

perevod(b);

vivdcode(b);

if (long=false) and (symb=false) then

begin

If a[1]=b[1] then

begin

Sum(A,B,C);

writeln('C=A+B');

writeln('C in BCD');

vivdcode(c);

debox(c);

writeln;

end

else

begin

if a[1]<> 0 then

begin

dop(a);

writeln('A in dop');

vivdcode(a);

end

else

begin

dop(b);

writeln('B in dop');

vivdcode(b);

end;

sum(A,B,C);

writeln('C=A+B');

writeln('C in BCD');

bolshe(a,b,bola,bolb);

if c[2]<>0 then

undop(c);

vivdcode(c);

debox(c);

end;

end;

end;;min(X:pack);q,e:byte ;

for q:=3 to 20 do

begin

e:=gettetr(x,q);

if e<=9 then

write(cod[e+1])

else write(cod[11]);

end;

writeln;;show;

writeln('C=A+B');

min(A);

writeln('+');

min(B);

writeln('___');;Step;u:byte; ch:char;

u:=0;

writeln('Press "n" to chouse next position ');

repeat

ch:=readkey;

if ch = 'n' then inc(u);

case u of

1:begin

writeln('Insert A');

perevod(a) ;

if (long=false) and (symb=false) then

begin

writeln('Insert B');

perevod(b);

writeln('A in BCD');

vivdcode(a);

writeln('B in BCD');

vivdcode(b);

end;

end;

2:begin

if (long=false) and (symb=false) then

begin

if a[1]=b[1] then

begin

show;

Sum(A,B,C);

min(c);

writeln(^M^J,'C in BCD');

vivdcode(c);

debox(c);

writeln;

end

else

begin

if a[1]<> 0 then

begin

dop(a);

writeln('A in dop');

vivdcode(a);

end

else

begin

dop(b);

writeln('B in dop');

vivdcode(b);

end;

sum(A,B,C);

writeln('C=A+B');

writeln('C in BCD');

if c[2]<>0 then

undop(c);

vivdcode(c);

debox(c);

end;

end;

end;

end;

until (u=2);;.

Модуль Maincrt,Adding,Winw;

f:byte;

glavwin;

repeat

CH:=readkey;

case ch of

char(19):begin clrscr; Step; end;

char(1): begin clrscr; Auto; end;

char(27): ggg:= True;

char(8): help;

else Beep;

end;

until ggg=true;

end.


Чувашский государственный университет имени И.Н. Ульянова Кафедра Вычислительной техники КУРСОВАЯ РАБОТА

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ