Разработка программ преобразования форматов двоичных данных и сортировок в машинных кодах микро-

2





Государственное образовательное учреждение

высшего профессионального образования

«Санкт-Петербургский государственный технологический институт

(технический университет)»

Кафедра систем автоматизированного проектирования и управления











Учебная дисциплина: Организация ЭВМ и систем

Курс: 2

Группа: 897





	Пояснительная записка к курсовому проекту на тему:

«Разработка программ преобразования форматов двоичных данных и сортировок в машинных кодах микро-ЭВМ СМ-1800 с помощью эмулятора на ПК»





Вариант № 4

	

Студентка                  



Руководитель             

Рекомендуемая оценка           

	









Санкт-Петербург

2010

Содержание

ВВЕДЕНИЕ……………………………………………………..………..3

		Аналитическая часть....................................................................4

  Система счисления………………………………………4

Двоичная система счисления………………..……4

Восьмеричная система счисления.........................4

Шестнадцатеричная система счисления……......4

   Правила переводов десятичных чисел в них и     обратно………………………………………………………...…4

	Правило перевода восьмеричной системы счисления в двоичную систему счисления………….…….4

	Правило перевода двоичной системы счисления в восьмеричную систему счисления……….....5

	Правило перевода шестнадцатеричной системы счисления в двоичную систему счисления…....5

  Правило перевода двоичной системы счисления в шестнадцатеричную систему счисления…..6

  Форматы хранения чисел с плавающей точкой…...6

	Практическая разработка………………………………….…..9

	Блок-схема алгоритма……………………………...…….9

	 Распределение памяти и листинг программы……..13

	 Результаты тестирования………………………..…17 

	  Описание средств вычислительной техники…………...18

	ВЫВОДЫ…………………………………………………………...…..19

	Список литературы………………………………………...…………..20















    Введение

		    Курсовая работа состоит из двух частей: аналитической и практической.

		    В аналитической части необходимо подготовить реферативный материал на тему: Двоичная, Восьмеричная и шестнадцатеричная система счисления. Правила переводов десятичных чисел в них и обратно. Форматы хранения чисел с плавающей точкой.

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

	     В формате с плавающей точкой ( 1+8+23 ) хранятся два числа. Восьмиразрядный порядок имеет смещение рсм = 12810 . Двоичная двадцатитрехразрядная мантисса не содержит старшей единицы, получаемой в результате нормализации. Если больше левое число ( с адреса 500016 ) , то в ячейке 600016 сформировать код 01, если больше правое ( с адреса 500416 ) – код 02, при равенстве чисел – код 00. Программа должна располагаться в памяти с ячейкой 400016.

































Аналитическая часть

Система счисления

 Система счисления - это способ записи чисел с помощью заданного набора специальных знаков (цифр). 

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

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



   Двоичная система счисления.

    В этой системе всего две цифры - 0 и 1. Основание системы - число 2. Самая правая цифра числа показывает число единиц, следующая цифра - число двоек, следующая - число четверок и т.д. Двоичная система счисления позволяет закодировать любое натуральное число - представить его в виде последовательности нулей и единиц.





   Восьмеричная система счисления

     В этой системе счисления 8 цифр: 0, 1, 2, 3, 4, 5, 6, 7. Чтобы перевести в двоичную систему, надо заменить каждую цифру эквивалентной ей двоичной триадой (тройкой цифр). Легко догадаться, что для перевода многозначного двоичного числа в восьмеричную систему нужно разбить его на триады справа налево и заменить каждую триаду соответствующей восьмеричной цифрой.



   Шестнадцатеричная система счисления

    Запись числа в восьмеричной системе счисления достаточно компактна, но еще компактнее она получается в шестнадцатеричной системе. В качестве первых 10 из 16 шестнадцатеричных цифр взяты привычные цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, а вот в качестве остальных 6 цифр используют первые буквы латинского алфавита: A, B, C, D, E, F. Перевод из шестнадцатеричной системы в двоичную и обратно производится аналогочно тому, как это делается для восьмеричной системы



Правила переводов десятичных чисел в них и обратно



  Правило перевода восьмеричной системы счисления в двоичную систему счисления

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

