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

Особенности разработки программы, преобразующей массив чисел в соответствующий формат. Анализ двоично-десятичного кодирования. Стандарты кодирования текстов. Юникод как единый стандарт кодировки для множества алфавитов. Примеры арифметики с ДД-кодами.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 07.06.2016
Размер файла 99,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru

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

Индивидуальное задание

1. Подготовить для аналитической части реферативный материал на тему:

Двоично-десятичное кодирование. Арифметические действия над ДД-кодами. Стандарты кодирования текстов. Примеры арифметики с ДД-кодами привести на основе чисел из таблицы п.2 после их перевода в ДД.

2. Задача для разработки алгоритма и программной реализации на Эмуляторе микро-ЭВМ СМ-1800

Пользуясь программой-монитором, занести в память ЭВМ, начиная с адреса 500016, следующий массив из 10 восьмиразрядных констант:

Адрес16

Константа16

Адрес16

Константа16

5000

FF

5005

00

5001

35

5006

F4

5002

57

5007

9A

5003

8D

5008

07

5004

80

5009

0A

Будем рассматривать эти коды как массив однобайтных целых положительных чисел без знака.

Составить программу, которая сортирует исходный массив (с адреса 500016) по возрастанию и преобразует его в массив кодов символов шестнадцатеричных цифр КОИ-7 с адреса 700016 (700016 - символ старшей шестнадцатеричной цифры 1-го числа, 700116 - символ младшей шестнадцатеричной цифры 1-го числа и т.д.).

Программу располагать в памяти с ячейки 400016.

  • Двоично- десятичное кодирование
    • Неупакованный десятичный код является подмножеством международной таблицы кодирования символов ASCII (Таблица). Видно, что для хранения неупакованных десятичных чисел требуется в два раза больше памяти, так как каждая цифра представляется 8-битным кодом.

Введение

программа юникод кодирование

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

Задача для разработки алгоритма и программной реализации на эмуляторе микроэвм СМ - 1800.

Пользуясь программой-монитором, занести в память ЭВМ, начиная с адреса 500016, следующий массив из 10 восьмиразрядных констант:

Адрес16

Константа16

Адрес16

Константа16

5000

FF

5005

00

5001

35

5006

F4

5002

57

5007

9A

5003

8D

5008

07

5004

80

5009

0A

Будем рассматривать эти коды как массив однобайтных целых положительных чисел без знака.

Составить программу, которая сортирует исходный массив (с адреса 500016) по возрастанию и преобразует его в массив кодов символов шестнадцатеричных цифр КОИ-7 с адреса 700016 (700016 - символ старшей шестнадцатеричной цифры 1-го числа, 700116 - символ младшей шестнадцатеричной цифры 1-го числа и т.д.).

Программу располагать в памяти с ячейки 400016.

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

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

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

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

2.Двоично-десятичное кодирование

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

Принцип построения этой системы достаточно прост: каждая десятичная цифра преобразуется прямо в свой десятичный эквивалент из 4 бит, например:

369110=0011 0110 1001 0001DEC:

Десятичное число3691

Двоично-десятичное число0011011010010001

Преобразуем двоично-десятичное число 1000 0000 0111 0010 в его десятичный эквивалент. Каждая группа из 4 бит преобразуется в её десятичный эквивалент. Получим 1000 0000 0111 0010DЕС = 807210:

Двоично-десятичное число1000000001110010

Десятичное число8072

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

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

В настоящее время распространены два формата представления десятичных чисел в микропроцессорах - упакованный двоично-десятичный код (BCD-Binary-Coded Decimal) и неупакованный десятичный код.

Упакованный BCD-код - это такое представление десятичного числа, когда каждая десятичная цифра представляется 4-х битным двоичным позиционным кодом 8-4-2-1. При этом байт содержит две десятичные цифры. Младшая десятичная цифра занимает правую тетраду (биты 3 : 0), старшая - левую тетраду (биты 7 :4).

