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

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

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

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

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

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

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

Курс: 2

Группа: 897

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

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

Вариант № 4

Студентка


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

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

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

2010

Содержание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5 --> 101

0 --> 000

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

5000 --> 101 000 000 000

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

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

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

Пример.

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

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

101 000 000 100

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

101 000 000 100 --> 5004

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

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

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

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

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

Пример.

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

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

8 --> 1000

А --> 1010

F --> 1111

1 --> 0001

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

8A,F1 -> 10001010,11110001

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

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

Пример.

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

1000 0111, 1010 0011

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

1000 0111, 1010 0011 -> 87, А3

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

1.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 значений разделить поровну между положительными и отрицательными значениями порядка. В таком случае между машинным порядком и истинным (назовем его математическим) устанавливается следующее соответствие:

Машинный порядок 1 2 3 64 65 125 126 127
Математический порядок -64 -63 -62 -61 1 61 61 63

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

Мq = q + 64

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

Мq = q + 10000002

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

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

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

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

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

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

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

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

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

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

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

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

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 Вывод сообщения «Pervoechislo» на Монитор
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 Вывод сообщения «Vtoroechislo» на Монитор
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 Запись в регистры ВС адреса, по которому записано сообщение «Chislaravni»
406B CD 4F 00 CALL 4Fh Вывод сообщения «Chislaravni» на экран
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 Запись в регистры ВС адреса, по которому записано сообщение «Pervoechislobolshevtorogo»
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 Запись в регистры ВС адреса, по которому записано сообщение «Vtoroechislobolshepervogo»
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 Выход в Монитор в режиме ожидания ввод команды

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

В ячейке памяти с адресами от 500016 до 500716 занесен массив констант, соответствующий заданию. На экране выводится сообщение « Pervoechislobolshevtorogo », в ячейке памяти с адресом 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 и узнала что-то новое об основных системах счисления.

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

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

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

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

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

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

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

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

еще рефераты
Еще работы по информатике