восьмеричной цифры в виде двоичной требуется менее трех двоичных цифр,

двоичный эквивалент  дополняется слева нулями ( незначащие нули не исказят значения числа).Таким образом,  например,  при записи четырехразрядного

восьмеричного числа  должно  получиться  двенадцатиразрядное  двоичное.

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

    Если исходное  число  дробное,  т.е.  имеет целую и дробную часть,  то в

двоичном числе  запятая  ставится  между  триадами, представляющими

соответствующие цифры исходного числа.

    Преобразуем восьмеричное число 5000

    Для этого  запишем для каждой цифры соответствующую триаду:

5 --> 101

0 --> 000

    Теперь можно записать число в двоичной форме

5000 --> 101 000 000 000



   Правило перевода двоичной системы счисления в восьмеричную систему счисления

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

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

    Пример.

Представить двоичное число 101 000 000 1 в форме восьмеричного.

Теперь дополним до трех цифр нулями самую правую группу справа:

101 000 000 100

Заменим  каждую триаду соответствующей восьмеричной цифрой:

101 000 000 100  -->   5004



  Правило перевода шестнадцатеричной системы счисления в двоичную систему счисления

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

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

записи можно отбросить самые левые (незначащие) нули и самые правые нули

дробной части.

    Пример. 

Преобразовать  шестнадцатеричное  число  “8А,F1”  в двоичную форму.

Для этого запишем для каждой цифры соответствующую тетраду:

8 -->  1000

А  --> 1010

F --> 1111

1  --> 0001

Теперь можно записать число в двоичной форме

8A,F1 ->  10001010,11110001



 Правило перевода двоичной системы счисления в шестнадцатеричную систему счисления

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

   Пример. 

Представить двоичное  число 10000111,10100011 в форме шестнадцатеричного. Разобьем исходное число на группы по четыре цифры, приняв в качестве точки отсчета местоположение запятой:

1000 0111 , 1010 0011

Заменим каждую тетраду соответствующей шестнадцатеричной цифрой:

1000 0111 , 1010 0011 ->  87,А3

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



Форматы хранения чисел с плавающей точкой

    Числовые величины, которые могут принимать любые значения (целые и дробные) называются вещественными числами. В математике также используется термин «действительные числа». Решение большинства математических задач сводится к вычислениям с вещественными числами. Вещественные числа в памяти компьютера представляются в форме с плавающей точкой.

    Форма с плавающей точкой использует представление вещественного числа А в виде произведения мантиссы m на основание системы счисления q в некоторой целой степени p, которую называют порядком:

А=m x q^p

    Например, число 128 можно записать в виде: 0,0000000128 х 10^10. Здесь m=0,0000000128 – мантисса, p=10 – порядок. Порядок указывает, на какое количество позиций и в каком направлении должна «переплыть», т.е. сместиться десятичная  в мантиссе. Отсюда название «плавающая точка». Однако справедливы и следующие равенства:

12,8 х 10 = 1,28 x 10^2 = 0,128 x 10^3 = 1280 x 10^(-1)

    Получается, что представление числа в форме с плавающей точкой неоднозначно? Чтобы не было неоднозначности, в ЭВМ используют нормализованное представление числа в форме с плавающей точкой. Мантисса в нормализованном представлении должна удовлетворять условию:

0.1q  £m< 1q ,



то есть мантисса меньше единицы и первая значащая цифра - не ноль.              Следовательно, для рассмотренного числа нормализованным представлением будет: 0,0000000128 x 10^10.

    В разных типах ЭВМ применяются различные варианты представления чисел в форме с плавающей точкой. Для примера рассмотрим один из возможных.

Пусть в памяти компьютера вещественное число представляется в форме с плавающей точкой в двоичной системе счисления (q=2) и занимает ячейку размером 4 байта. В ячейке должна содержаться следующая информация о числе: знак числа, порядок и значащие цифры мантиссы. Вот как эта информация располагается в ячейке:



± маш. порядок

МАН

ТИС

СА

1-й байт

2-й байт

3-й байт

