Разработка программ преобразования форматов двоичных данных и сортировок в машинных кодах микро-
Государственное образовательное учреждение
высшего профессионального образования
«Санкт-Петербургский государственный технологический институт
(технический университет)»
Кафедра систем автоматизированного проектирования и управления
Учебная дисциплина: Организация ЭВМ и систем
Курс: 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

Нравится материал? Поддержи автора!
Ещё документы из категории информатика:
Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.
После чего кнопка «СКАЧАТЬ» станет доступной!
Кнопочки находятся чуть ниже. Спасибо!
Кнопки:
Скачать документ