Многоразрядные BCD-числа занимают несколько смежных байт. Если число является знаковым, то для представления знака в BCD-формате отводится старшая тетрада старшего байта. Для кодирования знака можно использовать шесть двоичных кодовых комбинаций, которые не используются для представления десятичных цифр. Это коды 1010-1111 (A-F в шестнадцатеричном представлении). Обычно для кодирования знака плюс применяют код 1100 (C), а для знака минус - 1101 (D). На рисунке показано BCD-представление десятичного числа "-12345":

1

1

0

1

0

0

0

1

«-»

«1»

0

0

1

0

0

0

1

1

«2»

«3»

0

1

0

0

0

1

0

1

«4»

«5»

Неупакованный десятичный код является подмножеством международной таблицы кодирования символов ASCII (Таблица). Видно, что для хранения неупакованных десятичных чисел требуется в два раза больше памяти, так как каждая цифра представляется 8-битным кодом.

Преимущества

Упрощён вывод чисел на индикацию -- вместо последовательного деления на 10 требуется просто вывести на индикацию каждый полубайт. Аналогично, проще ввод данных с цифровой клавиатуры.

Для дробных чисел (как с фиксированной, так и с плавающей запятой) при переводе в человекочитаемый десятичный формат и наоборот не теряется точность.

Упрощены умножение и деление на 10, а также округление.

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

Недостатки

· Усложнены арифметические операции.

· Требует больше памяти.

· В двоично-десятичном коде 8421-BCD существуют запрещённые комбинации битов:

Запрещённые в 8421-BCD битовые комбинации

1010

1011

1100

1101

1110

1111

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

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

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

При вычитании двоично-десятичных чисел, для каждого полубайта, получившего заём из старшего полубайта, необходимо провести коррекцию, отняв значение 0110.

Операции над двоично-десятичными числами:

Упакованные BCD-числа можно только складывать и вычитать. Для выполнения других действий над ними их нужно дополнительно преобразовывать либо в неупакованный формат, либо в двоичное представление. Из-за того, что упакованные BCD-числа представляют не слишком большой интерес, мы их рассмотрим кратко.

Сложение упакованных BCD-чисел

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

Сложение упакованных BCD-чисел

67 = 0110 0111

+

75 = 0111 0101

=

142 = 1101 1100 = 220

Как видим, в двоичном виде результат равен 1101 1100 (или 220 в десятичном представлении), что неверно. Это происходит по той причине, что микропроцессор не подозревает о существовании BCD-чисел и складывает их по правилам сложения двоичных чисел. На самом деле, результат в двоично-десятичном виде должен быть равен 0001 0100 0010 (или 142 в десятичном представлении).

Видно, что как и для неупакованных BCD-чисел, для упакованных BCD-чисел существует потребность как-то корректировать результаты арифметических операций.

Микропроцессор предоставляет для этого команду daa:

daa (Decimal Adjust for Addition) -- коррекция результата сложения для представления в десятичном виде.

Команда daa преобразует содержимое регистра al в две упакованные десятичные цифры по алгоритму, приведенному в описании команды daa.

Получившаяся в результате сложения единица (если результат сложения больше 99) запоминается в флаге cf, тем самым учитывается перенос в старший разряд.

Аналогично сложению, микропроцессор рассматривает упакованные BCD-числа как двоичные и, соответственно, выполняет вычитание BCD-чисел как двоичных.

Вычитание упакованных BCD-чисел

Выполним вычитание 67-75. Так как микропроцессор

выполняет вычитание способом сложения, то и мы последуем

этому:

67 = 0110 0111

+

-75 = 1011 0101

=

-8 = 0001 1100 = 28 ???

Как видим, результат равен 28 в десятичной системе счисления, что является абсурдом. В двоично-десятичном коде результат должен быть равен 0000 1000 (или 8 в десятичной системе счисления).

При программировании вычитания упакованных BCD-чисел программист, как и при вычитании неупакованных BCD-чисел, должен сам осуществлять контроль за знаком. Это делается с помощью флага cf, который фиксирует заем из старших разрядов.

Само вычитание BCD-чисел осуществляется простой командой вычитания sub или sbb. Коррекция результата осуществляется командой das:

