Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6843

Скачиваний: 51

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

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          

 

Примечание. Не забывайте, что ответ 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  


background image

 

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, т.е. не 


background image

 

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 
 

Пояснения 
 

Х 
 


 


 


 

Нет операции 
 

Х 
 


 


 


 

оп l => oп 2 
 

Х 
 


 


 


 

oп 2 + oп 1 => oп 2 
 

Х 
 


 


 


 

oп 2 – oп l =>oп 2 
 

Х 
 


 


 


 

oп 2 + oп 1 (сравнить) 
 

Х 
 

5  
 


 


 

oп 2 * oп l 

=>

 oп 2 

 

Х 
 


 


 


 

oп 2/oп l => oп 2 
 


 


 

Х 
 

Х 
 

оп 2 AND oп 1 => oп 2 
 


 


 

Х 
 

Х 
 

oп 2 OR oп l => оп 2 
 


 


 

Х 
 

Х 
 

oп 2 XOR oп l => oп 2 
 


 

А 
 

Х 
 

Х 
 

порт! => oп 2 
 


 

В 
 

Х 
 

Х 
 

oп 1 => порт 2 
 


 

С 
 

           Х 

 

Х 
 

Переход по адресу 
 


 


 


 

Х 
 

Переход по смещению 
 


 

Е 
 

 

Х 
 

(Одноадресные операции) 
 


 


 


 

Х 
 

Останов 
 

 

МОД 

КОП 

ОП1 

Пояснения 

Х 
 

Е1 
 

Х  
 

NOT oп l 
 


background image

 

434 

           Х 

 

Е2 
 

Х 
 

оп 1 => стек 
 

Х 
 

ЕЗ 
 

Х 
 

стек => oп l 
 

Х 
 

Е4 
 

Х 
 

SP + oп l => SP 
 

Х 
 

Е5 
 

Х 
 

SP – oп 1 => SP 
 

Х 
 

Е6 
 

Х 
 

Oп 1 => SP 
 

Х 
 

Е7 
 

Х 
 

SP => oп l 
 

Х 
 

Е8 
 


 

PS => стек 
 

Х 
 

Е9 
 


 

стек => РS 
 

Х 
 

ЕА 
 


 

Сдвиг влево oп l 
 

Х 
 

ЕВ 
 


 

Сдвиг вправо oп l 
 

Х 
 

ЕС 
 


 

Арифметический сдвиг 
вправо 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 

 

Г. Кодирование операндов 

 


 

0000 
 

R0 
 

 
 

1000 
 

резерв 

 


 

01 
 

R1 
 

 
 

01 
 

резерв 

 


 

10 
 

R2 
 

 
 

10 
 

резерв 

 


 

11 
 

R3 
 

 
 

11 
 

резерв 

 


 

0100 
 

(R0) 
 

 
 

1100 
 

резерв 

 


 

01 
 

(R1) 
 

 
 

01 
 

константа 

 


 

10 
 

(R2) 
 

 
 

10 
 

адрес ОЗУ 

 


 

11 
 

(R3) 
 

 
 

11 
 

резерв 

 

 

Контрольные вопросы и задания 

1.  Назовите  основные  функциональные  устройства  учебного  компьютера  «Е97»  и  охарак-

теризуйте их назначение. 

2. Какие виды памяти существуют в «Е97» и как они адресуются? 


background image

 

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. По аналогии с приведенной в тексте программой вывода символа на дисплей, напишите 

самостоятельно программу ввода символа с клавиатуры. Не забудьте организовать при этом «эхо-
печать», т.е. вывести принятый с клавиатуры символ.