Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая по ЭВМ(коррекция).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
478.72 Кб
Скачать
    1. Форматы хранения чисел с плавающей точкой.

Типы значений с плавающей точкой Real, Single, Double, Extended и Comp (вещественный, с одинарной точностью, с двойной точностью, с повышенной точностью и сложный) хранятся в виде двоичного представления знака (+ или -), показателя степени и значащей части числа. Представляемое число имеет значение: +/- значащая_часть Х 2^показатель_степени где значащая часть числа представляет собой отдельный бит слева от двоичной десятичной точки (то есть 0 <= значащая часть <= 2).

Пример: Вещественный тип

Шестибайтовое (48-битовое) вещественное число (Real) подразделяется на три поля:

1 39 8

+---+------..-------+--------+

| s | f | e |

+---+------..-------+--------+

msb lsb msb lsb

Значение v числа определяется с помощью выражений:

if 0 < e <= 255, then v = (-1)^s * 2^(e-129)*(l.f).

if e = 0, then v = 0.

В схеме слева расположены старшие значащие биты, а справа - младшие значащие биты. Самое левое значение хранится в самых старших адресах. Например, для значения вещественного типа e сохраняется в первом байте, f - в следующих пяти байтах, а s - в старшем значащем бите последнего байта.

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

    1. Описание алгоритма решения задач.

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

В данной работе необходимо сравнить числа по модулю, знак в данном случае нас не интересует. Для получения модулей чисел. Проделав данную операцию, мы будем располагать двумя положительными числами, сравнение которых будет осуществлять побайтно. Вначале будут сравниваться старшие байты, рассматриваемых чисел, если они равны, будем переходить к сравнению следующих байт и т.д. В случае, когда все до последнего байта равны, то в ячейку 700016 помещаем код 00. Если же числа не равны, тогда в ячейку 700016 формируем код 01 ( левое число больше правого) или же код 02 ( правое число больше левого). В данной работе для избегания повторения одних и тех же действий с разными байтами, я использую счетчик цикла.

Распределение памяти:

L – счетчик цикла

DB,C – содержат текущий байт первого числа

D,E – содержат текущий байт второго числа

H – содержат значение текущего байта второго числа

A – содержат значение текущего байта первого числа

H,L – временное хранение значения адреса старшего байта второго числа, с последующим перемещением в пару D,E.

    1. Блок схема.

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

Распределение памяти:

L – счетчик цикла

B,C – содержат текущий байт первого числа

D,E – содержат текущий байт второго числа

H – содержит значение текущего второго числа

A – содержит значение текущего байта первого числа

H,L – временное хранение значения адреса старшего байта второго числа, с последующим перемещением в пару D,E

400016-адрес начала массива исходных чисел

Адрес16

Шестнадцатери-чный код

Код

ассемблера

комментарии

4000

31 00 80

LXI SP,8000 h

Создание стека

4003

01 03 50

LXI B,5003 h

Загрузить в пару B,C значение адреса старшего байта второго числа

4006

21 07 50

LXI H,5007 h

Загрузить H,L значение адреса старшего байта второго числа

4009

EB

XCHG

Сохранение значения адреса старшего байта второго числа в D,E

400A

1A

LDAX D

Загрузка в A значения старшего байта второго числа

400B

E6 7F

ANI 7Fh

Обнуление старшего бита, отвечающего за знак числа

400D

67

MOV H,A

Сохранение получившегося значения в регистре H

400E

0A

LDAX B

Загрузка в A значения старшего байта первого числа

400F

E6 7F

ANI 7Fh

Обнуление старшего бита, отвечающего за знак числа

4011

2E 04

MVI L, 04h

Загрузка счетчика цикла значением 4

4013

BC

CMP H

Сравнить байты чисел (содержимое A с содержимым регистра H)

4014

DA 2F 40

JC 402Fh

Если второе число больше создать в регистре B значение 02h

4017

C2 3B 40

JNZ 403Bh

Если второе число больше создать в регистре B значение 01h

401A

0B

DCX B

Получить в паре B,C значение адреса следующего байта первого числа

401B

1B

DCX D

Получить в паре D,E значение адреса следующего байта второго числа

401C

1A

LDAX D

Загрузить в A значение следующего байта второго числа

401D

67

MOV H,A

Сохранение значения в регистре H

401E

0A

LDAX B

Загрузить в A значение следующего байта первого числа

401F

2D

DCR L

Уменьшить значение счетчика на единицу

4020

C2 13 40

JNZ 4013h

Пока значение счетчика не ноль выполнять цикл

4023

3E 00

MVI A,00h

Числа равны записать в A значение 00h

4025

32 00 70

