Автор работы: Пользователь скрыл имя, 24 Мая 2015 в 19:11, курсовая работа
Данный курсовой проект состоит из двух частей: аналитической и практической. В первой необходимо подготовить теоретический материал на тему: «Двоичная, восьмеричная и шестнадцатеричная системы счисления. Правила переводов десятичных чисел в них и обратно. Форматы хранения чисел с плавающей точкой».
Введение……………………………………………………………...7
1 Аналитическая часть………………………………..……………..8
1.1 Двоично-десятичное кодирование………………………....8
1.2 Арифметические действия над ДД-кодами…………….....9
1.3 Стандарты кодировки текстов……………………………..13
2 Описание программы-эмулятора…………………………………18
3. Практическая разработка………………………………………..21
3.1 Описание алгоритма…………………………………….....21
3.2 Листинг программы………………………………………..23
3.3 Блок схема………………………………………………….25
4.Описание использованных средств вычислительной техники..28
Вывод………………………………………………………………………….29
Список использованной литературы………………………………………..31
Обоснование выбора.
Для выполнения данного курсового проекта были предложены два различных эмулятора ЭВМ СМ-1800, разработанные студентами СПбГТИ (ТУ). В ходе сравнения по ряду причин был выбран эмулятор Смирнова.
3. Практическая разработка.
3.1 Описание алгоритма решения задачи.
Для формирования массива целых положительных однобайтных двоичных чисел без знака, соответствующий исходному массиву на первом этапе требуется определить число из кода в кодировке КОИ-7. Для этого мы будем рассматривать исходные шестнадцатиразрядные константы как совокупность двух восьмиразрядных констант, обрабатывая их по отдельности. Перед записью в результирующий массив нужно преобразовать двоично-десятичный код в двоичный код, с помощью сложения.
Распределение памяти:
L-счетчик цикла
В,С - адрес текущей исходной однобайтной константой
D,E – адрес текущей ячейки памяти результирующего массива
H,L – для хранения промежуточных результатов
Инициализация:
1.3 Загрузка в DE константы 600016
1.4 Создание счетчика
1.5 Обнуление аккумулятора
Обработка первой восьмиразрядной константы:
2.1 Загрузка
в аккумулятор старшей
2.2 Получение старшей
тетрады числа в младшей
2.3 Записать ВС в стек
2.4 Сохранение аккумулятора в В
2.5 Сохранение счетчика №2 в С
2.6 Сложить аккумулятор с В
2.7 Декремент счетчика
2.8 Если счетчик 0 не переходит к пункту 2.6
2.9 Восстановление ВС
2.10 Сохранение аккумулятора в Н
2.11
Инкремент ВС (теперь указывает
на вторую однобайтную
Обработка второй восьмиразрядной константы:
3.1
Загрузка в аккумулятор
3.2 Получение младшей тетрады числа в младшей тетраде аккумулятора
Получение результата:
4.1
Сложение аккумулятора и
4.2 Запись аккумулятора по адресу, хранящемуся в DE
Заключительная часть:
5.1 Инкремент ВС
5.2 Инкремент DE
5.3 Декремент счетчика
5.4 Если счетчик не 0 переход к этапу 2.1
5.5 Выход в монитор
3.2 Листинг программы:
Адрес |
16 ричный код |
Код ассемблера |
Комментарий | |
4000 |
01 14 50 |
LXI B 5014 h |
Загрузка в пару ВС непосредственные данные 5014 (следующий адрес после последнего байта массива шестнадцатиразрядных констант) | |
4003 |
11 0A 60 |
LXI D 600Ah |
Загрузка в пару DE непосредственные данные (следующий адрес после последнего байта результирующего массива двоичных чисел без знака) | |
4006 |
1B |
DCR E |
Декремент Е, т.е. Е=Е-1 (уменьшение адреса) | |
4007 |
0B |
DCX B |
Декремент ВС (уменьшение адреса) | |
4008 |
0A |
LDAX B |
Загрузить А из ячейки с адресом ВС (младший байт константы из массива шестнадцатиразрядных констант) | |
4009 |
DE 30 |
SUI 30h |
А=А-30 (для перевода к двоичным числам) | |
400B |
6F |
MOV L A |
Переслать из А в L | |
400C |
0B |
DCX B |
Декремент ВС (уменьшение адреса) | |
400D |
0A |
LDAX B |
Загрузить А из ячейки с адресом ВС (старший байт константы из массива шестнадцатиразрядных констант) | |
400E |
DE30 |
SUI 30h |
А=А-30 (для перехода к двоичным числам) | |
4010 |
67 |
MOV H A |
Переслать из А в Н | |
4011 |
C5 |
PUSH B |
Записать в стек пару регистров ВС | |
4012 |
7C |
MOV A H |
Переслать из Н в А | |
4013 |
0E 09 |
MVI C 09h |
Записать в С данные 09h (организация счетчика не основного цикла) | |
4015 |
06 00 |
MVI B 00h |
Записать в В данные 09h (организация счетчика не основного цикла) | |
4017 |
84 |
ADD H |
Сложить А с Н (по циклу выедет 10 раз) | |
4018 |
0D |
DCR C |
С-С-1 (шаг счетчика на вычитание) | |
4019 |
C2 17 40 |
JNZ 4017h |
Перейти по адресу 4017 если Z=0 | |
401C |
85 |
ADD L |
А=А+L (получили искомое двоичное число | |
401D |
C1 |
POP B |
Загрузить из стека пару регистров ВС | |
401E |
12 |
STAX D |
Записать А по адресу DE (запись результата) | |
401F |
13 |
INX D |
Инкрементировать DE | |
4020 |
7B |
MOV A E |
Переслать из Е в А(для организации цикла) | |
4021 |
3D |
DCR A |
Декрементировать А | |
4022 |
5F |
MOV E A |
Переслать из А в Е(для организации цикла) | |
4023 |
C2 06 04 |
JNZ 4006h |
Перейти по адресу 4006 если Z=0 (цикл закончится ,в А будут нули, а это будет когда все шестнадцатиразрядные константы будут переведены в двоичные числа без знака) | |
4026 |
C3 40 00 |
JMP 0040h |
Выход в монитор |
3.3 Блок-схема
Нет
Нет ДА
Да Нет
ДА Нет
4. Описание использованных
Характеристика оборудования:
Компьютер AMD AthlonXP 2500+(16000MHz), 256 Mb RAM,
GeForce 6600 VGA card, 512 Mb видеопамяти, монитор с разрешением 1280х1024, стандартная клавиатура, мышь.
Стандартное программное обеспечение:
Microsoft Windows XP.
Средства редактирования документов:
Microsoft Office
Вывод.
Курсовой проект полностью выполнен.
Проделанная курсовая работа позволила не только разобраться с двоично-десятичным кодированием и кодами КОИ-7, но и дала отличные навыки владения эмулятором СМ-1800, а как следствие и самой микро-ЭВМ СМ.
Так же было получено много информации о процессоре КР580ИК80А и о машинных и ассемблерных командах для этого процессора. Знание машин на машинном уровне – знание, которое необходимо иметь каждому программисту. Ассемблерные программы могут быть очень эффективными. Из программистов, с равными навыками и способностями, работающий на языке ассемблера создаст программу более компактную и быстродействующую, чем такая же программа, написанная на языке высокого уровня.
Только через написание программ на этом уровне детализации можно понять, как работает машина на самом нижнем уровне. Если вы хотите узнать о компьютере все, вы должны быть знакомы с его языком ассемблера. Единственный способ добиться этого – писать программы на этом языке.
Составление программы на языке ассемблер не вызвало сложностей. Основная трудность была оттранслировать вручную операторы ассемблера.
Адрес 16 |
Константа 10 |
6000 |
26 |
6001 |
61 |
6002 |
0С |
6003 |
00 |
6004 |
2D |
6005 |
1E |
6006 |
0E |
6007 |
63 |
6008 |
07 |
6009 |
3C |
Список литературы:
1)Гиляров
В.Н. Стандартное программное
2005 г. Стр. 22.
2)Л.Н.
Знаменская, С.В. Знаменский. Проблема
множественности русских