Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 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

адресу при сохранении содержимого АС

АC+1 → АС

CF

Увеличение содержимого на единицу

АС → М (33)

9F

Запись содержимого АС по

33

33

адресу 33 при сохранении содержимого AC

1D

АC+1 → АС

CF

Увеличение содержимого на единицу

АС → М (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

Окончание программы

Выполнение и контроль программы. Программа выполняется начиная с адреса 10. После выполнения необходимо проверить содержимое регистров R0 – R4. Для этого нужно прочитать содержимое ячеек памяти F7 – FB. В них должны находиться числа: 01, 05, 07, 08, 0А. Вспомогательная программа. Для облегчения контроля за выполнением программы записи регистров можно написать программу их очистки.
Заполним память командами:

Адрес ОЗУ

Команда/Данные

Код

Комментарий

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

Возврат из подпрограммы

Программа суммирования. Вызывает подпрограмму загрузки регистров. После этого производит последовательное суммирование регистров и запись результата по адресу 80.
Заполним память командами:

Адрес ОЗУ

Команда/Данные

Код

Комментарий

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

Конец программы.

выполнение программы начинается с адреса 40. Результаты расположены по адресам E0 – E4. Значение этих ячеек: FE, FA, F8, F7, F5.

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.