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

Автор работы: Пользователь скрыл имя, 24 Ноября 2012 в 10:15, курсовая работа

Краткое описание

Существуют системы позиционные и непозиционные. В непозиционных системах счисления вес цифры не зависит от позиции, которую она занимает в числе. Так, например, в римской системе счисления в числе XXXII (тридцать два) вес цифры X в любой позиции равен просто десяти. В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее позиции в последовательности цифр, изображающих число. Любая позиционная система характеризуется своим основанием.

Содержание

ВВЕДЕНИЕ 5
1. АНАЛИТИЧЕСКАЯ ЧАСТЬ 6
1.1 Двоичная система счисления 6
1.2 Правила перевода десятичных чисел в двоичную систему счисления и обратно. 6
1.3 Восьмеричная система счисления 7
1.4 Правила перевода десятичных чисел в восьмеричную систему счисления и обратно. 7
1.5 Шестнадцатеричная система счисления 8
1.5 Правила перевода десятичных чисел в шестнадцатеричную систему счисления и обратно. 8
1.7 Форматы хранения чисел с плавающей точкой. 9
2. ПРАКТИЧЕСКАЯ РАЗРАБОТКА 11
2.1 Блок-схема алгоритма 11
2.2 Распределение памяти листинг программа 12
2.3 Результата тестирования программы 15
3. ОПИСАНИЕ СРЕДСТВ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ 16
ВЫВОДЫ 18
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 18

Вложенные файлы: 1 файл

11.docx

— 156.20 Кб (Скачать файл)
    1.  Правила перевода десятичных чисел в шестнадцатеричную систему счисления и обратно.

Для перевода десятичного  числа в шестнадцатеричную систему  его необходимо последовательно  делить на 16 до тех пор, пока не останется  остаток, меньший или равный 15. Число  в шестнадцатеричной системе  записывается как последовательность цифр последнего результата деления  и остатков от деления в обратном порядке.

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

      

  

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

При переводе удобно пользоваться таблицей степеней числа 16:

Таблица 3. Степени числа 16

n (степень)

0

1

2

3

4

5

6

1

16

256

4096

65536

1048576

16777216


Пример . Число  перевести в десятичную систему счисления.

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

Представление чисел  с плавающей точкой в общем  случае имеет вид:

X = <знак>M*pt,

где М – мантисса числа Х, t – порядок, p – основание ( обычно целая степень числа 2). Мантисса и порядок представляются в системе  счисления с основанием p. Знак числа  совпадает со знаком мантиссы. 
Порядок t может быть положительным или отрицательным целым числом, определяет положение точки в числе Х.

Для представления  порядка применяют смещенный код.

Для перехода к смещенному коду от дополнительного кода необходимо инвертировать знаковый разряд кода.

Особенностью смещенного кода является то , что из [X1]см > [X2]см Þ X1 >X2.

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

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

 

 

Таблица 4.

Значение 

Комбинация  
битов

3

111

2

110

1

101

0

100

-1

011

-2

010

-3

001

-4

000


 

Для представления  числа 0 выбирается битовая комбинация 100, с единицей в старшем разряде. Все последующие комбинации с  единицей в старшем разряде будут  представлять числа 1, 2, 3 соответственно. Предыдущие комбинации в обратном направлении  используются для представления чисел -1, -2,-3, -4.

Пример представления  в котором для хранения числа  используется один байт (восьмиразрядный  формат). Способ разделения байта представлен  ниже.

 

Таблица 5

Знак

Смещенный порядок

Модуль мантиссы (двоичный)

7

6..4

3 …0


 

 

 

 

 

 

 

 

 

 

 

  1. ПРАКТИЧЕСКАЯ РАЗРАБОТКА

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

Начало


Установка стека по адресу 8000h

Загрузка в аккумулятор  значения по адресу 5002h — второй байт числа, сдвиг аккумулятора влево. Флажок су принимает значение первого разряда байта.

Загрузка в аккумулятор  значения по адресу 5003h - первый байт числа, сдвиг аккумулятора влево. В конец байта помещается значение флажка су, во флажок су записывается первый бит — знак числа.

После двух сдвигов в аккумуляторе получается значение смещенного порядка. Запись его значения в регистр С.

Запись в длинный регистр H,L адреса 7000h для сохранения знака числа, хранящегося в су

Вычитание из аккумулятора 80h (смещение) для определения знака порядка. Если су=0, значит значение в аккумуляторе больше чем 80h, иначе произошёл заём, значит, знак порядка - «-».

Процедура записи в память значения 01h, если су=1 или 00h, если су=0.

Процедура записи в память (7001h) значения 01h, если су=1 или 00h, если су=0.

cy=1 (определение модуля порядка)

А

B

Да

Нет

1


                          2

 

           3

 

 

 

 

4

 

 

 

5

 

 

 

 

7

 

 

8

 

 

 

9

 

 

10

 

 

 

 

 

 

 

A=80h-A - значение аккумулятора меньше 80h


  11         12


