Разработка алгоритма и программная реализация на эмуляторе микро-ЭВМ СМ-1800
Двоичная, восьмеричная и шестнадцатеричная системы счисления и перевод из одной в другую. Форматы хранения чисел с плавающей точкой. Позиционная система счисления. Подпрограмма вывода служебных слов и полученных данных. Альтернативные варианты решения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.07.2014 |
Размер файла | 920,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Введение
Курсовой проект по дисциплине «Организация ЭВМ и систем» состоит из двух основных частей -- аналитической и практической. Это, соответственно, теория и непосредственно сам программный продукт. Вторая часть состоит из блок-схемы алгоритма с поясняющим текстом, листинга программы с комментариями и результатов ее тестирования.
В заключительной части курсового проекта находятся описание использованных при проектировании средств вычислительной техники (характеристика оборудования и стандартного программного обеспечения), выводы и список литературы.
Вариант №1.
1. Аналитическая часть
Подготовить для аналитической части реферативный материал на следующие темы:
с Двоичная, восьмеричная и шестнадцатеричная системы счисления.
с Правила переводов десятичных чисел в них и обратно.
с Форматы хранения чисел с плавающей точкой.
Числа для примеров в обзоре взять из второго пункта настоящего задания.
2. Практическая часть
Задача для разработки алгоритма и программной реализации на эмуляторе микро-ЭВМ СМ-1800.
Пользуясь программой Монитор занести в память ЭВМ, начиная с адреса 500016, следующий массив констант:
Адрес16 |
Константа16 |
|
5000 |
С1 |
|
5001 |
70 |
|
5002 |
FD |
|
5003 |
A4 |
Будем рассматривать эти четыре байта как число в формате с плавающей точкой (1+8+23). (старший байт числа записан в старшем адресе!) Восьмиразрядный порядок имеет смещение pсм=12810. Двоичная двадцатитрехразрядная мантисса не содержит старшей единицы, получаемой в результате нормализации.
Составить программу, формирующую следующие 4 числа:
1. «Знак числа» в ячейке 600016 (однобайтное целое число «+» -00 и «-» -01),
2. «Знак порядка» в ячейке 600116 (однобайтное целое число «+» -00 и «-» -01),
3. Модуль порядка в ячейке 600216 (однобайтное целое число),
4. Мантисса, как трехбайтное целое число в ячейках (600316-600516). Старший байт записывается в старшем адресе!
Программу располагать в памяти с ячейки 400016.
2.
3. Аналитическая часть
3.1 Двоичная, восьмеричная и шестнадцатеричная системы счисления и правила перевода из одной в другую
Системой счисления называется система изображения любых чисел с помощью ограниченного числа знаков. Системы счисления делятся на позиционные и непозиционные.
Непозиционная система счисления -- система, в которой значение символа не зависит от его положения в числе системы. Например римская система.
Позиционная система счисления -- система, в которой значение символа зависит от его места в ряду символов (цифр), изображающих число. Это значение меняется в однозначной зависимости от позиции, занимаемой цифрой, по некоторому закону. Номер позиции называется разрядом. Позиционная система счисления характеризуется основанием.
Основание(базис) -- количество знаков или символов, используемых в разрядах для изображения числа в данной системе. Обозначим основание целым числом b>1. Тогда позиционная система счисления с основанием b будет также называется b-ричной (в частности, двоичной, троичной, десятичной и т. п.).
Целое число x в b-ричной системе счисления представляется в виде конечной линейной комбинации степеней числа b:
,где аk -это целые числа, называемые цифрами, удовлетворяющие неравенству 0 ? ak ? b-1, а каждая степень bk в такой записи называется разрядом (позицией), старшинство разрядов и соответствующих им цифр определяется значением показателя степени k. Обычно для ненулевого числа x требуют, чтобы старшая цифра an-1 в b-ричном представлении x была также ненулевой.
Двоичная система счисления -- это позиционная система счисления с основанием два. В этой системе счисления цифры записываются при помощи двух символов -- 0 и 1.
Основная система для информационных технологий и цифровой техники в особенности. Процессор любой вычислительной техники работает на этой системе счисления.
Между тем уже в XI веке китайский ученый и философ Шао Юн использует двоичную систему в текстах Книги Перемен.
А первое применение приходится аж на 200 год до н.э., тогда индийский математик Пингала разработал математические основы для описания поэзии с использованием двоичной системы счисления.
Рассмотрим, как формируются числа в двоичной системе.
В привычной для нас десятеричной системе счисления мы располагаем десятью знаками-цифрами (от 0 до 9). Когда счет достигает 9, то вводится новый разряд (десятки), а единицы обнуляются и счет начинается снова. После 19 разряд десятков увеличивается на 1, а единицы снова обнуляются. И так далее.
Двоичная система счисления аналогична десятеричной, за исключением того, что в ней участвуют не 10 символов, а всего 2. Как только разряд достигает предела (т. е. единицы) появляется новый разряд, а старый обнуляется.
0 - это ноль
1 - это один (и это предел разряда)
10 - это два
11 - это три (и это снова предел)
100 - это четыре
и т.д.
Преобразование двоичной системы в десятичную и обратно.
Для преобразования из двоичной системы в десятичную используют следующую таблицу степеней основания 2:
512 |
256 |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Точка, которая стоит после 1 называется двоичной точкой.
Возьмем для примера число 110001 в двоичной системе. Что бы его преобразовать в десятичную нужно выполнить следующие действия:
Таким образом, каждое следующее число умножается на двойку в степени на 1 выше и складывается.
Обратную операцию удобно выполнять методом «в столбик», но можно хоть в уме.
Для примера возьмем число 77, которое мы хотим перевести в двоичную систему.
Теперь выполним процесс его деления на 2:
77 / 2 = 38 (1 остаток)
38 / 2 = 19 (0 остаток)
19 / 2 = 9 (1 остаток)
9 / 2 = 4 (1 остаток)
4 / 2 = 2 (0 остаток)
2 / 2 = 1 (0 остаток)
1 / 2 = 0 (1 остаток)
Остатки на каждом шаге -- это и есть число 77 в двоичной системе счисления (1001101).
Восьмеричная система счисления.
Восьмеричная система счисления -- это позиционная система счисления с основанием 8. Для представления в ней используются числа от 0 до 7.
Восьмеричная система очень удобно взаимодействует с двоичной, поэтому получила широкое распространение в цифровых устройствах. Ранее так же широко использовалась в программировании, но на данный момент почти полностью вытеснена шестнадцатеричной.
Перевод восьмеричной системы в десятичную и обратно.
Алгоритм действий аналогичен уже ранее рассмотренному в двоичной системе счисления.
Для перевода восьмеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания восьмеричной системы счисления на соответствующие цифры в разрядах восьмеричного числа.
Например, требуется перевести восьмеричное число 2357 в десятичное. В этом числе 4 цифры и 4 разряда ( разряды считаются, начиная с нулевого, которому соответствует младший бит). В соответствии с уже известным нам правилом представим его в виде суммы степеней с основанием 8:
23578 = (2·83)+(3·82)+(5·81)+(7·80) = 2·512 + 3·64 + 5·8 + 7·1 = 126310
Алгоритм обратных действий так же аналогичен ранее рассмотренному:
1. Делим десятичное число А на 8. Частное Q запоминаем для следующего шага, а остаток a записываем как младший бит восьмеричного числа.
2. Если частное q не равно 0, принимаем его за новое делимое и повторяем процедуру, описанную в шаге 1. Каждый новый остаток записывается в разряды восьмеричного числа в направлении от младшего бита к старшему.
3. Алгоритм продолжается до тех пор, пока в результате выполнения шагов 1 и 2 не получится частное Q = 0 и остаток a меньше 8.
Переведем, для примера, число 333610 в восьмеричную систему:
333610 : 8 = 41710
333610 - 333610 = 0, остаток 0 записываем в МБ восьмеричного числа.
41710 : 8 = 5210
41710 - 41610 = 1, остаток 1 записываем в следующий после МБ разряд восьмеричного числа.
5210 : 8 = 610
5210 - 4810 = 4, остаток 4 записываем в старший разряд восьмеричного числа.
610 : 8 = 010, остаток 0, записываем 6 в самый старший разряд восьмеричного числа.
В итоге получим -- 64108.
Шестнадцатеричная система счисления.
Шестнадцатеричная система счисления -- это позиционная система счисления с основанием 16.
Для отображения цифр используются следующие символы: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. То есть после обычных для десятичной системы счисления 0...9 идут латинские буквы A, B, C, D, E, F.
Данная система счисления широко используется в низкоуровневом программировании, поскольку в современных компьютерах минимальной единицей памяти является 8-битный байт, значения которого удобно записывать двумя шестнадцатеричными цифрами.
Так же в стандарте текста Юникод номер символа записывается в шестнадцатеричным виде, используя не менее 4 цифр.
Есть так же шестнадцатеричный стандарт записи цветов.
Для обозначения шестнадцатеричной системы в ассемблерах можно не только использовать нижний регистр (пример: A416), но и латинскую букву h (A4h).
Перевод из шестнадцатеричной системы счисления в десятичную и обратно.
Для примера возьмем число A4 из практической части задания.
Для перевода шестнадцатеричного числа в десятичное необходимо это число представить в виде суммы произведений степеней основания шестнадцатеричной системы счисления на соответствующие цифры в разрядах шестнадцатеричного числа.
A416 = 4·160+10·161 = 4·1+10·16= 4+160=16410
Соответственно для этого нужно помнить что А16=1010. Для этого можно пользоваться таблицей:
010 |
110 |
210 |
310 |
410 |
510 |
610 |
710 |
810 |
910 |
1010 |
1110 |
1210 |
1310 |
1410 |
1510 |
|
016 |
116 |
216 |
316 |
416 |
516 |
616 |
716 |
816 |
916 |
A16 |
B16 |
C16 |
D16 |
E16 |
F16 |
Процесс перевода числа из десятичной системы в шестнадцатеричную абсолютно аналогичен алгоритмам перевода восьмеричной и двоичной систем.
Переведем число 253 из десятичной в шестнадцатеричную систему.
25310 : 16 = 1510
25310 - 24010 = 1310, остаток 13 в виде D записываем в МБ шестнадцатеричного числа.
1510 делить уже не надо, поскольку этому числу и так соответствует F16.
Записав по начиная со старшего разряда получаем число из практической части -- FD16.
3.2 Форматы хранения чисел с плавающей точкой
Плавающая точка (плавающая запятая) -- форма представления действительных чисел, в которой число хранится в форме мантиссы и показателя степени. При этом число с плавающей запятой имеет фиксированную относительную точность и изменяющуюся абсолютную. Наиболее часто используемое представление утверждено в стандарте IEEE 754. Реализация математических операций с числами с плавающей запятой в вычислительных системах может быть как аппаратная, так и программная.
Экспоненциальная запись -- представление действительных чисел в виде мантиссы и порядка. Удобна при представлении очень больших и очень малых чисел, а также для унификации их написания.
,
где N -- записываемое число, М -- мантисса, n - основание показательной степени, р(целое) -- порядок.
Название «плавающая запятая» происходит от того, что запятая в позиционном представлении числа (десятичная запятая, или, для компьютеров, двоичная запятая -- далее по тексту просто запятая) может быть помещена где угодно относительно цифр в строке. Это положение запятой указывается отдельно во внутреннем представлении. Таким образом, представление числа в форме с плавающей запятой может рассматриваться как компьютерная реализация экспоненциальной записи чисел.
Стандарт IEEE -- Институт инженеров по электротехнике и электронике (англ. Institute of Electrical and Electronics Engineers) (I triple E -- «Ай трипл и»), международная некоммерческая ассоциация специалистов в области техники, мировой лидер в области разработки стандартов по радиоэлектронике и электротехнике.
Итак, IEEE разработал международные стандарты, которые описывают представление чисел с плавающей запятой:
с Стандарт ANSI/IEEE 754:1985 определяет требования к реализации двоичной плавающей арифметике.
с Стандарт ANSI/IEEE 854:1987 обобщает прежний стандарт, допуская дополнительно, кроме двоичного, десятичное основание представлений мантиссы и экспоненты и произвольную длину машинного слова.
Позднее требования этих стандартов были отражены в стандарте IEC 60559:1989.
Стандарты, помимо форматов представления, описывают также основные арифметические действия, операции вычисления остатка от деления, квадратного корня, преобразования из двоичного представления в десятичное и наоборот.
В большинстве современных платформ, таких как Intel реализована плавающая арифметика, соответствующая стандарту IEC 60559.
Стандарты IEEE определяют следующие форматы хранения вещественных чисел:
с С простой точностью (соответствует типам real*4 в языке Фортран и float в С)
с с двойной точностью (соответствует типам real*4 в языке Фортран и double в С)
с с расширенной точностью (соответствует типам real*10 и более в языке Фортран и long double в С)
Число в представлении с простой точностью занимает 32 двоичных разряда: 23 разряда занимает мантисса и 8 разрядов отведено для порядка. Старший разряд является знаковым.
Числа с плавающей точкой хранятся в нормализованном виде:
с В нормализованной форме точка расположена перед первой значащей, то есть, отличной от нуля цифрой мантиссы.
с Старший бит мантиссы всегда равен единице, он явным образом не указывается, а свободная позиция отводится под знак мантиссы. Таким образом при фиксированном количестве разрядов можно записать наибольшее количество значащих цифр и обеспечить наибольшую точность представления вещественного числа.
Мантисса нормализованного числа, если она не равна нулю, принадлежит диапазону [0.5, 1), в общем случае:
Порядок задается в формате с избытком (смещением) -- истинное значение порядка увеличивается на 127, сумма всегда положительна. Фактическое значение порядка находится в промежутке от -126 до +127. Основанием является 2.
Младший бит мантиссы в формате с простой точностью представляет значение 2-24 (примерно 10-7), что соответствует 7 значащим цифрам десятичного представления.
Значащие цифры числа допускают точное представление. Следующие значения имеют одинаковое (равное четырем) число значащих цифр: 3.142, 0.003142, 3.142е3.
В формате с простой точностью не имеет смысла хранить значения, содержащие более 8 десятичных разрядов мантиссы. Минимальное значение порядка -126 определяет минимальное по модулю, отличное от нуля, машинное число (около 1.17х10-38). Максимальное значение порядка составляет 127, что приблизительно соответствует значению 1.70х1038.
Число в представлении с двойной точностью занимает 64 двоичных разряда, из которых 52 разряда отводятся мантиссе и 11 разрядов порядку.
Для чисел с двойной точностью в десятичной системе диапазон значений составляет 2.22х10-308 до 1.79х10308
Количество значащих цифр и пределы изменения в этом случае больше, чем в формате с простой точностью (до 16 значащих цифр).
Расширенный формат используется для повышения точности промежуточных результатов вычислений. Диапазон значений от 3.4х10-4932 до 1.2х104932.
Рассмотрим полученные знания на примере числа, заданного в моем варианте курсового проекта:
C1 70 FD A4
11000001 |
1110000 |
11111101 |
10100100 |
Где 1 в старшем разряде (стоит помнить, что старший разряд тут A4, т. е. с конца) -- знак числа, в нашем случае, как видно, отрицательный.
Последующие 8 разрядов -- это смещенный порядок (01001001), т. е. в нашем случае это 4916 и 7310. Теперь, что бы найти знак числа и модуль порядка, нужно отнять из этого числа порядок смещения p128. В 16-ричной системе это 4916-8016. Очевидно, что порядок отрицательный, поэтому, как и будет происходить в моей программе, делаем наоборот: 8016-4916=3716. Это и есть модуль порядка. Теперь необходимо вернуть мантиссе 1 в старший разряд (так называемый неявный бит). Но т. к. она была и так, то ничего не меняется, и мантисса остается FD 70 C1 (в памяти мантисса будет выглядеть наоборот, т. к., по условию задания, старший байт числа записывается в старшем адресе).
4. Практическая часть. Блок-схема
Подпрограмма вывода служебных слов и полученных данных.
4.1 Распределение памяти и листинг программы с комментарием
Адрес |
Данные |
Ассемблерный код |
Комментарий |
|
4000 |
11 |
LXI D, 6000h |
Загрузка в пару регистров D,E адреса, по которому будет сохранен знак числа. |
|
4001 |
00 |
|||
4002 |
60 |
|||
4003 |
21 |
LXI H, 5003h |
Загрузка в пару регистров H,L адреса, по которому будет загружен старший байт числа. |
|
4004 |
03 |
|||
4005 |
50 |
|||
4006 |
7E |
MOV A,M |
Загрузка старшего байта в аккумулятор. |
|
4007 |
17 |
RAL |
Смещение числа на 1 шаг влево, в CY появляется знак числа. |
|
4008 |
DA |
JC 4011h |
Проверка знака числа. Если знак 1 -- переход по адресу 4011h. |
|
4009 |
11 |
|||
400A |
40 |
|||
400B |
3E |
MVI A,00 |
Загрузка 00 в аккумулятор. Число положительное. |
|
400C |
00 |
|||
400D |
12 |
STAX D |
Запись знака числа из аккумулятора по адресу в D,E. |
|
400E |
C3 |
JMP 4014h |
Прыжок на 4014h. |
|
400F |
14 |
|||
4010 |
40 |
|||
4011 |
3E |
MVI A,01 |
Загрузка 01 в аккумулятор. Число отрицательное. |
|
4012 |
01 |
|||
4013 |
12 |
STAX D |
Запись по адресу в D,E. |
|
4014 |
13 |
INX D |
Увеличить адрес в D,E на 1. Теперь 6001h. |
|
4015 |
21 |
LXI H, 5002h |
Запись в пару регистров H,L адреса, по которому будет загружено число. |
|
4016 |
02 |
|||
4017 |
50 |
|||
4018 |
7E |
MOV A,M |
Записать число из 5002h в аккумулятор. |
|
4019 |
17 |
RAL |
Сдвиг числа влево. Теперь в CY находится недостающий бит смещенного порядка. |
|
401A |
23 |
INX H |
Увеличить адрес в H,L на 1. Теперь 5003h. |
|
401B |
7E |
MOV A,M |
Перенести по адресу из H,L число. |
|
401C |
17 |
RAL |
Сдвиг влево на 1 бит. Теперь в аккумуляторе смещенный порядок числа. |
|
401D |
FE |
CPI 80h |
Сравнить смещенный порядок с 80h (12810),т.е. сравнить со смещением. |
|
401E |
80 |
|||
401F |
47 |
MOV B,A |
Перенести смещенный порядок в пару регистров B,C. |
|
4020 |
DA |
JC 4030h |
Проверка знака порядка. Если 1, то прыжок на подпрограмму для отрицательного порядка. Если 0, то дальше, на подпрограмму для положительного порядка. |
|
4021 |
30 |
|||
4022 |
40 |
|||
4023 |
3E |
MVI A,00 |
Запись в аккумулятор 00, порядок положительный. |
|
4024 |
00 |
|||
4025 |
12 |
STAX D |
Запись знака порядка 00 по адресу в D,E. |
|
4026 |
78 |
MOV A,B |
Начало подпрограммы для положительного порядка. Перенос порядка из пары регистров B,C в аккумулятор A. |
|
4027 |
D6 |
SUI 80h |
Вычитание из аккумулятора числа 80h, теперь в аккумуляторе модуль порядка. |
|
4028 |
80 |
|||
4029 |
11 |
LXI D, 6002h |
Запись в пару регистров D,E адреса, по которому будет сохранен модуль порядка. |
|
402A |
02 |
|||
402B |
60 |
|||
402C |
12 |
STAX D |
Запись по адресу в D,E модуля порядка из аккумулятора. |
|
402D |
C3 |
JMP 403Ah |
Прыжок на подпрограмму получения мантиссы. Конец подпрограммы для положительного порядка. |
|
402E |
3A |
|||
402F |
40 |
|||
4030 |
3E |
MVI A,01 |
Запись в аккумулятор 01, порядок отрицательный. |
|
4031 |
01 |
|||
4032 |
12 |
STAX D |
Запись в ячейку памяти находящуюся по адресу в D,E содержимого аккумулятора. |
|
4033 |
3E |
MVI A, 80h |
Начало подпрограммы для отрицательного порядка. Запись в аккумулятор смещения порядка -- 80h. |
|
4034 |
80 |
|||
4035 |
90 |
SUB B |
Вычесть из смещения порядок числа. |
|
4036 |
11 |
LXI D, 6002h |
Загрузка в D,E адреса, по которому будет сохранен модуль порядка. |
|
4037 |
02 |
|||
4038 |
60 |
|||
4039 |
12 |
STAX D |
Запись модуля порядка по адресу в D,E. Конец подпрограммы для отрицательного порядка. |
|
403A |
21 |
LXI H, 5002h |
Подпрограмма для получения мантиссы, общая для обоих знаков порядка. Загрузка в H,L адреса 5002h, по которому будет загружено число в аккумулятор. По сути, это число -- старший байт мантиссы, но еще без неявного бита. |
|
403B |
02 |
|||
403C |
50 |
|||
403D |
7E |
MOV A,M |
Перенос из 5002h в аккумулятор числа. |
|
403E |
F6 |
ORI 80h |
Логическое сложение 80h и числа в аккумуляторе. Восстановление неявного бита мантиссы числа. |
|
403F |
80 |
|||
4040 |
11 |
LXI D, 6005h |
Загрузка в D,E адреса, по которому будет отправлен старший байт мантиссы из аккумулятора в ячейку памяти. |
|
4041 |
05 |
|||
4042 |
60 |
|||
4043 |
12 |
STAX D |
Запись старшего байта мантиссы. |
|
4044 |
2B |
DCX H |
Уменьшение адреса в H,L на 1, теперь 5001h. |
|
4045 |
7E |
MOV A,M |
Перенос следующего байта мантиссы в аккумулятор. |
|
4046 |
1B |
DCX D |
Уменьшение адреса в D,E на 1, теперь 6004h. |
|
4047 |
12 |
STAX D |
Запись в ячейку памяти 6005h следующего байта мантиссы. |
|
4048 |
2B |
DCX H |
Уменьшение адреса в H,L на один, теперь 5000h. |
|
4049 |
7E |
MOV A,M |
Перенос байта из 5000h в аккумулятор. |
|
404A |
1B |
DCX D |
Уменьшение адреса в D,E на один, теперь 6003h. |
|
404B |
12 |
STAX D |
Запись в ячейку памяти 6003h младшего байта мантиссы. |
|
404C |
01 |
LXI B, 504Fh |
Загрузка адреса в B,C, по которому содержатся коды служебных слов «Знак числа». |
|
404D |
4F |
|||
404E |
50 |
|||
404F |
CD |
CALL 4Fh |
Вызов подпрограммы вывода на экран. |
|
4050 |
4F |
|||
4051 |
00 |
|||
4052 |
21 |
LXI H, 6000H |
Загрузка адреса в H,L, содержимое которого будет выведено (знак числа). |
|
4053 |
00 |
|||
4054 |
60 |
|||
4055 |
7E |
MVI A,M |
Перемещение содержимого ячейки памяти в аккумулятор. |
|
4056 |
CD |
CALL 61h |
Вызов подпрограммы вывода содержимого аккумулятора на монитор. |
|
4057 |
61 |
|||
4058 |
00 |
|||
4059 |
CD |
CALL 49h |
Вызов подпрограммы перехода на новую строку. |
|
405A |
49 |
|||
405B |
00 |
|||
405C |
01 |
LXI B, 505Ah |
Загрузка адреса в B,C с фразой «Знак порядка». |
|
405D |
5A |
|||
405E |
50 |
|||
405F |
CD |
CALL 4Fh |
Вызов подпрограммы вывода на экран служебных слов. |
|
4060 |
4F |
|||
4061 |
00 |
|||
4062 |
23 |
INX H |
Увеличение адреса в H,L на 1. |
|
4063 |
7E |
MVI A,M |
Перенос данных из памяти в аккумулятор. |
|
4064 |
CD |
CALL 61h |
Вызов подпрограммы вывода содержимого аккумулятора. |
|
4065 |
61 |
|||
4066 |
00 |
|||
4067 |
CD |
CALL 49h |
Вызов подпрограммы перехода на новую строку. |
|
4068 |
49 |
|||
4069 |
00 |
|||
406A |
01 |
LXI B, 5067h |
Загрузка в B,C адреса, который содержит фразу «Модуль порядка» |
|
406B |
67 |
|||
406C |
50 |
|||
406D |
CD |
CALL 4Fh |
Вызов подпрограммы вывода на монитор служебных фраз. |
|
406E |
4F |
|||
406F |
00 |
|||
4070 |
23 |
INX H |
Увеличение адреса в H,L на 1. |
|
4071 |
7E |
MVI A,M |
Перенос данных из памяти в аккумулятор. |
|
4072 |
CD |
CALL 61h |
Вызов подпрограммы вывода содержимого аккумулятора. |
|
4073 |
61 |
|||
4074 |
00 |
|||
4075 |
CD |
CALL 49h |
Вызов подпрограммы перехода на новую строку. |
|
4076 |
49 |
|||
4077 |
00 |
|||
4078 |
01 |
LXI B, 5076 |
Загрузка в B,C адреса, содержащего фразу «Мантисса». |
|
4079 |
76 |
|||
407A |
50 |
|||
407B |
CD |
CALL 4Fh |
Вызов подпрограммы вывода служебных фраз с новой строки. |
|
407C |
4F |
|||
407D |
00 |
|||
407E |
23 |
INX H |
Увеличение адреса в H,L на 1. |
|
407F |
7E |
MVI A,M |
Перенос содержимого памяти в аккумулятор. |
|
4080 |
CD |
CALL 61h |
Вызов подпрограммы вывода содержимого аккумулятора на экран. |
|
4081 |
61 |
|||
4082 |
00 |
|||
4083 |
23 |
INX H |
Увеличение адреса в H,L на 1. |
|
4084 |
7E |
MVI A,M |
Перенос содержимого памяти в аккумулятор. |
|
4085 |
CD |
CALL 61h |
Вызов подпрограммы вывода содержимого аккумулятора на экран. |
|
4086 |
61 |
|||
4087 |
00 |
|||
4088 |
23 |
INX H |
Увеличение адреса в H,L на 1. |
|
4089 |
7E |
MVI A,M |
Перенос содержимого памяти в аккумулятор. |
|
408A |
CD |
CALL 61h |
Вызов подпрограммы вывода содержимого аккумулятора на экран. |
|
408B |
61 |
|||
408C |
00 |
|||
408D |
C3 |
JMP 40h |
Конец программы. |
|
408E |
40 |
|||
408F |
00 |
До старта программы в памяти находятся:
Адрес |
Данные |
Комментарий |
|
5000 |
C1 |
Предзагруженные командой Монитора S 4 байта числа для обработки в программе. В данной таблице число из задания курсового проекта. Старший байт числа записан в старшем адресе. |
|
5001 |
70 |
||
5002 |
FD |
||
5003 |
A4 |
||
4000-404D |
Программа для определения знака числа, знака порядка, модуля порядка и мантиссы. |
||
504F-507E |
Служебные слова (см. ниже) |
После выполнения программы, в памяти появятся:
Адрес |
Данные |
Комментарий |
|
6000 |
01 |
Знак числа. В нашем случае число отрицательное. |
|
6001 |
01 |
Знак порядка. Порядок отрицателен. |
|
6002 |
37 |
Модуль порядка. В нашем случае 3716 или 5510. |
|
6003 |
C1 |
Младший байт мантиссы. |
|
6004 |
70 |
Байт мантиссы. |
|
6005 |
FD |
Старший байт мантиссы. Записан, как видно, в старшем адресе. |
Таким образом, протестировав программу, мы получаем тоже, что и при ручном вычислении в аналитической части. Что бы убедиться в работоспособности программы, протестируем на ней еще четыре числа.
Число16 (Начиная со ст. байта) |
Знак числа |
Знак порядка |
Модуль порядка16 |
Мантисса (Начиная со старшего байта). |
|
F6 C1 72 24 |
01 |
00 |
6D |
C1 72 24 |
|
73 0C 11 77 |
00 |
00 |
66 |
8С 11 77 |
|
81 3E 2F CC |
01 |
01 |
7E |
BE 2F CC |
|
22 13 42 74 |
00 |
01 |
3C |
93 42 74 |
Проверим одно из тестируемых чисел вручную.
Возьмем:
81 3E 2F CC
10000001 |
00111110 |
00101111 |
11001100 |
Сразу видно, что знак числа 1 -- т. е. отрицательный. Порядок следующие 8 битов -- 00000010, т. е. 210. Если вычесть по модулю из 2 смещение порядка 128, то получим 126, что в 16-ричной системе есть 7E. Вернув мантиссе в первый бит старшего байта 1, получим 10111110, что есть BE. Таким образом мантисса будет выглядеть BE 2F CC. Таким образом, т. к. в программе вышли те же значения, можно сделать вывод, что она работает корректно, ч.т.д.
Служебные слова:
В программе были задействованы служебные слова (см. скриншот выше), закодированные в КОИ-7. Они расположены в ячейках памяти 504F-507E и разделены 00 между собой:
Ячейка памяти |
Код КОИ-7 |
Символ |
|
504F |
33 |
З |
|
5050 |
6E |
Н |
|
5051 |
61 |
А |
|
5052 |
6B |
К |
|
5053 |
20 |
Пробел |
|
5054 |
7E |
Ч |
|
5055 |
69 |
И |
|
5056 |
73 |
С |
|
5057 |
6C |
Л |
|
5058 |
61 |
А |
Ячейка памяти |
Код КОИ-7 |
Символ |
|
505A |
33 |
З |
|
505B |
6E |
Н |
|
505C |
61 |
А |
|
505D |
6B |
К |
|
505E |
20 |
Пробел |
|
505F |
70 |
П |
|
5060 |
6F |
О |
|
5061 |
72 |
Р |
|
5062 |
71 |
Я |
|
5063 |
64 |
Д |
|
5064 |
6B |
К |
|
5065 |
61 |
А |
Ячейка памяти |
Код КОИ-7 |
Символ |
|
5067 |
6D |
М |
|
5068 |
6F |
О |
|
5069 |
64 |
Д |
|
506A |
75 |
У |
|
506B |
6C |
Л |
|
506C |
78 |
Ь |
|
506D |
20 |
Пробел |
|
506E |
70 |
П |
|
506F |
6F |
О |
|
5070 |
72 |
Р |
|
5071 |
71 |
Я |
|
5072 |
64 |
Д |
|
5073 |
6B |
К |
|
5074 |
61 |
А |
Ячейка памяти |
Код КОИ-7 |
Символ |
|
5076 |
6D |
М |
|
5077 |
61 |
А |
|
5078 |
6E |
Н |
|
5079 |
74 |
Т |
|
507A |
69 |
И |
|
507B |
73 |
С |
|
507C |
73 |
С |
|
507D |
61 |
А |
4.
5. Использованные при проектировании средства
система счисление подпрограмма данные
При проектировании был использован ноутбук Acer Aspire 5530 с техническими характеристиками:
Процессор: AMD Athlon X2 Dual-Core 1900 MHz
Оперативная память: 2048 Мб
Видео-карта: ATI Radeon HD 3200 2048 Мб
Жёсткий диск: 160 Гб
Встроенная клавиатура и компьютерная мышь Genius.
Программное обеспечение на ноутбуке:
Microsoft Windows XP Professional 2002 SP3
OpenOffice Professional 3.3.0
Microsoft Visio Professional 2003
Выводы
Программа спроектирована в соответствии с заданием.
Альтернативные варианты решения, как и всегда в программировании, существуют, но считаю предложенный мной наименее русурсоёмким, а значит наиболее оптимальным. В процессе проектирования был задействован всего 1 флажок (CY) и минимальное количество ячеек памяти. Программа включает в себя 78 строк (байтов) шестнадцатеричного кода и может обработать любое эспоненциальное число в коротком формате.
В ходе проектирования программы, я ознакомился с таким важным понятием как мантисса и экспоненциальная запись. Скорость обработки чисел в таком формате -- непосредственный показатель быстродействия процессора, а значит один из факторов гонки технологий. Считаю это знание необходимым для программиста и инженера.
Список использованной литературы
1. Гиляров В.Н. МикроЭВМ СМ-1800 и её эмулятор на ПК: методические указания. - СПб.: СПбГТИ(ТУ), 2006.
2. Гиляров В.Н. Стандартное программное обеспечение. Монитор: методические указания. - СПб.: СПбГТИ(ТУ), 2006.
3. Гиляров В.Н. Программирование в кодах для микроЭВМ СМ-1800: методические указания. - СПб.: СПбГТИ(ТУ), 2006.
4. Фомин С.В. Системы счисления: лекции по математике. - М.: Наука, 1987.
5. Юров В.И. Assembler: Учебник для вузов. - СПб.: Питер, 2003.
Размещено на Allbest.ru
Подобные документы
Система счисления как способ записи (изображения) чисел. История появления и развития различных систем счисления: двоичная, восьмеричная, десятичная и шестнадцатеричная. Основные принципы и правила алгоритма перевода из одной системы счисления в другую.
курсовая работа [343,1 K], добавлен 11.11.2014Анализ двоичной, восьмеричной и шестнадцатеричной систем счисления и перевода десятичных чисел. Форматы хранения чисел с плавающей точкой. Программа для преобразования массива констант в формат числа с плавающей точкой на эмуляторе микро-ЭВМ СМ-1800.
курсовая работа [266,9 K], добавлен 24.12.2013Система счисления и перевод числа из одной системы в другую. Машинное предоставление информации. Числа с фиксированной точкой: прямой, обратный (инверсный) или дополнительный код. Программная реализация алгоритма и описание использованных процедур.
курсовая работа [96,7 K], добавлен 20.11.2010Понятие и классификация систем счисления. Перевод чисел из одной системы счисления в другую. Перевод правильных и неправильных дробей. Выбор системы счисления для применения в ЭВМ. Навыки обращения с двоичными числами. Точность представления чисел в ЭВМ.
реферат [62,0 K], добавлен 13.01.2011Примеры правила перевода чисел с одной системы в другую, правила и особенности выполнения арифметических операций в двоичной системе счисления. Перевод числа с десятичной системы в двоичную систему счисления. Умножение целых чисел в двоичной системе.
контрольная работа [37,3 K], добавлен 13.02.2009Определение понятия и видов систем счисления - символического метода записи чисел, представления чисел с помощью письменных знаков. Двоичные, смешанные системы счисления. Перевод из одной системы счисления в другую и простейшие арифметические операции.
курсовая работа [232,6 K], добавлен 16.01.2012Порождение целых чисел в позиционных системах счисления. Почему мы пользуемся десятичной системой, а компьютеры - двоичной (восьмеричной и шестнадцатеричной)? Перевод чисел из одной системы в другую. Математические действия в различных системах счисления.
конспект произведения [971,1 K], добавлен 31.05.2009Целые числа в позиционных системах счисления. Недостатки двоичной системы. Разработка алгоритмов, структур данных. Программная реализация алгоритмов перевода в различные системы счисления на языке программирования С. Тестирование программного обеспечения.
курсовая работа [593,3 K], добавлен 03.01.2015История систем счисления, позиционные и непозиционные системы счисления. Двоичное кодирование в компьютере. Перевод чисел из одной системы счисления в другую. Запись цифр в римской нумерации. Славянская нумерация, сохранившаяся в богослужебных книгах.
презентация [516,8 K], добавлен 23.10.2015Десятичная система счисления, ее происхождение и применение. Арифметические операции: сложение и вычитание, умножение и деление. Перевод чисел из одной системы счисления в другую. Применение систем: азбука Морзе, алфавитное кодирование, штрих-коды.
курсовая работа [2,5 M], добавлен 12.01.2015