das (Decimal Adjust for Substraction) -- коррекция результата вычитания для представления в десятичном виде.

Команда das преобразует содержимое регистра al в две упакованные десятичные цифры по алгоритму, приведенному в описании команды das.

Стандарты кодирования текстов

Разные стандарты кодировки для разных алфавитов Стандарт кодировки, сохраняемый вместе с текстовым файлом, предоставляет информацию, необходимую для того, чтобы отображать текст на экране. Например, в кодировке «кириллица (Windows)» знаку Й соответствует числовое значение 201. При открытии файла, содержащего эту букву, на компьютере, использующем кодировку «кириллица (Windows)», будет прочтено числовое значение 201 и на экране отобразится знак Й.

Однако если тот же самый файл открыть на компьютере, использующем другую кодировку, то он отобразит знак, которому соответствует числовое значение 201, в том стандарте кодировки, который использует данный компьютер по умолчанию. Например, если компьютер использует стандарт кодировки «Западная Европа (Windows)», этот знак в оригинальном файле, созданном в кодировке «кириллицы», будет отображаться как E, а не Й, поскольку в кодировке «Западная Европа (Windows)» значение 201 отображает знак E.

Юникод: единый стандарт кодировки для множества алфавитов

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

Стандарт представления символов ASCII - это 7-битовое описание кода символа. Поскольку в персональных компьютерах используются байты, состоящие из 8 бит, производители компьютеров часто определяют наборы символов, использующие 256 кодов вместо 128 кодов ASCII. В результате получается «расширенный набор символов» (extended character set), который включает в себя набор символов ASCII и до 128 других символов.

ASCII -коды десятичных цифр

Десятичная цифра

ASCII -код

Десятичная цифра

А8СП-код

0

$30

5

$35

1

$31

6

$36

2

$32

7

$37

3

$33

8

$38

4

$34

9

$39

Расширенный набор символов, который Windows и программы для Windows в большинстве случаев используют, называется набор символов ANSI (ANSI character set), фактически он является международным стандартом ISO.

Стандарт кодировки символов UNICODE. Стандарт Unicode был предложен некоммерческой организацией Unicode Consortium, образованной в 1991 г. Для представления каждого символа в этом стандарте используются два байта: один байт для кодирования символа, другой для кодирования признака. Тем самым обеспечивается информационная совместимость данного способа кодирования со стандартом ASCII.

3.Примеры арифметики с ДД- кодами на основе чисел из таблицы п.2 после их перевода в ДД

ДД-код

Константа16

ДД-код

Константа16

1111 1111

FF

0000 0000

00

0011 0101

35

1111 0100

F4

0101 0111

57

1001 1010

9A

1000 1101

8D

0000 0111

07

1000 0000

80

0000 1010

0A

Пример сложения:

80 (1000 0000) + 35 (0011 0101) = 115 (0001 0001 0101)

Пример вычитания:

80 (1000 0000) - 35 (0011 0101) = 45 (0100 0101)

4.Практическая часть

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

Листинг программы с комментариями.

Адрес

Машин. код

Метка

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

Комментарий

4000

31 00 80

 

LXI SP,8000H

 Создание стека программы

4003

06 0A

 

MVI B,0AH

 Установка начальных значений счётчиков цикла 

4005

0E 09

L1:

MVI C,09H

4007

21 01 50

 

LXI H,5001H

 Указываем адреса первой пары элементов массива  

400A

11 00 50

 

LXI D,5000H

400D

1A

L2:

LDAX D

 Загрузка в аккумулятор элемента массива

400E

BE

 

CMP M

 Сравниваем со следующим элементом массива

400F

DA 18 40

 

JC L3

 Если первый элемент меньше, переход по метке, иначе

4012

C5

 

PUSH B

 Сохраняем счётчики в стек

4013

4E

 

MOV C,M

 Меняем элементы массива местами

 

4014

77

 

MOV M,A

4015

79

 

MOV A,C

4016

12

 

STAX D

4017

C1

 

POP B

 Восстанавливаем счётчики из стека

