Разработка программ преобразования форматов двоичных данных
Двоично-десятичное кодирование. Стандарты кодирования текстов. Разработка алгоритма преобразования форматов двоичных данных, его программной реализации. Распределение памяти и листинг программы. Описание использованных средств вычислительной техники.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 16.10.2017 |
Размер файла | 82,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Разработка программ преобразования форматов двоичных данных
Введение
алгоритм программный двоичный кодирование
Задача для разработки алгоритма и программной реализации на Эмуляторе микро-ЭВМ СМ-1800.
Пользуясь программой-монитором, занести в память ЭВМ, начиная с адреса 500016, следующий массив из 10 восьмиразрядных констант:
Адрес16 |
Константа16 |
Адрес16 |
Константа16 |
|
5000 5001 5002 5003 5004 |
85 00 8D 07 80 |
5005 5006 5007 5008 5009 |
22 D4 A9 FF A0 |
Будем рассматривать их как массив однобайтных целых чисел со знаком в прямом коде.
Составить программу, которая выбирает из исходного массива (с адреса 500016), отрицательные числа и преобразует их в массив кодов КОИ-7 шестнадцатеричных цифр, записывая с адреса 600016. (600016 - символ старшей шестнадцатеричной цифры 1-го числа, 600116 - символ младшей шестнадцатеричной цифры 1-го числа и т.д.).
Программу располагать в памяти с ячейки 400016.
1.Аналитическая часть
Двоично-десятичное кодирование
Наряду с двоичными кодами, которыми оперирует ЭВМ, для ввода и вывода десятичных чисел (данных) используют специальное двоично-десятичное кодирование. При двоично-десятичном кодировании каждая десятичная цифра заменяется тетрадой (четверкой) двоичных цифр, а сами тетрады записываются последовательно в соответствии с порядком следования десятичных цифр. При обратном преобразовании двоично-десятичного кода в десятичный исходный код разбивается на тетрады вправо и влево от запятой, которые затем заменяются десятичными цифрами.
Таким образом, при двоично-десятичном кодировании фактически не производится перевод числа в новую систему счисления, а мы имеем дело с двоично-кодированной десятичной системой счисления.
Например, десятичное число 15(10)= 1111(2)= 0001 01012-10.
Арифметические действия над ДД-кодами.
Приведем один из алгоритмов сложения, который получил довольно широкое распространение.
1. Сложение чисел начинается с младших цифр (тетрад) и производится с учетом возникающих переносов из младших разрядов в старшие.
2. Вычитание мы заменяем сложением, причём число, которое мы вычитаем, нужно перевести в прямой, обратный и дополнительный коды.
Час я приведу примеры сложения и вычитания ДД-кодов, взятых из задания к своему курсовому проекту.
Произвести сложение А=0716 и В=2216.
А2-10 00000111
+
B2-1000100010
С2-10 00101001
Теперь вычтем, например, из А=8516 В=2216.
2216=0010 00102-10. Переведем это число в прямой, в обратный, затем в дополнительный коды. Получим число -2216=1110 11102-10=B'
Нужно сложить A и B'.
А2-10 10000101
+
B'2-10 1110 1110
С 2-10 0110 0011
Должно получиться число С16=63. Так и есть, младшая тетрада - это 3, а старшая - это 6.
Стандарты кодирования текстов
Для компьютерного представления текста необходимо каждому знаку присвоить некоторое число -- его код. Все современные таблицы кодировок происходят от возникшей еще в 60-е годы 7-разрядной таблицы ASCII (American Standard Code for Information Interchange), которая содержит 33 кода команд или управляющих символов, большая часть которых сегодня не используется, и 95 кодов для различных знаков, достаточных для работы с английскими текстами. При 7-разрядном кодировании каждому символу сопоставляется 7 бит, то есть число в диапазоне от 0 до 127. В простых текстовых (plain text) файлах допустимы только управляющие символы, отмечающие концы строк и переходы на позиции табуляции. Скажем, маркер конца строки в Linux -- это код 10, в Macintosh OS -- 13, в CP/M, DOS и Microsoft Windows -- последовательность кодов 13, 10.
Для аналогичного представления знаков русского алфавита ныне применяется таблица КОИ-7 (Код для Обмена Информацией 7-битный. У такого кодирования есть два важных преимущества: оно компактно (для доступа к латинским и другим буквам и возврата обратно к кириллице используются специальные управляющие коды) и вводит естественную транслитерацию, что позволяет работать с текстами на русском единообразно в разных компьютерных системах. Со временем такая кодовая таблица оказалась недостаточной для широкого использования из-за отсутствия в ее составе кодов символов русского алфавита (кириллицы) и псевдографики (символов, позволяющих строить примитивные графические изображения на текстовом экране). Возникли новые модификации кода КОИ-7 ,так называемые таблицы КОИ-7 Н1, КОИ-7 НПО, КОИ-7 НАП и КОИ-7 НПП, которые, в свою очередь, не полностью решили возникшие проблемы.
Все это привело к появлению нового кодового стандарта, так называемого кода КОИ-8. При этом способе кодирования для представления символа используется 8 бит информации, что дает возможность в рамках одной кодовой таблицы использовать 256 (28) символов. Первая половина таблицы полностью совпадает с кодовой таблицей КОИ-7 НО, вторая половина таблицы, содержащая символы большой и малой кириллицы, практически повторяет кодовую таблицу КОИ-7 Н1, но значения кодов символов кириллицы увеличены на 128. Такое построение таблицы обусловлено желанием сохранить совместимость между этими двумя стандартами. В этой таблице, в отличие от предыдущей, представлена шестнадцатеричная кодировка.
ASCII-коды все еще довольно широко используются для текстов на английском, особенно в США, а также в системах e-mail. Стандартные текстовые утилиты UNIX (grep, sed, awk) вплоть до середины 90-х по умолчанию могли работать только с ASCII -- подключение 8-го бита требовало их перекомпиляции. Сегодня 7-битная кириллица встречается, пожалуй, только в системе для подготовки научных публикаций TEX, да и то неявно, а для кодирования символов алфавитов большинства языков используется 8-разрядное кодирование, при котором каждому символу сопоставляется 8 бит или 1 байт кода. Код представляет собой число в диапазоне от 0 до 255, а первые 128 символов при таком кодировании аналогичны ASCII.
Существует пять признанных во всем мире таблиц кодировки русских букв:
· ISO 8859-5 -- стандарт международной организации по стандартизации для кириллицы, в РФ используется редко. Базируется на основной кодировке ГОСТ. Псевдографика отсутствует.
· Кодовая страница (code page, CP) 866 основана на альтернативной кодировке ГОСТ. Она создана специально для ОС MS-DOS, в которой часто используются символы псевдографики. Практически вытеснена следующей таблицей.
· Кодовая страница 1251 для Microsoft Windows стала популярной благодаря огромному влиянию фирмы Microsoft на рынок компьютерных технологий. Кроме того, в ней отсутствует ненужная в графических средах поддержка символов псевдографики и гораздо полнее, чем в других кодировках, представлены такие символы, как ©, ®, №, различные виды кавычек, тире и т. п.
· На базе ГОСТ КОИ-8 сделана koi8-r (кодовая страница 878) -- применяется в мире Linux. В ней естественным образом обеспечивается связь с 7-разрядным кодированием: отбрасыванием восьмого бита из кода буквы русского алфавита koi8-r получается код той же буквы в КОИ-7. Кодировка поддерживает символы псевдографики, занимающие около половины всех кодов. В 1993 году стандартизирована в Интернете, а в начале XXI века появились ее модификации koi8-u и koi8-ub -- с дополнениями до украинского и затем, соответственно, до белорусского. В koi8-ub вместо символов псевдографики включаются знаки разнообразных кавычек и тире, №, евро, иены и т. п. Эта кодировка находится на начальной стадии внедрения, и ее перспективы пока туманны.
· Кодовая страница 10007 -- используется на компьютерах Macintosh, по своему набору знаков почти совпадает с CP1251.
2.Практическая разработка
2.1 Описание алгоритма программы
Размещено на http://www.allbest.ru/
2.2 Распределение памяти и листинг программы
Распределение памяти.
Регистры D,E - в них хранятся адреса результатов (с 6000h).
Регистры H,L - в них находятся адреса исходных данных (с 5000h).
Регистр В - счетчик на 10 шагов (в основной программе).
Аккумулятор А - регистр, который использовался для промежуточных вычислений.
Регистр В - регистр, в котором находилась старшая тетрада числа (в подпрограмме).
Регистр С - регистр, в котором находилась младшая тетрада числа (в подпрограмме). Указатель стека - адрес 7000h.
В ячейках памяти с 5000h до 5009h находятся исходные однобайтные целые числа со знаком в прямом коде. В ячейке 5FFF хранится число положительных элементов.
Листинг программы
Адрес |
Данные |
Код Ассемблера |
Комментарии |
|
4000 |
01 55 55 |
LXI B, 5555h |
С 5555h будут храниться в НЕХ положительные элементы. |
|
4003 |
21 00 00 |
LXI H, 0000h |
Создание счетчика положительного элемента массива |
|
4006 |
31 00 A0 |
LXI SP, A000h |
Создание цикла для определения положительных членов |
|
4009 |
AF |
XRA A |
Обнуление аккумулятора |
|
400A |
11 00 50 |
LXI D, 5000h |
С 5000h исходный массив данных |
|
400D |
F5 |
PUSH PSW |
|
|
400E |
D5 |
PUSH D |
|
|
400F |
1A |
LDAX D |
|
|
4010 |
17 |
RAL |
Циклический сдвиг влево для определения знака |
|
4011 |
D4 20 40 |
CNC 4020 |
Переход по условию (CY <> 0) на 4020h |
|
4014 |
D1 |
POP D |
|
|
4015 |
F1 |
POP PSW |
|
|
4016 |
13 |
INX D |
|
|
4017 |
3C |
INR A |
Увеличение значения аккумулятора на 1 |
|
4018 |
FE 0A |
CPI 0Ah |
Сравнение значения аккумулятора с 10. |
|
401A |
DA OD 40 |
JC 400D |
|
|
401D |
C3 25 40 |
JMP 4025h |
Безусловный переход на 4025h |
|
4020 |
1A |
LDAX D |
|
|
4021 |
O2 |
STAX B |
Сохранение положительных членов массива |
|
4022 |
O3 |
INX B |
|
|
4023 |
2C |
INR L |
Увеличение счетчика положительных элементов на 1 |
|
4024 |
C9 |
RET |
Возврат в основную программу на 4014h |
|
4025 |
7D |
MOV A,L |
|
|
4026 |
FE 00 |
CPI 00h |
Сравнение значения счетчика с 0 |
|
4028 |
CA 31 40 |
JZ 4031h |
Если нет положительных значений, то переход на 4031h |
|
402B |
32 FF 5F |
STA 5FFFh |
Запись количества положительных чисел в 5FFFh |
|
402E |
C3 3C 40 |
JMP 403Ch |
Безусловный переход на 403Сh |
|
4031 |
3E 6F |
MVI A, 6Fh |
|
|
4033 |
CD 58 00 |
CALL 58h |
Вывод на экран двух нулей |
|
4036 |
CD 58 00 |
CALL 58h |
|
|
4039 |
C3 40 00 |
JMP 40h |
Ожидание ввода команды монитора |
|
403C |
E5 |
PUSH H |
|
|
403D |
11 00 60 |
LXI D, 6000h |
|
|
4040 |
01 55 55 |
LXI B, 5555h |
|
|
4043 |
0A |
LDAX B |
|
|
4044 |
E6 F0 |
ANI F0h |
Обнуление 2-й тетрады. |
|
4046 |
1F |
RAR |
Сдвиг содержимого аккумулятора на 1 вправо |
|
4047 |
1F |
RAR |
|
|
4048 |
1F |
RAR |
|
|
4049 |
1F |
RAR |
|
|
404A |
CD 5F 40 |
CALL 405Fh |
Вызов процедуры преобразования из НЕХ в КОИ-7 |
|
404D |
12 |
STAX D |
|
|
404E |
13 |
INX D |
|
|
404F |
0A |
LDAX B |
Восстановление содержимого в аккумуляторе |
|
4050 |
E6 0F |
ANI 0Fh |
Обнуление 1-й тетрады |
|
4052 |
CD 5F 40 |
CALL 405Fh |
Вызов процедуры преобразования из HEX в КОИ-7 |
|
4055 |
12 |
STAX D |
|
|
4056 |
13 |
INX D |
|
|
4057 |
O3 |
INX B |
|
|
4058 |
2D |
DCR L |
Цикл по регистру L (количество положительных элементов) |
|
4059 |
C2 43 40 |
JNZ 4043h |
|
|
405C |
C3 6A 40 |
JMP 406Ah |
Безусловный переход на 406Ah |
|
405F |
FE 0A |
CPI 0Ah |
Сравнение тетрады с 10 |
|
4061 |
D2 C7 40 |
JNC 4067h |
Если не равно 10, то переход на 4067h |
|
4064 |
F6 30 |
ORI 30h |
Логическое сложение аккумулятора с 30h |
|
4066 |
C9 |
RET |
Возврат в основную подпрограмму |
|
4067 |
C6 37 |
ADI 37h |
Сложение содержимого аккумулятора в 37h |
|
4069 |
C9 |
RET |
Возврат в подпрограмму 4067h |
3 Описание использованных при проектировании средств вычислительной техники
алгоритм программный двоичный кодирование
При выполнении данного курсового проекта и составлении пояснительной записки к нему были задействованы средства компьютера с основными характеристиками: процессор Intel Celeron M processor 370 (1.5 GHz, 400 MHz FSB, 1MB L2 cache). 256MB DDR2, 40GB HDD. Вся разработка проводилась в системной оболочке Microsoft Windows XP.
Составление непосредственно программы курсового проекта проходило, как упоминалось ранее, на эмуляторе СМ-1800, разработанного Смирновым А.С. Помимо вычислительных средств, к которым мне пришлось прибегнуть (калькулятор), в работе были использованы средства Microsoft Office, а именно, Microsoft Word, в котором полностью оформлялась данная пояснительная записка.
Выводы
Проект выполнен полностью в соответствии с заданием. Я получил большие навыки работы с эмулятором, в частности с программой “Монитор”. Хочу заметить, что не все подпрограммы написаны мною, я также воспользовался и стандартными программами “Монитора”. При помощи стандартных команд ассемблера была создана программа, переводящая заданный массив однобайтных констант в массив кодов КОИ-7. Вполне возможно, что существуют более рациональные алгоритмы реализации данной задачи, использующие, может быть, более короткие команды.
Существенных замечаний к работе программы Эмулятор микро-ЭВМ СМ-1800 обнаружено не было.
Литература
1. Горбунов В.Л. и др. Микропроцессоры. -М: Высшая школа, 1986.
2. Майоров, Гавриков. Практический курс программирования микропроцессорных систем. -М: Машиностроение, 1989.
3. Гуртовцев А.Л., Гудыменко С.В. Программирование для микропроцессоров. Справочное пособие. -М: Высшая школа, 1989.
4. Шаньгин В.Ф. и др. Программирование микропроцессорных систем. М: Высшая школа, 1990.
5. Гиляров В.Н. Программирование в кодах для микроЭВМ СМ-1800. Методические указания. СПбГТИ. -СП, 2005
6. Гиляров В.Н. Стандартное программное обеспечение. Монитор Методические указания. СПбГТИ. -СП, 2005
Размещено на Allbest.ru
...Подобные документы
Анализ двоичной, восьмеричной и шестнадцатеричной систем счисления и перевода десятичных чисел. Форматы хранения чисел с плавающей точкой. Программа для преобразования массива констант в формат числа с плавающей точкой на эмуляторе микро-ЭВМ СМ-1800.
курсовая работа [266,9 K], добавлен 24.12.2013Исследование процесса разработки и кодирования приложения для перевода двоичных чисел в шестнадцатеричные в операционной системе Linux. Изучение требований к надежности и программной документации. Определение основных состояний интерфейса программы.
курсовая работа [2,4 M], добавлен 23.06.2012Разработка алгоритма выполнения операций умножения двоичных чисел в формате расширенной точности на сумматоре обратного кода. Преобразование входной строки в десятичное число. Разработка алгоритма арифметической операции. Тестирование программы-эмулятора.
курсовая работа [119,1 K], добавлен 24.06.2012Разработка программы для изображения в графическом режиме на экране структуры модели вычислительной машины и демонстрация функционирования при выполнении программы вычисления. Описание процесса разработки, обоснование структур данных и их форматов.
курсовая работа [170,3 K], добавлен 07.06.2019Общие сведения об управляющих автоматах, построенных на основе принципа программируемой логики. Программно-вычислительный комплекс разработки эффективных форматов микрокоманд для различных способов кодирования. Алгоритмы кодирования операционной части.
дипломная работа [2,1 M], добавлен 26.06.2012Ознакомление с особенностями программной реализации алгоритмов преобразования одномерных массивов. Исследование развития вычислительной техники, которое подразумевает использование компьютерных и информационных технологий. Изучение интерфейса программы.
курсовая работа [1,0 M], добавлен 02.06.2017Работа с файлами на языке Pascal. Типы файлов: типизированные, текстовые, нетипизированные. Сущность процедуры и функции. Использование процедуры Read и Write для операций чтения и записи в типизированном файле. Листинг программы и экранные формы.
лабораторная работа [38,4 K], добавлен 13.02.2009Язык Паскаль - процедурно-ориентированный язык высокого уровня, его основные достоинства. Разработка программ для решения задач. Выбор метода обработки информации. Форма представления исходных данных. Разработка алгоритма, его описание, листинг программы.
курсовая работа [3,6 M], добавлен 17.02.2013Файл - именованная область внешней памяти ПК. Процедуры и функции языка Pascal для работы с файлами прямого и последовательного доступа. Классификация файлов по типу доступа к элементам. Обоснование выбора средств программной реализации блоков.
лабораторная работа [10,4 K], добавлен 13.02.2009Разработка системы автоматизации преобразования структурированных данных в корпоративном правовом портале. Выбор программных средств реализации проекта, его предметная область. Определение проблемы и выработка требований. Разработка проекта приложения.
дипломная работа [4,6 M], добавлен 07.07.2013Описание алгоритмического языка для программирования прикладных систем обработки данных. Проектирование базы данных для ведения банковских счетов юридических лиц. Разработка комплекса программ и средств взаимодействия с ЭВМ (меню). Листинг программы.
курсовая работа [76,1 K], добавлен 07.12.2011Математическое описание операций преобразования плоских фигур. Выбор и обоснование языка программирования и среды разработки. Задание базовой фигуры. Разработка алгоритма работы программы. Проверка корректности работы программы в различных режимах.
курсовая работа [567,6 K], добавлен 13.10.2014База данных как основа автоматизации. Разработка, описание и реализация программного обеспечения "Точность и правильность методов и результатов измерений для центральной заводской лаборатории ОАО "Акрилат". Листинг, исходные коды программы и базы данных.
дипломная работа [1,0 M], добавлен 23.06.2012Описание архитектуры внешних выводов кристалла процессора. Рассмотрение форматов данных для целых чисел со знаком и без знака. Выбор модели памяти и структуры регистровой памяти. Использование кэш прямого отображения. Арифметические и логические команды.
курсовая работа [890,5 K], добавлен 05.06.2015Диагностический анализ системы управления предприятия, его организационной и функциональной структуры. Разработка проекта подсистемы учёта средств вычислительной техники, описание технического обеспечения базы данных. Характеристика программного продукта.
дипломная работа [7,2 M], добавлен 28.06.2011Описание использованных структур данных и разработка программы, обеспечивающей сжатие данных по алгоритму LZ77 с пошаговой визуализацией. Описание процедур, функций, структуры приложения и интерфейса пользователя. Тест и анализ работы алгоритма LZ77.
курсовая работа [537,9 K], добавлен 28.06.2011Хеширование как процесс алгоритмического преобразования ключей в адреса. Понятие В-дерева и разработка процедуры, реализующей вставку в В-дерево. Блок-схема алгоритма и пример программы обработки текстовых данных, хранящихся в произвольном файле.
курсовая работа [213,8 K], добавлен 07.02.2011Разработка устройства обработки и передачи информации для суммирования двоичных чисел в дополнительном коде. Разработка алгоритма выполнения операций и структурной схемы. Составление временной диаграммы управляющих сигналов, расчет быстродействия.
курсовая работа [32,0 K], добавлен 16.08.2012Редактирование аналоговых и цифровых изображений. Описание графических форматов файла. Алгоритм отображения файла и реализации эффектов. Программа для работы с графическими форматами. Назначение и взаимодействие модулей. Перечень процедур и функций.
курсовая работа [516,8 K], добавлен 28.05.2013Методика разработки и апробации обучающей программы о двоичных сумматорах, позволяющей пользователю понять принцип работы двоичных сумматоров, а также научиться складывать числа в двоичной системе счисления. Листинг и оценка эффективности программы.
курсовая работа [910,6 K], добавлен 27.10.2013