A=A-80h - значение аккумулятора больше 80h




Запись значения аккумулятора в память (7002h)



           13


Загрузка в аккумулятор значения второго байта (7002h). Логическое сложение аккумулятора с 80h - добавление старшей единицы к мантиссе.


 


14


Загрузка в аккумулятор значения второго байта (7002h). Логическое сложение аккумулятора с 80h - добавление старшей единицы к мантиссе.


 


15


Запись аккумулятора в ячейку с  адресом 7005h, перезапись ячеек памяти 5000h и 5001h соответственно в ячейки 7004h и 7003h - мантисса



16

Вывод на экран значения ячеек 6001h-6005h - результата работы программы



 

17

Конец



18

 

 

 

    1.   Распределение памяти листинг программа

1. Проиллюстрируем, как выполняется получение знака числа и смещенного порядка в блоках 3 и 4. Для этого возьмём числа из примера: 84h и 0Dh. Запишем в аккумулятор число 0Dh:

су

                   

1

 

0

0

0

0

1

1

0

1



 

После сдвига в аккумуляторе будет  записано число 00011011, а в су 0. Дальше проделаем эти же операции с числом 84h.

 

су

                   

0

 

1

0

0

0

0

1

0

0



После этих преобразований в су попадёт значение 1, а в конец числа пойдёт 0, хранящийся до этого в су. И в итоге в мы получим смещённый порядок 00010000, записанный в аккумуляторе и знак числа, хранящийся в су.

2. Логическое сложение второго байта числа с 80h, применяемое в 14 блоке, обязательно даст первый разряд =1. Логическое сложение 0 и 1 даёт 1 и логическое сложение 1 и 1 даёт 1. Так что полная двадцатичетырехразрядная мантисса будет записана в трех младших байтах.

3. Блоком №16 на экран выводится следующая  информация:

Знак числа: (значение из ячейки 7000h)

Знак порядка: (значение из ячейки 700lh)

Модуль порядка: (значение из ячейки 7002h)

Мантисса: (значение из ячеек 7005h, 7004h, 7003h).

 

Листинг программы

Адрес16

Данные16

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

Комментарий

4000

4003

 

4006

 

4007

 

400A

 

400B

 

400C

 

400F

 

4012

 

4014

 

4015

 

4018

401B

 

401C

 

401E

4021

4023

 

 

4024

 

4025

 

4026

 

4029

402B

 

402E

402F

 

4032

 

4033

4034

 

4037

 

4038

 

4039

 

403C

403F

4042

4043

4046

4049

 

 

404C

404F

 

4050

4051

 

4054

4057

 

405A

405D

 

405E

405F

 

4062

4065

 

4068

406B

406E

406F

4072

4073

 

4074

4077

 

4078

 

4079

407С

31 00 80

ЗА 02 50

 

17

 

ЗА 03 50

 

17

 

4F

 

21 00 70

 

CD 00 41

 

FE 80

 

23

 

CD 00 41

 

DA 21 40

79

 

D6 80

 

C3 24 40

3E 80

91

 

 

23

 

77

 

3A 02 50

 

F6 80

21 05 70

 

77

3A 01 50

 

2B

 

77

3A 00 50

 

2B

 

77

 

01 0B 41

 

CD 4C 00

21 00 70

7E

CD 61 00

CD 49 00

01 18 41

 

 

CD 4C 00

23

 

7E

CD 61 00

 

CD 49 00

01 27 41

 

CD 4C 00

23

 

7E

CD 61 00

 

CD 49 00

01 37 41

 

CD 4C 00

21 05 70

7E

CD 61 00

2B

7E

 

CD 61 00

2B

 

7E

 

CD 61 00

C3 80 00

LXI SP, 8000h

LDA 5002h

 

RAL

 

LDA 5003h

 

RAL

 

MOV C,A

 

LXI H,7000h

 

CALL 4100h

 

CPI 80h

 

INX H

 

CALL 4100h

 

JC 4021h

MOV A,C

 

SUI 80h

 

JMP 4024h

MVI A,80h

SUB C

 

 

INX H

 

MOV M,A

 

LDA 5002h

 

ORI 80h

LXI H,7005

 

MOV M,A

LDA 5001h

 

DCX H

 

MOV M,A

LDA 5000h

 

DCX H

 

MOV M,A

 

LXI B,410Bh

 

CALL 4Ch

LXI H,7000h

MOV A,M

CALL 61h

CALL 49h

LXI B,4118h

 

 

CALL 4Ch

INX H

 

MOV A,M

CALL 61h

 

CALL 49h

LXI B,4127h

 

CALL 4Ch

INX H

 

MOV A,M

CALL 61h

 

CALL 49h

LXI B,4137h

 

CALL 4Ch

LXI H,7005h

MOV A,M

CALL 61h

DCX H

MOV A,M

 

CALL 61h

DCX H

 

MOV A,M

 

CALL 61h

JMP 80h

Создание стека с адреса 8000h