4-й байт



    В старшем бите 1-го байта хранится знак числа. В этом разряде 0 обозначает плюс, 1 – минус. Оставшиеся 7 бит первого байта содержат машинный порядок. В следующих трех байтах хранятся значащие цифры мантиссы. 

    Что такое машинный порядок? В семи двоичных разрядах помещаются двоичные числа в диапазоне от 0000000 до 1111111. В десятичной системе это соответствует диапазону от 0 до 127. Всего 128 значений. Знак порядка в ячейке не хранится. Но порядок, очевидно, может быть как положительным, так и отрицательным. Разумно эти 128 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:





Машинный порядок

0

1

2

3

…

64

65

…

125

126

127

Математический порядок

-64

-63

-62

-61

…

0

1

…

61

61

63



    Если обозначить машинный порядок Мq, а математический q, то связь между ними выразится формулой:

Мq = q + 64

     Итак, машинный порядок смещен относительно математического на 64 единицы и имеет только положительные значения. Полученная формула записана в десятичной системе счисления. В двоичной системе счисления формула имеет вид:

Мq = q + 10000002

    При выполнении вычислений с плавающей точкой процессор это смещение учитывает.

    Таким образом, из вышесказанного вытекает следующий алгоритм для получения представления действительного числа в памяти ЭВМ:



1)      Перевести модуль данного числа в двоичную систему счисления;

2)      Записать полученное двоичное число в нормализованном виде;

3)      Определить машинный порядок с учетом смещения;

4)     Учитывая знак заданного числа (0 – положительное; 1 – отрицательное), записать его представление в памяти ЭВМ.









































2 Практическая разработка

2.1 Блок-схема алгоритма

Основная программа 



Начало

Вывод на экран сообщение « Pervoe chislo»

Запись в память первого числа

Вывод на экран сообщение «Vtoroe chislo»

Запись в память второго числа

Получение адреса 4 байта первого числа

Получение адреса 4 байта второго числа

Сравнение 4 байта первого и второго числа

Байт первого числа больше байта второго?

Байт первого числа меньше байта второго?

нет

да

нет

да

1

2

3

	

Переход к первому байту первого и второго числа

Создание счетчика на 3 шага

Вычитание единицы из значения счетчика

Счетчик равен нулю?

Сравнение байтов первого и второго числа

Байт первого числа больше байта второго?

Байт первого числа меньше байта второго?

Переход к следующему байту

нет

да

да

нет

да

нет

3

4

5

6

	

Получение адреса для записи результата

Занесение в ячейку памяти значение 01h

Вывод на экран сообщение «Pervoe chislo bolshe vtorogo»

Получение адреса для записи результата



Занесение в ячейку памяти значение 02h



Вывод на экран сообщение «Pervoe chislo menche vtorogo»



1

5

2

6

7	

Получение адреса для записи результата



Занесение в ячейку памяти значение 00h



Вывод на экран сообщение « Сhisla ravni»

Выход в режим ожидания программы Монитор

Конец

4

7

































Распределение памяти и листинг программы

Распределение программы



Е – Счетчик цикла

H,L –Текущий байт первого числа

B,C – Текущий байт второго числа



Листинг программы

Адрес

16-ричный код

Код Ассемблера

Комментарии

4000

30 00 80

LXI SP, 8000h

Создание стека

4003

21 00 50

LXI H, 5000h

Получение начального адреса чисел

4006

01 00 41

LXI B, 4100h

Запись в регистры ВС адреса, по которому записано первое сообщение  

4009

CD 4F 00

CALL 4Fh

Вывод сообщения «Pervoe chislo» на Монитор

400С

1E 05

MVI E, 05h

Создание счетчика на 4 шага 

400Е

1D 

DCR E

Вычитание единицы из значения счетчика

400F

CA 1A 40 

JZ 401Ah

Выход из цикла

4012

CD 67 00

CALL 67h

Ввод одного байта числа в аккумулятор

4015

77

MOV M,A

Копирование байта из аккумулятора в соответствующую ячейку памяти

4016

2C

INR L

Переход к следующему адресу

4017

C3 0E 40

JMP 400Eh

Переход на начало цикла

401A

CD 49 00

CALL 49h

Переход на новую строку

401D

01 25 41

LXI B, 4125h

Запись в регистры ВС адреса, по которому записано второе сообщение

4020

CD 4F 00

CALL 4Fh

