Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ им.
Лабораторная работа № 1.
по курсу "Архитектура ЭВМ"
"Исследование секционированных микроэвм на базе микропроцессорного комплекса К-589"
Отчет.
Выполнил студент группы ИУ5-54
Киреев Иван
Проверил преподаватель
Москва 2006 г.
Цель работы:
Изучение методов построения секционируемых микроЭВМ, системы команд учебной ЭВМ МП-589; составление и ввод программ, контроль их выполнения.
Выполнение работы.
Загрузка тестовой программы.
Загрузим в ОЗУ следующую программу.
Адрес ОЗУ | Команда | Код команды | Комментарий |
10 | 0 → АС | BF | Обнуление содержимого АС |
11 | AC+1 → АС | СF | Увеличение АС на единицу |
12 | АС → М (30) | 9F | Запись содержимого АС в ОЗУ |
13 | 30 | 30 | по адресу 30 при сохранении содержимого АС |
14 | АC+1 → АС | CF | Увеличение содержимого АС на единицу |
15 | АС → М (31) | 9F | Запись содержимого АС по |
16 | 31 | 31 | адресу 31 при сохранении содержимого АС |
17 | АC+1 → АС | CF | Увеличение содержимого АС на единицу |
18 | АС → М (32) | 9F | Запись содержимого АС по |
19 | 32 | 32 | адресу при сохранении содержимого АС |
1А | АC+1 → АС | CF | Увеличение содержимого на единицу |
1В | АС → М (33) | 9F | Запись содержимого АС по |
1С | 33 | 33 | адресу 33 при сохранении содержимого AC |
1D | АC+1 → АС | CF | Увеличение содержимого на единицу |
1Е | АС → М (34) | 9F | Запись содержимого АС по |
1F | 34 | 34 | адресу 34 при сохранении содержимого AC |
20 | END | AO | Окончание программы |
Для этого необходимо нажать кнопку SA и ввести начальный адрес 10. После этого нажать кнопку WI и ввести первое слово команды BF. Далее нажать WI и ввести следующее слово программы CF. Аналогично загрузить всю программу.
Для запуска программы необходимо установить начальный адрес (SA 10) и нажать кнопку RC для выполнения всей программы. Выполнение остановится на команде END.
Результат выполнения программы можно контролировать читая адреса памяти, которые она изменяет.
Для этого надо установить адрес (SA 30) и на индикаторах шины данных наблюдать значение в этой ячейке памяти. Далее можно воспользоваться клавишей RI для чтения всех адресов памяти (30, 31, 32, 33, 34). Наблюдаемые в них числа: 0, 1, 2, 3, 4.
Аналогично будут загружаться, выполняться и проверяться все программы.
Выполнение самостоятельного задания.
1. Запись чисел в регистры.
Задача:
Разработать алгоритм и программу в записи во внутренние регистры R0… R5 ряда числа. Ввести программу в микроЭВМ, начиная с начального адреса 1016. Проконтролировать и выполнить программу в режимах RS и RС. C помощью команд SA и RI провести контроль выполнения программы путем просмотра ячеек ОЗУ, в которых хранится содержимое регистров R0… R7 начиная с первой ячейки (см. карту памяти на рис. 4).
Варианты исходных чисел приведены ниже:
а) 01, 05, 07, 08, 0А. Все числа представлены в шестнадцатеричной форме.
Решение:
Необходимо занести указанные числа в программу. Оптимальным, исходя из имеющейся системы команд, будет сохранение чисел в ОЗУ, начиная с некоторого адреса.Заполним память данными:
Адрес ОЗУ | Команда/Данные | Код | Комментарий |
60 | Данные | 01 | Данные для программы |
61 | Данные | 05 | Данные для программы |
62 | Данные | 07 | Данные для программы |
63 | Данные | 08 | Данные для программы |
64 | Данные | 0A | Данные для программы |
Примечание. Не рекомендуется использовать адреса близкие к концу ОП (приблизительно F0 – FF, при небольшой глубине стека). Так как там находится стек и отображение регистров.
Написание программы. Программа состоит из групп команд, последовательно считывающих данные из ОП в аккумулятор и загрузке регистра из аккумулятора. В конце программы ставим команду END.Заполним память командами:
Адрес ОЗУ | Команда/Данные | Код | Комментарий |
10 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
11 | N | 60 | С адреса 60 |
12 | АС → R0 | 5A | Загрузка R0 из аккумулятора |
13 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
14 | N | 61 | С адреса 61 |
15 | АС → R1 | 5B | Загрузка R1 из аккумулятора |
16 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
17 | N | 62 | С адреса 62 |
18 | АС → R2 | 5C | Загрузка R2 из аккумулятора |
19 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
1A | N | 63 | С адреса 63 |
1B | АС → R3 | 5D | Загрузка R3 из аккумулятора |
1C | Mn → AC | 9E | Загрузка аккумулятора из памяти |
1D | N | 64 | С адреса 64 |
1E | АС → R4 | 5E | Загрузка R4 из аккумулятора |
1F | END | A0 | Окончание программы |
Заполним память командами:
Адрес ОЗУ | Команда/Данные | Код | Комментарий |
21 | 0 → R0 | B7 | Очистка регистра R0 |
22 | 0 → R1 | B8 | Очистка регистра R1 |
23 | 0 → R2 | B9 | Очистка регистра R2 |
24 | 0 → R3 | BA | Очистка регистра R3 |
25 | 0 → R4 | BB | Очистка регистра R4 |
26 | END | A0 | Окончание программы |
Программа выполняется, начиная с 21 адреса. После выполнения регистры, которые отображены в памяти по адресам F7 – FB обнулены. Чередуя программы записи регистров и их очистки можно контролировать правильность выполнения этих программ.
2. Суммирование регистров.
Задача:
Разработать алгоритм и программу выполнения операции сложения
∑ = R0 + R1 + R2 + R3 + R4 +.
Для сложения использовать содержимое регистров R0… R5, записанных с помощью программы, приведенной в ч. 1. Результат записать в ячейку ОЗУ с адресом 8016. Составленную программу ввести в ОЗУ, начиная с начального процесса 4016. Проверить правильность ввода. Выполнить программу в режиме RS и RC. Проверить правильность выполнения программы путем контроля содержимого ячейки ОЗУ по адресу 8016.
Решение.
Необходимо модифицировать программу 1 таким образом, чтобы ее можно было использовать как процедуру. Для этого надо команду END заменить командой RET.Адрес ОЗУ | Команда/Данные | Код | Комментарий |
1F | RET | A7 | Возврат из подпрограммы |
Заполним память командами:
Адрес ОЗУ | Команда/Данные | Код | Комментарий |
40 | CALLn | 65 | Вызов подпрограммы записи регистров |
41 | N | 10 | Расположенной по адресу 10. |
42 | R0 → AC | A8 | Помещение R0 в аккумулятор |
43 | R1+AC → R1, AC | 78 | Суммирование с накоплением в аккумуляторе. |
44 | R2+AC → R2, AC | 79 | Суммирование с накоплением в аккумуляторе. |
45 | R3+AC → R3, AC | 7A | Суммирование с накоплением в аккумуляторе. |
46 | R4+AC → R4, AC | 7B | Суммирование с накоплением в аккумуляторе. |
47 | AC → Mn | 9F | Загрузка аккумулятора в память |
48 | N | 80 | По адресу 80 |
49 | END | A0 | Конец программы |
Выполнение программы начинается с адреса 40. Результатом будет сумма чисел 01, 05, 07, 08, 0А, расположенная по адресу 80. Сумма равна 1F.
В процессе отладки в пошаговом режиме можно наблюдать выполнение команды перехода. При выполнении этой команды значение адреса изменяется и начинается выполнение подпрограммы. При выполнении команды возврата адрес восстанавливается.3. Программа инвертирования регистров.
Задача:
Разработать алгоритм и программу выполнения операции инвертирования содержимого регистров R0…R5. В качестве исходных данных использовать содержимое R0… R5. Результаты выполнения операций записать в ячейки ОЗУ, начиная с адреса Е0. Проверить правильность ввода. Выполнить программу в режимах RS и RC. Проверить правильность выполнения программы путем контроля содержимого ячеек ОЗУ, начиная с адреса EO.
Решение:
Алгоритм. Необходимо заполнить регистры значениями. Далее последовательно для каждого регистра происходит запись его значения в аккумулятор, инвертирование аккумулятора и запись полученного значения по нужному адресу памяти. Заполним память командами:Адрес ОЗУ | Команда/Данные | Код | Комментарий |
21 | CALLn | 65 | Вызов подпрограммы записи регистров |
22 | N | 10 | Расположенной по адресу 10. |
23 | R0 → AC | A8 | Помещение R0 в аккумулятор |
24 | Not(AC) → AC | 72 | Инвертирование аккумулятора. |
25 | AC → Mn | 9F | Загрузка аккумулятора в память |
26 | N | E0 | По адресу E0 |
27 | R0 → AC | A9 | Помещение R1 в аккумулятор |
28 | Not(AC) → AC | 72 | Инвертирование аккумулятора. |
29 | AC → Mn | 9F | Загрузка аккумулятора в память |
2A | N | E1 | По адресу E1 |
2B | R0 → AC | AA | Помещение R2 в аккумулятор |
2C | Not(AC) → AC | 72 | Инвертирование аккумулятора. |
2D | AC → Mn | 9F | Загрузка аккумулятора в память |
2E | N | E2 | По адресу E2 |
2F | R0 → AC | AB | Помещение R3 в аккумулятор |
30 | Not(AC) → AC | 72 | Инвертирование аккумулятора. |
31 | AC → Mn | 9F | Загрузка аккумулятора в память |
32 | N | E3 | По адресу E3 |
33 | R0 → AC | AC | Помещение R4 в аккумулятор |
34 | Not(AC) → AC | 72 | Инвертирование аккумулятора. |
35 | AC → Mn | 9F | Загрузка аккумулятора в память |
36 | N | E4 | По адресу E4 |
37 | END | A0 | Конец программы. |
4. Программа анализа знака числа.
Задача:
По адресам 10 и 11 находятся два произвольных числа. Написать программу, которая последовательно проверяя эти числа помещает положительные по адресу 40, отрицательные по адресу 50.
Решение:
1. Для проверки знака числа используем команду сдвига влево с проверкой старшего бита. Напишем подпрограммы для положительных и отрицательных чисел, для чисел, расположенных по адресу 10 и 11.
2. Заполним память командами:
Адрес ОЗУ | Команда/Данные | Код | Комментарий |
20 | 0 → AC | BF | Очистка аккумулятора |
21 | AC → Mn | 9F | Загрузка аккумулятора в память |
22 | N | 40 | По адресу 40. Очистка ячейки. |
23 | AC → Mn | 9F | Загрузка аккумулятора в память |
24 | N | 50 | По адресу 50. Очистка ячейки. |
25 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
26 | N | 10 | С адреса 10. Первое число. |
27 | ALA | 4C | Сдвиг с проверкой знака |
28 | A1 | 60 | Если "+" то переход по адресу 60 |
29 | A2 | 70 | Если "–" то переход по адресу 70 |
2A | Mn → AC | 9E | Загрузка аккумулятора из памяти |
2B | N | 11 | С адреса 11. Второе число. |
2C | ALA | 4C | Сдвиг с проверкой знака |
2D | A1 | 80 | Если "+" то переход по адресу 80 |
2E | A2 | 90 | Если "–" то переход по адресу 90 |
2F | END | A0 | Конец программы. |
60 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
61 | N | 10 | С адреса 10. Первое число. |
62 | AC → Mn | 9F | Загрузка аккумулятора в память |
63 | N | 40 | По адресу 40. Положительное значение |
64 | GOTOn | 0A | Безусловный переход |
65 | N | 2A | По адресу 2A. Возврат |
70 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
71 | N | 10 | С адреса 10. Первое число. |
72 | AC → Mn | 9F | Загрузка аккумулятора в память |
73 | N | 50 | По адресу 50. Отрицательное значение |
74 | GOTOn | 0A | Безусловный переход |
75 | N | 2A | По адресу 2A. Возврат |
80 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
81 | N | 11 | С адреса 11. Второе число. |
82 | AC → Mn | 9F | Загрузка аккумулятора в память |
83 | N | 40 | По адресу 40. Положительное значение |
84 | GOTOn | 0A | Безусловный переход |
85 | N | 2F | По адресу 2F. Возврат |
90 | Mn → AC | 9E | Загрузка аккумулятора из памяти |
91 | N | 11 | С адреса 11. Второе число. |
92 | AC → Mn | 9F | Загрузка аккумулятора в память |
93 | N | 50 | По адресу 50. Отрицательное значение |
94 | GOTOn | 0A | Безусловный переход |
95 | N | 2F | По адресу 2F. Возврат |
3. Выполнение программы начинается с адреса 20. Перед выполнением необходимо загрузить входные параметры по адресам 10 и 11. Результаты выполнения находятся по адресам 40 и 50. Если входные числа одного знака, то в по адресу результата находится последнее из чисел, то есть взятое с адрес 11. Неиспользованное выходное значение равно в этом случае 00.