4018

23

L3:

INX H

 Переход к следующей паре элементов 

4019

13

 

INX D

401A

0D

 

DCR C

  Уменьшаем счётчики и проверяем не закончилась ли сортировка 

401B

C2 0D 40

 

JNZ L2

401E

05

 

DCR B

401F

C2 05 40

 

JNZ L1

4022

C3 25 40

 

JMP KOI

 Переход к процедуре формирования кодов КОИ-7

4025

21 00 50

KOI:

LXI H,5000H

 Адрес исходного массива

4028

11 00 70

 

LXI D,7000H

 Адрес нового массива

402B

01 0A 00

 

LXI B,000AH

 Инициализация счётчика

402E

7E

A1:

MOV A,M

 Загружаем в аккумулятор число

402F

A7

 

ANA A

 Обнуляем флаг CY

4030

1F

 

RAR

  Перемещаем старшую тетраду в правую часть байта 

4031

1F

 

RAR

4032

1F

 

RAR

4033

1F

 

RAR

4034

E6 0F

 

ANI 0FH

 Обнуляем старшую тетраду

4036

F6 30

 

ORI 30H

 Записываем в старшую тетраду «3»

4038

FE 39

 

CPI 39H

 Сравниваем полученное с 39H

403A

DA 40 44

 

JC M1

 Если меньше39H, переход по метке, иначе

403D

FE 39

 

CPI 39H

 Сравниваем с 39H

403F

CA 44 40

 

JZ M1

 Если равно 39H, переход по метке, иначе

4042

C6 07

 

ADI 07H

 Добавляем 7, для выравнивая с кои-7

4044

12

M1:

STAX D

 Сохраняем полученное число 

4045

13

 

INX D

4046

7E

 

MOV A,M

 Загружаем в аккумулятор число

4047

E6 0F

 

ANI 0FH

 Обнуляем старшую тетраду

4049

F6 30

 

ORI 30H

 Записываем в старшую тетраду «3»

404B

FE 39

 

CPI 39H

 Сравниваем с 39H

404D

DA 57 40

 

JC M2

 Если меньше39H, переход по метке, иначе

4050

FE 39

 

CPI 39H

 Сравниваем с 39H

4052

CA 57 40

 

JZ M2

 Если равно 39H, переход по метке, иначе

4055

C6 07

 

ADI 07H

 Добавляем 7, для выравнивая с кои-7

4057

12

M2:

STAX D

 Сохраняем полученное число 

4058

13

 

INX D

4059

23

 

INX H

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

405A

0D

 

DCR C

 Уменьшение счётчика

405D

C2 2E 40

 

JNZ A1

 Если обработаны не все числа, переход по метке

4060

C3 40 00

 

JMP 0040 H

 Выход в монитор

Результаты работы программы

По адресу 5000 лежит массив исходных данных:

Адрес

Константа16

5000

FF

5001

35

5002

57

5003

8D

5004

80

5005

00

5006

F4

5007

9A

5008

07

5009

0A

По адресу 7000 лежит массив результатов:

Адрес

Константа16

7000

30 30

7002

30 37

7004

30 41

7006

33 35

7008

35 37

700A

38 30

700C

38 44

700E

39 41

7010

46 34

7012

46 46

Исходному массиву соответствует:

Адрес

Константа16

5000

00

5001

07

5002

0A

5003

35

5004

57

5005

80

5006

8D

5007

9A

5008

F4

5009

FF

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

Выполнение задания осуществлялось на эмуляторе микро ЭВМ СМ - 1800 (Эмулятор Смирнова), установленном на ПК на базе процессора AMD Atlon(tm) X2 240 2.79 ГГц 3.25 ГБ ОЗУ. ОС Windows XP Pro SP3.

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

Литература

1. В.Н. Гиляров - ПРОГРАММИРОВАНИЕ В КОДАХ ДЛЯ МИКРОЭВМ СМ - 1800 Методические указания, 2006

2. В.Н. Гиляров - СТАНДАРТНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. МОНИТОР. Методические указания, 2006.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.