Вывод сообщения «Vtoroe chislo» на Монитор

4023

1E 05

MVI E, 05h

Создание счетчика на 4 шага

4025

1D

DCR E

Вычитание единиц из значения счетчика

4026

CA 34 40

JZ 4034h

Выход из цикла(2 число введено)

4029

CD 67 00

CALL 67h

Ввод одного байта числа в аккумулятор

402C

77

MOV M,A

Копирование байта из аккумулятора в соответствующую ячейку памяти

402D

2C

INR L

Переход к следующему адресу

402E

C3 25 40

JMP 4025h

Переход на начало цикла

4031

CD 49 00

CALL 49h

Переход на новую строку

4034

21 03 50

LXI H, 5003h

Запись в пару HL адреса 4 байта 1 константы

4037

01 07 50

LXI B, 5007h

Запись в пару HL адреса 4 байта 2 константы

403A

11 03 50

LXI D, 5003h

Запись в пару HL адреса 4 байта 1 константы

403D

1A

LDAX D

Копирование в аккумулятор 4 байта 1 константы

403E

E6 7F

ANI 7Fh

Установка модуля на 1 число (Умножение на 7Fh)

4040

77

MOV M,A

Запись измененного 4 байта 1 числа на аккумулятор в память 

4041

0A

LDAX B

Копирование в аккумулятор 4 байта 2 константы

4042

E6 7F

ANI 7Fh

Установка модуля на 2 число (Умножение на 7Fh)

4044

BE

CMP M

Сравнение 4 байта двух чисел(вычитание из второго числа первое)

4045

DA 71 40

JC 4071h

Переход на адрес 4071h (если байт первого числа больше байта второго(су=1))

4048

C2 82 40

JNZ 4082h

Переход на адрес 4082h(если байт второго числа больше байта первого(су=1)),если нет перехода байты равны

404B

2B

DCX H

Уменьшение адреса байта первого числа

404C

0B

DCX B

Уменьшение адреса байта второго числа

404D

1E 04

MVI E, 04h

Создание цикла на 3 шага

404F

1D

DCR E

Вычитание единицы из значения счетчика

4050

CA 60 40

JZ 4060h

Выход из цикла(числа равны)

4053

0A

LDAX B

Копирование в аккумулятор байта 2 константы

4054

BE

CMP M

Сравнение байта двух чисел(вычитание из второго числа первое)

4055

DA 71 40

JC 4071h

Переход на адрес 4071h(если байт первого числа больше байта второго)

4058

C2 82 40

JNZ 4082h

Переход на адрес 4082h(если байт второго числа больше байта первого),если нет перехода,то байты равны

405B

0B

DCX B

Уменьшение адреса байта первого числа

405C

2B

DCX H

Уменьшение адреса байта второго числа

405D

C3 4F 40

JMP 404Fh

Переход на начало цикла

4060

21 00 60

LXI H, 6000h

Занесение в пару HL адрес ячейки, в которой нужно записать результат

4063

36 00

MVI M, 00h

Запись в ячейку памяти значения 00h( числа равны)

4065

CD 49 00

CALL 49h

Переход на новую строку

4068

01 75 42

LXI B, 4275h

Запись в регистры ВС адреса, по которому записано сообщение «Chisla ravni»

406B

CD 4F 00

CALL 4Fh

Вывод сообщения «Chisla ravni» на экран 

406E

C3 93 40

JMP 4093h

Переход на конец программы(по адресу 4093h)

4071

21 00 60

LXI B, 6000h

Занесение в пару HL адреса ячейки, в которой нужно записать результат

4074

36 01

MVI M, 01h

Запись в ячейку памяти значения 01h (первое число больше второго)

4076

CD 49 00

CALL 49h

Переход на новую строку

4079 

01 75 41

LXI B, 4175h

Запись в регистры ВС адреса, по которому записано сообщение «Pervoe chislo bolshe vtorogo»

407C

CD 4F 00

CALL 4Fh

Вывод сообщения «Pervoe chislo bolshe vtorogo» на экран 

407F

C3 93 40

JMP 4093h

Переход на конец программы(по адресу 4093h)

4082

21 00 60

LXI H, 6000h