Загрузка в аккумулятор числа  из адреса 5002h

Сдвиг аккумулятора влево для сохранения в су значения первого бита

Загрузка в аккумулятор числа  из адреса 5003h

Сдвиг аккумулятора влево для сохранения знака числа и смещенного порядка

Сохранение смещённого порядка  в регистре С

Присваивание H,L значения 7000h - адрес для сохранения

Вызов подпрограммы для сохранения в ячейке 7000h знака числа - 00-«+» или 01-«-»

Вычитание из аккумулятора 80h для определения знака порядка

Увеличение H,L на единицу. Новое значение адреса для сохранения - 7001h

Вызов подпрограммы для сохранения знака порядка

Прыжок по адресу 402lh, если су=1

Запись регистра С (смещенный порядок) в аккумулятор

Вычитание из аккумулятора 80h - определение модуля порядка

Безусловный переход по адресу 4024h

Запись в аккумулятор 80h

Вычитание из 80h значения смещенного порядка - получение модуля порядка, если он меньше величины смещения

Увеличение H,L на 1. Новый адрес для сохранения - 7002h

Запись значения модуля порядка  в ячейку с адресом 7002h

Загрузка в аккумулятор второго  байта числа

Добавление старшей единицы  к мантиссе

Установление адреса 7005h для сохранения старшего байта мантиссы

Сохранение в памяти

Загрузка третьего байта числа - второго байта мантиссы в аккумулятор

Установка нового значения адреса для  сохранения - 7004h

Сохранения второго байта мантиссы

Загрузка в аккумулятор младшего байта мантиссы

Установка нового значения адреса для  сохранения

Сохранение младшего байта мантиссы в памяти

Загрузка в В,С адреса, начиная с которого располагается текст: «Znak chisla:»

Вывод текста на экран

Адрес, откуда берется знак числа

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

Печать двух чисел из аккумулятора на экране

Перевод курсора на новую строку

Загрузка в В,С адреса, начиная с которого располагается текст: «Znak poryadka:» 
Вывод текста на экран

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

Загрузка в аккумулятор знака  порядка

Печать двух чисел из аккумулятора на экране

Перевод курсора на новую строку

Загрузка в В,С адреса, начиная  с которого располагается текст: «Modul poryadka:»

Вывод текста на экран

Получение адреса, в котором содержится модуль порядка

Загрузка в аккумулятор модуля порядка

Печать двух чисел из аккумулятора на экране

Перевод курсора на новую строку

Загрузка в В,С адреса, начиная  с которого располагается текст: «Mantissa:»

Вывод текста на экран

Получение адреса старшего байта мантиссы

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

Вывод двух чисел из аккумулятора на экран

Получение адреса второго байта  мантиссы

Запись второго байта мантиссы в аккумулятор

Вывод двух чисел из аккумулятора на экран

Получение адреса младшего байта мантиссы

Запись второго байта мантиссы в аккумулятор

Вывод двух чисел из аккумулятора на экран

Завершение программы безусловным  переходом по адресу 80h


 

 

Расположение подпрограммы и вспомогательного текста:

Адрес16

Данные16

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

Комментарий

4100

4103

4105

4108

410A

 

410B -

4140

DA 08 41

36 00

C3 0A 41

36 01

C9

 

JC 4108h

MVI M,00h

JMP 410Ah

MVI M,01h

RET

 

Прыжок по адресу 4108h, если су=1

Запись в память 00, если су=0

Загрузка в  числа из адреса 5002h

Запись в память 01, если су=1

Возврат в основную программу

 

Размещение данных, которые используются как вспомогательный текст


 

    1.   Результата тестирования программы

Константы16

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

32

E0

0C

84

ZNAK CHISLA:01

ZNAK PORYADKA:01

MODUL PORYADKA:78

MANTISSA:8CE032


 

 

 

  1. ОПИСАНИЕ СРЕДСТВ ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

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

Программный продукт "Эмулятор СМ-1800" Смирнова позволяет полностью эмулировать  работу микроЭВМ СМ-1800 на персональном компьютере класса IBM PC. Внешний вид программы выполнен в стиле оригинальной микроЭВМ СМ-1800; панели эмулятора на экране схожи по внешнему виду с передними панелями соответствующих устройств СМ-1800. Это позволяет перейти от работы на оригинальной СМ-1800 к работе с эмулятором без дополнительного обучения. Сразу после запуска на экране появляются четыре основных окна: видеотерминал алфавитно-цифровой (ВТА 2000-30), пульт контроля и управления (ПКУ), клавиатура и главное меню. По умолчанию все окна привязаны друг к другу, перемещение по экрану всех трех окон происходит одновременно при перетаскивании окна главного меню. Однако, используя подменю "Конфигурация", возможно отключить привязку отдельных окон на экране. Здесь же пункт "Настройки" позволяет произвести дополнительную настройку эмулятора. Помимо "Конфигурация" имеется ещё множество подменю, целью их служит - сделать работу пользователя максимально удобной.

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