ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 31.03.2021
Просмотров: 6843
Скачиваний: 51
431
0012
0210
R0 + Rl => R0 A * (В + С) + В * С
0014
0200
R0 + R0 => R0 2 * [A * (В + С) + В * С]
0016
010Е
R0 => (26) результат => S
0018
0026
001A
0F00
останов
……….
0020
0002
А
0022
0003
В
0024
0004
С
0026
0034
S
Примечание. Не забывайте, что ответ 34 в памяти
ЭВМ представлен
в шестнадцатеричной
системе. В десятичной, как и положено, получится 52.
Пример 2.
Организовать ввод латинских букв таким образом: программа принимает латин-
скую букву и обрабатывает ее так, чтобы она всегда была заглавной.
Решение.
Главная «хитрость» решения состоит в том, чтобы понять, чем отличаются за-
главные буквы от строчных. Для этого из таблицы ASCII, приведенной в главе 1, выберем наугад
одну из букв и выпишем в двоичном виде коды заглавного и строчного символов. Например, для
буквы R получим
R 0101 0010
r 0111 0010
Повторив аналогичные действия еще для нескольких букв, сделаем вывод, что
коды за-
главных ч строчных букв отличаются единственным битом - пятым,
если считать младший
бит за нулевой. Запомним этот факт,
поскольку он справедлив для любого современного компью-
тера.
Итак, для нашей задачи требуется сохранить все биты, кроме пятого, значит потребуется
выполнить логическую операцию
И
с константой
1101 1111 =DF,
после чего любой код «потеряет» ненужный нам бит, сохраняя все остальные.
Еще одной особенностью решения является активное использование подпрограмм
из ПЗУ.
Поскольку при вызове подпрограмм обязательно используется стековая память, то должен быть
корректно определен указатель стека SP; программа начинает работу с установки указателя стека.
Программа 135
0000
0E6D
26 => SP установка указателя стека
0002
0026
0004
9C0D
вызов п/п 40FE ввод символа (без эхо-печати!)
0006
40FE
0008
0101
R0 => Rl сохранить введенный символ
000A
07D0
DF and R0 => R0 сделать букву заглавной
000C
00DF
000E
9C0D
вызов п/п 4088 вывести результат
0010
4088
0012
0F00
останов
Пример 3.
Найти максимум из трех чисел, находящихся в регистрах Rl, R2 и R3. Перепи-
сать наибольшее из них в R0.
Решение.
Сначала максимальное из чисел в Rl и R2 занесем в R0. После этого, если R3
окажется больше R0, «исправим положение», переписав в качестве ответа R3.
Программа 136
0000
0412
сравнить R2 с Rl
0002
3D04
если < 0, то РС=РС+4 к записи Rl (к 0008)
0004
0120
R2 => R0
запомнить R2
432
0006
1D02
РС=РС+2
обход второй ветви (к 000A)
0008
0110
Rl => R0
запомнить Rl
000A
0403
сравнить R3 с R0
000C
3D02
если < 0, то РC=РС+2 к выходу (к 0010)
000E
0130
R3 => R0
запомнить R3
0010
0F00
останов
Пример 4.
Найти сумму первых 100 натуральных чисел.
Говорят, такую задачу некогда решил в уме юный Гаусс, когда учился в школе. Мы будем
решать задачу «в лоб», т.е. честно суммировть с помощью компьютера.
Решение.
Поместим в R3
обрабатываемое в данный момент число N (меняется от 1 до 100), а в R0 - результирующую сумму
S. Зададим им начальные значения и будем циклически добавлять к S текущее значение N. При-
знаком окончания цикла будет ситуация, когда N >
100.
Программа 137
0000
2113
1 => R3
1 => N
0002
2100
0 => R0
0 => S
0С04
0230
R0 + R3 => R0
S = S + N
0006
2213
R3 + 1 => R3
N=N+1
0008
04D3
сравнить R3 с 100
сравнить N и 100
000A
0064
000C
6DF6
если ≤0, то PC=PC+F6 если N≤100,
к повторению (000E + FFF6 = 0004)
000E
0F00
останов
Пример 5.
Вывести на экран весь латинский алфавит от А до Z.
Решение.
Разместим в RO
выводимый латинский символ, первоначальное значение которого будет «А» (код 65 = 41h). Вы-
вод будем осуществлять обращением к соответствующей подпрограмме ПЗУ. Для перехода к сле-
дующему символу алфавита достаточно прибавить 1 к коду текущего символа (очень похоже на
переход к следующему числу в предыдущем примере). Остается только проверить, не выходит ли
вновь полученный символ за латинский алфавит, т.е. не превышает ли его код 5Ah («Z»), и, если
ответ будет «да» (превышает), то закончить процедуру.
Программа 138
0000
0E6D
26 => SP
установка указателя стека
0002
0026
0004
01D0
41 => R0
код первого символа
0006
0041
(«А»)
0008
9C0D
вызов п/п 4088
вывод символа
000А
4088
000С
2210
R0 + 1 => R0
следующий символ
000Е
04D0
сравнить
R0 с 5А его код ≤ «Z»?
0010
005А
(«Z»)
0012
6DF4
если ≤0, то PC=PC+F4 к повторению (0008)
0014
0F00
останов
Пример 6.
В памяти, начиная с адреса 001А, хранится некоторый текст, длина которого
равна 15 (Fh) байтам Определить номер первого, совпадающего с образцом, символа в тексте. При
отсутствии требуемого символа результат равен 0 (это практически полный аналог функции POS в
Паскале).
Решение
Поместим в R1 счетчик символов, в R2 - адрес текущего символа. Затем будем
сравнивать каждый символ текста с образцом в R0 и в случае совпадения прервем выполнение
цикла. При несовпадении будем продолжать цикл до теx пор, пока счетчик не превысит Fh, т.е. не
433
станет равным 10h Если цикл завершится по выполнении этого условия, то символ-образец найти
не удалось и в качестве ответа в R1 следует занести 0.
Программа 139
0000
2111
1 => R1
номер символа
0002
01D2
1А => R2
адрес начала текста
0004
001А
0006
С460
сравнить R0b с (R2)b
сравнить символ с образцом
0008
5D0C
если = 0, то РC=РС+2
выход при совпадении (к 0016)
000А
2211
R1 + 1 => R1
увеличить номер символа
000С
2212
R2 + 1 => R2
вычислить следующий адрес
000Е
04D1
сравнить R1 с 10
текст не закончился?
0010
0010
0012
4DF2
если ≠ 0, то PC=PC+F4
нет - к повторению (к 0006)
0014
2101
0 => R1
при отсутствии символа - 0
0016
0F00
останов
0018
0000
001А
4854
«ТН»
текст
001С
5349
«IS»
«THIS IS MY TEXT»
001E
4920
«I»
0020
2053
«S »
0022
594D
«MY»
0024
5420
«Т»
0026
5845
«EX»
0028
0054
«Т»
4.6. НЕКОТОРЫЕ СПРАВОЧНЫЕ ДАННЫЕ ПО Е-97
А. Система команд процессора
МОД
КОП
ОП1
ОП 2
Пояснения
Х
0
X
X
Нет операции
Х
1
X
X
оп l => oп 2
Х
2
X
X
oп 2 + oп 1 => oп 2
Х
3
X
X
oп 2 – oп l =>oп 2
Х
4
X
X
oп 2 + oп 1 (сравнить)
Х
5
X
X
oп 2 * oп l
=>
oп 2
Х
6
X
X
oп 2/oп l => oп 2
X
7
Х
Х
оп 2 AND oп 1 => oп 2
X
8
Х
Х
oп 2 OR oп l => оп 2
X
9
Х
Х
oп 2 XOR oп l => oп 2
X
А
Х
Х
порт! => oп 2
X
В
Х
Х
oп 1 => порт 2
X
С
Х
Х
Переход по адресу
X
D
X
Х
Переход по смещению
X
Е
*
Х
(Одноадресные операции)
X
F
X
Х
Останов
МОД
КОП
ОП1
Пояснения
Х
Е1
Х
NOT oп l
434
Х
Е2
Х
оп 1 => стек
Х
ЕЗ
Х
стек => oп l
Х
Е4
Х
SP + oп l => SP
Х
Е5
Х
SP – oп 1 => SP
Х
Е6
Х
Oп 1 => SP
Х
Е7
Х
SP => oп l
Х
Е8
0
PS => стек
Х
Е9
0
стек => РS
Х
ЕА
X
Сдвиг влево oп l
Х
ЕВ
X
Сдвиг вправо oп l
Х
ЕС
X
Арифметический сдвиг
вправо oп l
Б. Двоичные коды модификатора МОД для переходов
0000 -
возврат из подпрограммы
0001 -
безусловный переход
0010 -
N=0 (>=0)
0011 -
N=l (<0)
0100 -
Z=0 (<>0)
0101 -
Z=l (=0)
0110 -
N=1 or Z=l (<=0)
0111 -
N=0 and Z=0 (>0)
1001 -
вызов подпрограммы.
В. Важные кочанды с «короткой константой»
XX 10 0001 0000 ХХХХ -
очистить oп l
ХХ 10 0010 0001 ХХХХ -
+1 в оп 1
XX 11 0010 0001 ХХХХ -
****
или
ХХ 10 0011 0001 ХХХХ -
-1 из oп l
XX 10 0100 0000 ХХХХ -
сравнить 0 с oп 1
XX 11 0101 0001 ХХХХ -
*(-1) оп1
ХХ 10 0111 0001 ХХХХ -
oп l MOD 2 = => oп l
Г. Кодирование операндов
0
0000
R0
1000
резерв
1
01
R1
01
резерв
2
10
R2
10
резерв
3
11
R3
11
резерв
4
0100
(R0)
1100
резерв
5
01
(R1)
01
константа
6
10
(R2)
10
адрес ОЗУ
7
11
(R3)
11
резерв
Контрольные вопросы и задания
1. Назовите основные функциональные устройства учебного компьютера «Е97» и охарак-
теризуйте их назначение.
2. Какие виды памяти существуют в «Е97» и как они адресуются?
435
3. Сопоставьте адресацию к байтам и к словам. Какие вам удалось заметить различия?
4. В ОЗУ, начиная с адреса 300, хранятся следующие байты: 00, 01, 02, 03. Какое слово бу-
дет прочитано по адресу 302?
5. В ОЗУ начиная с адреса 300 хранятся слова 0102 и 5301. Совпадают ли находящиеся в
адресах 301 и 302 байты?
6. Что такое BIOS и какова его роль в современном компьютере? Знаете ли вы название
фирмы, написавшей BIOS для вашего компьютера?
7. Какие значения получат управляющие признаки, если результат операции получится
равным 1?0?
8. Какие внутренние регистры содержит учебный процессор «Е97» и каково их назначе-
ние?
9. Из каких частей состоит полная команда «Е97»?
10. Какие форматы может иметь команда «Е97»? Приведите примеры команд на каждый из
форматов.
11. Напишите программы вычисления нескольких арифметических
выражений
.
12. Чем различаются переходы с кодами С и D и как они работают?
13. Если рассмотренную в одном из примеров команду 1D06 поместить в ячейку с адресом
не 42, а 4Е, то какая команда будет выполняться следующей?
14. Каково должно быть смещение в команде перехода к адресу
56, если сама команда име-
ет адрес 4Е? 5Е?
15. Какие значения может
принимать модификатор в командах перехода и что они обозна-
чают?
16. Напишите программу, которая переписывает в R3 наименьшее из чисел, хранящихся в
регистрах R1 и R2.
17. Придумайте задачи, при программировании которых может быть полезно использова-
ние процедур или функций.
18. Как процессор обращается к подпрограмме и выходит
из нее обратно?
19. Какие операции можно делать с указателем стека?
20. Чем отличаются сдвиги с кодами операций ЕВ и ЕС? Приведите пример, когда эти раз-
личия незаметны.
21. Какие методы адресации реализованы в «Е97»? Приведите по два-три примера на каж-
дый из них.
22. Как кодируются следующие операнды: R2? (R3)? константа 345? ячейка 66?
23. Объясните, как будет выполняться команда 0572 и какие значения требуется знать, что-
бы предсказать ее результат.
24. Чем различается выполнение команд 0301 и 0345?
25. Изменится ли значение регистра R0 при выполнении команды 0Е14?
26. Сколько слов занимает команда (40) - (50) Ю (40) и как она кодируется?
27. Как записывается команда, умножающая на 3 содержимое ячейки 50?
28. Какой командой можно присвоить регистру R2 некоторое значение?-
29. Что такое «короткая константа» и когда она бывает полезна?
30. Для команд 25АЗ и 3653 напишите эквивалентные, используя метод адресации констант
по счетчику команд.
31. Почему среди списка полезных команд с «короткой константой» нет умножения на 2?
32. Подробно объясните с точностью до бита кодировку команды С470. ,,
33. Что такое порт ввода-вывода?
34. Как называются порты, имеющиеся у каждого
из внешних устройств «Е97»?
35. Перечислите все известные вам порты ввода-вывода, реализованные в учебном компью-
тере «Е97». и их номера.
36. Каков стандартный алгоритм обмена процессора с внешним устройством? Какую роль
играет в нем бит готовности?
37. По аналогии с приведенной в тексте программой вывода символа на дисплей, напишите
самостоятельно программу ввода символа с клавиатуры. Не забудьте организовать при этом «эхо-
печать», т.е. вывести принятый с клавиатуры символ.