Занесение в пару HL адреса ячейки, в которой нужно записать результат

4085

36 02

MVI M, 02h

Запись в ячейку памяти значение 02h(второе число больше первого)

4087

CD 49 00

CALL 49h

Переход на новую строку

408A

01 25 42

LXI B, 4225h

Запись в регистры ВС адреса, по которому записано сообщение «Vtoroe chislo bolshe pervogo»

408D

CD 4F 00

CALL 4Fh

Вывод сообщения «Vtoroe chislo bolshe pervogo» на экран

4090

C3 93 40

JMP 4093h

Переход на конец программы(по адресу 4093h)

4093

C3 40 00

JMP 40h

Выход в Монитор в режиме ожидания ввода команды

4096

21 00 41

LXI H, 4100h

Загрузка в пару HL адреса памяти для работы процедуры ввода TTIO

4099

CD 55 00

CALL 55h

Вызов подпрограммы TTIO ввод символа в аккумулятор 

409C

FE 30

CPI 30h

Сравнение введенного с помощью TTIO символа с кодом 30h

409E

CA A6 40

JZ 40A6h

Проверка на конец ввода текста(введен ли символ 0),если да,то переход на адрес 40А6h

40A1

77

MOV M, A

Загрузка кода символа из аккумулятора в ячейку памяти

40A2

23

INX H

Переход к следующему адресу(прибавление 1)

40A3

C3 99 40

JMP 4099h

Переход на начало цикла

40A6

AF

XRA

Обнуление аккумулятора

40A7

77

MOV M, A

Обнуление содержимого ячейки памяти

40A8

01 00 41

LXI B, 4100h

Загрузка в пару ВС начального адреса, по которому записан текст

40AB

CD 4F 00

CALL 4Fh

Вывод введенного сообщения на экран

40AE

C3 40 00

JMP 40H

Выход в Монитор в режиме ожидания ввод команды

















Результаты тестирования



    В ячейке памяти с адресами от 500016  до 500716  занесен массив констант, соответствующий заданию. На экране выводится сообщение « Pervoe chislo bolshe vtorogo », в ячейке памяти с адресом 6000  сформирован код 0116.





























































































































3. Описание средств вычислительной техники



    При выполнении курсового проекта был использован ноутбук со следующими техническими характеристиками:

Процессор: Intel Pentium Dual Core 2100 МГц Penryn (T4300)

Шина:  800 1 Mb L2 Cache

Оперативная память:  3072 Мб DDR2-800МГц

Экран: 14" LED Зеркальный (Glare)

Жесткий диск: 320 Гб (5400 rpm), SATA

Устройства ввода: Кл-ра Windows, Сенсорный планшет Touch Pad

Текстовый редактор: Microsoft Office Word 2003

Эмулятор СМ-1800 v3.01

































































Выводы

   Курсовой проект выполнен полностью в соответствии с Заданием

   В результате выполнения курсового проекта была написана программа , выполняющая сравнение по модулю двух заданных в формате плавающей точкой чисел. Главный смысл программы заключается в сравнении чисел с помощью вычитания, для этого были использованы два флага: carry  и zero.

   Благодаря выполнению проекта, я закрепила навыки программирования на языке Assembler  и узнала что-то новое об основных системах счисления.











































































Список литературы

		МикроЭВМ СМ-1800. Архитектура, программирование, применение / А.В. Гиглавный, Н.Д. Кобанов, Н.Л. Прохоров, А.Н. Шкамарда. – М.: Финансы и статистика, 1984.

		Гиляров, В.Н. МикроЭВМ СМ-1800 и ее эмулятор на ПК: Методические указания к лабораторной работе / В.Н. Гиляров. - СПб.: СПбГТИ(ТУ), 2006.

		Гиляров В.Н. Видеотерминал и клавиатура микроЭВМ: Методические указания к лабораторной работе / В.Н. Гиляров. - СПб.: СПбГТИ(ТУ),  2006.

4) http://irnik.narod.ru/htm/sistema.htm

5) http://works.tarefer.ru/69/100411/index.html

6) http://ulkolledg.narod.ru/material/Burdina_2/chisla.htm

7) http://www.intuit.ru/department/se/pinform/1/5.html