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