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

Практическое решение технических задач и логического проектирования узлов ЭВМ: операция деления целых чисел в формате "Упакованное десятичное" на сумматоре прямого кода: блок-схемы алгоритма программы и её код. Понятие об инвертировании числа и кода.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 24.06.2012
Размер файла 479,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

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

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

г. Чебоксары

Цель:

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

Задача:

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

В коде 8421.

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

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

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

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

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

Десятичный разряд:

Двоичная комбинация:

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

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

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

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

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

Х=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.

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

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

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

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

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

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

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

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

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

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

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

6 0110

1 0001

7 1000

5 0101

2 0010

6 0110

8 1000

9 1001

1 0001

Получаем :

000000000000000000000000000000000001100110000110001001011000000101100011

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

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

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

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

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

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

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

,

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

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

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

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

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

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

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

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

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

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

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

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

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

Размещено на http://www.allbest.ru/

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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

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

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

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

Приложение:

unit Adding;

interface

const

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

n=9;

type

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

var

vvod,vivod:string[20];

A,B,C:pack;

i,j,k:byte;

symb:boolean;

long,bola,bolb:boolean;

procedure Auto;

procedure Step;

implementation

uses crt;

procedure box(f:byte ;str:string; var X:pack);

var

z,q:byte;

begin

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;

end;

procedure obnul(var x:pack);

var q:byte;

begin

for q:=1 to 10 do

x[q]:=0;

end;

procedure vivd (x:pack);

begin

for j:=1 to 10 do

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

writeln;

end;

procedure Boxing(var X:pack);

begin

obnul(x);

readln(vvod);

box(21,vvod,X);

vivd(x);

end;

procedure perevod(var x:pack);

begin

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;

end;

function gettetr(X:pack; p:byte): byte;

var

z,r:byte;

begin

z:=round(p/2);

r:=X[z] shr 4;

if p mod 2 = 0 then

gettetr:=x[z] - r shl 4

else gettetr:=r;

end;

procedure vivdcode(X:pack);

var q,e:byte ;

begin

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;

end;

procedure tetrsum(x,y:pack;var z:byte; p :byte ;v:byte);

var e,r:byte;

begin

e:=0;

r:=0;

e:=gettetr(x,p);

r:=gettetr(y,p);

z:=e+r+v;

end;

procedure sum(x,y: pack ; var d:pack);

var

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

begin

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;

end;

procedure bolshe (x,y:pack; var bool1,bool2:boolean);

var i:word;

begin

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);

end;

procedure deBox(X:pack);

var q,z:byte;

vh:string[20];

begin

vh:='00000000000000000000';

for q:=20 downto 3 do

begin

z:=gettetr(x,q);

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

end;

write(vh);

end;

procedure addnum(var x:pack;num:byte);

var q,i,e,r,z,k,cj:byte;

d:pack;

begin

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;

end;

procedure dop(var x:pack);

var q:byte;

begin

for q:=2 to 10 do

begin

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

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

end;

x[q]:= x[q] + 1;

end;

procedure undop(var x:pack);

var q:byte;

begin

for q:=2 to 10 do

begin

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

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

end;

addnum(x,1);

end;

procedure Auto;

begin

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;

end;

procedure min(X:pack);

var q,e:byte ;

begin

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;

end;

procedure show;

begin

writeln('C=A+B');

min(A);

writeln('+');

min(B);

writeln('___');

end;

procedure Step;

var u:byte; ch:char;

begin

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);

end;

end.

Модуль Main

uses crt,Adding,Winw;

var

f:byte;

begin

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.

Размещено на Allbest.ru


Подобные документы

  • Разработка алгоритма выполнения операций умножения двоичных чисел в формате расширенной точности на сумматоре обратного кода. Преобразование входной строки в десятичное число. Разработка алгоритма арифметической операции. Тестирование программы-эмулятора.

    курсовая работа [119,1 K], добавлен 24.06.2012

  • Запись прямого и обратного кода для числа 10010 и -10010. Получение дополнительного кода числа для 16-разрядной ячейки. Перевод в двоичную систему счисления десятичных чисел: 10, 45, 7, 33. Запись в обратном и дополнительном кодах числа -67, -43, -89.

    практическая работа [13,7 K], добавлен 19.04.2011

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

    контрольная работа [56,5 K], добавлен 05.09.2010

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

    презентация [42,6 K], добавлен 14.06.2011

  • Теоретические основы объектно-ориентированного языка программирования Delphi, изучение среды визуального проектирования приложений. Определение 40-го числа Фибоначчи, составление листинга и блок-схемы программы, тестирование ее на работоспособность.

    курсовая работа [261,1 K], добавлен 25.03.2015

  • "Рой частиц" как наиболее простой метод эволюционного программирования, основанный на идеи о возможности решения задач оптимизации с помощью моделирования поведения групп животных. Схема работы алгоритма, составление кода программы и блок-схемы.

    курсовая работа [38,5 K], добавлен 18.05.2013

  • Общее описание и особенности использования программы, предназначенной для определения нечетных чисел, находящихся в массиве чисел. Листинг и методы оптимизации данной компьютерной программы. Источники оптимизации кода, описание выполненных команд.

    лабораторная работа [17,4 K], добавлен 25.03.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.