STA 7000h

Отправляем содержимое аккумулятора в ячейку 7000

4028

21 7C 30

LXI H,307Ch

Загрузка в H,L адреса, начиная с которого располагается текст : «NUMBERS ARE EQUAL».

402B

E5

PUSH H

Запись содержимого регистров H,L в стек

402C

C3 44 40

JMP 4044h

Безусловный переход к адресу 4044h, выводу на экран результатов

402F

3E 02

MVI A,02h

Записываем 02h в A

4031

32 00 70

STA 7000h

Отправляем содержимое аккумулятора в ячейку 7000h

4034

21 5D 30

LXI H,305Dh

Загрузка в H,L адреса, начиная с которого располагается текст: «THE SECOND MORE THAN THE FIRST».

4037

E5

PUSH H

Запись содержимого регистров H,L в стек

4038

C3 44 40

JMP 4044h

Безусловный переход к адресу 4044h, выводу на экран результатов

403B

3E 01

MVI A,01h

Записываем 01h в A

403D

32 00 70

STA 7000h

Отправляем содержимое аккумулятора в ячейку 7000h

4040

21 3E 30

LXI H, 303Eh

Загрузка в H,L адреса, начиная с которого располагается текст: «THE FIRST MORE THAN THE SECOND».

4043

E5

PUSH H

Запись содержимого регистров в H,L в стек

4044

01 20 30

LXI B, 3020h

Загрузка в B,C адреса, начиная с которого располагается текст: «INITIAL DATA».

4047

CD 4C 00

CALL 4Ch

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

404A

CD 49 00

CALL 49h

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

404D

21 03 50

LXI H, 5003h

Загрузить в пару H,L значение адреса старшего байта первого числа

4050

CD 00 41

CALL 4100h

Переход к подпрограмме вывода числа на экран

4053

21 07 50

LXI H, 5007h

Загрузить в пару H,L значение адреса старшего байта второго числа

4056

СD 00 41

CALL 4100h

Переход к подпрограмме вывода числа на экран

4059

С1

POP B

Извлечение из стека значений в регистры B,C

405A

CD 4C 00

CALL 4Ch

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

405D

CD 49 00

CALL 49h

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

4060

01 8E 30

LXI B,308Eh

Загрузка в B,С адреса начиная с которого располагается текст: CHANGE NUMBERS? (Y/N)

4063

CD 4C 00

CALL 4Ch

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

4066

CD 55 00

CALL 55h

Ввод кода символа в A с эхом на консоль

4069

D6 4E

SUI 4Eh

Вычитание 4Eh (Код клавиши N) из аккумулятора

406B

CD 49 00

CALL 49h

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

406E

CA 90 40

JZ 4090h

Переход по условию Z=1, т.е нажата клавиша N

4071

01 A6 30

LXI B,30A6h

Загрузка в B,C адреса начиная с которого располагается текст: ENTER NUMBERS :.

4074

CD 4C 00

CALL 4Ch

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

4077

16 08

MVI D,08h

Создание счетчика D

4079

21 00 50

LXI H, 5000h

Загрузка в H,L адреса начиная с которого располагаются исходные числа.

407C

CD 67 00

CALL 67h

Ввод двух шестнадцатеричных цифр в A

407F

77

MOV A, M

Пересылка содержимого M в A

4080

23

INX H

Положительное приращение H,L

4081

15

DCR D

Отрицательное приращение регистра D

4082

3E 20

MVI A, 20h

Пересылка 20h (код клавиши пробел) в регистр A

4084

CD 58 00

CALL 58h

Вывод пробела на экран

4087

C2 7C 40

JNZ 407Ch

Переход по условию: Z=0, т.е не все константы введены

408A

CD 49 00

CALL 49h

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

408D

C3 00 40

JMP 4000h

Безусловный переход кначалу программы

4090

CD 40 00

CALL 40h

Вход в режим ожидания ввода команды монитора.

Подпрограмма вывода числа на экран.

4100

1E 04

MVI E,20h

Создание счетчика в E

4102

7E

MOV A,M

Пересылка содержимого M в А.

4103

CD 61 00

CALL 61h

Вывод на кран бита числа.

4106

2D

DCR L

Отрицательное приращение регистра L , получение адресов следующего бита числа.

4107

3E 20

MVI A,20h

Пересылка 20h в регистр A

4109

CD 58 00

CALL 58h

Вывод пробела на экран

410С

1D

DCR E

Отрицательное приращение регистра E

410D

C2 02 41

JNZ 4102h

Переход по условию Z=0 то есть не все константы введены

4110

CD 49 00

CALL 49h

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

4113

C9

RET

Выход из подпрограммы