Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.orgfree.com

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта 2005

Линейные программы для УК "НЕЙМАН" состоят из команд арифметических операций, пересылки, ввода и вывода. На языке машинных команд ввод и вывод программируются командой пересылки значений через буферную ячейку FC. Однако в программах на Автокоде прямые адреса ячеек памяти не используются. Чтобы не нарушать этот принцип, определим специальные команды ввода и вывода: 

INPUT <переменная> - команда ввода;
OUTPUT <переменная> - команда вывода.

Например,

INPUT A - ввод значения переменной A;
OUTPUT X - вывод на табло значения переменной X.

Для знакомства с программированием на Автокоде рассмотрим несколько задач.

Этапы работы над программой на Автокоде следующие:

  1. Составление программы

  2. Трансляция и синтаксическая отладка

  3. Тестирование и отладка алгоритма

По сравнению с ЯМК, исчез этап распределения памяти. Зато появились своеобразные этапы 2 и 3, с которыми подробно разберемся ниже.

Задача 1. Определить, к какому веку новой эры (V) относится данный год (G).
Дано:GРасчетная формула:
Найти:VV = (G + 99) div 100

Эта задача решается с помощью линейного алгоритма. Программа на Автокоде расположена в левом столбце таблицы 6. О содержании правой половины таблицы речь пойдет позже.

Таблица 6.
Автокод Результат трансляции
КомандыПояснения АдресКОП A1A2A3
INPUT G ввод G 0000FC0014
ADD G, <99>, G G:=G+99 0401141814
DIV G,<100>,V V:=G div 100 0804141C20
OUTPUT V вывод V 0C002000FC
STOP останов 1077000000
 14 переменная G
18 константа 99
константа 100
20 переменная V

Команды записываются друг за другом в том порядке, в каком они будут выполняться. В каждой команде мнемокод отделяется от операндов пробелами (минимум - один пробел). Операнды отделяются друг от друга запятыми. Запись каждой команды начинается с новой строки.

Безусловно, такую программу легче и писать, и читать, чем программу на ЯМК. На Автокоде меньше вероятность допустить ошибку, чем на ЯМК. И все-таки ошибки возможны. Можно, например, неправильно записать мнемокод, идентификатор, пропустить запятую, использовать недопустимый символ и пр. Ошибки такого рода, связанные с нарушением правил записи программ на языке программирования, называются синтаксическими ошибками (подробнее об этом в следующем разделе).

Однако возможны ошибки в алгоритме. Алгоритмические ошибки транслятор обнаружить не может. Их должен найти и исправить программист на стадии тестирования. О тестировании мы уже говорили раньше.

При программировании циклов и ветвлений используются команды условного (IFGO) и безусловного (GO) переходов. Вспомним, что в соответствующих им командах на ЯМК (0A и 0B) указывается адрес ячейки, к которой производится переход. Но в программе на Автокоде не должно быть адресов ячеек.

Для организации переходов в Автокоде применяются метки. Метка представляет собой идентификатор, начинающийся с буквы L (l). Метка записывается перед мнемокодом команды и отделяется от него двоеточием.

Например:

L1: ADD X,Y,Z

L15: MUL <2>,F,S

Следует ставить метки лишь в тех командах, к которым в программе производится переход. Форматы команд перехода следующие:

IFGO <метка>

GO <метка>

Например:

IFGO L1

GO L15

Их исполнение аналогично соответствующим командам ЯМК.

Задача 2. Сколько различных N-буквенных слов можно составить путем перестановок данных N букв?
Дано:NРасчетная формула:
Найти:FF = N!

Составим программу в соответствии со вторым алгоритмом из предыдущего раздела. Такой алгоритм включает в себя цикл с постусловием.
Таблица 7
ПрограммаПояснения
       INPUT Dввод N
       MOV <1>,FF:=1
L1: MUL F,N,FF:=F*N
       SUB N,<1>,NN:=N-1
       IFGO L1при N>0 идти к L1
       OUTPUT Fвывод F
       STOPстоп

Метка L1 отмечает начало цикла. Команда IFGO L1 производит переход к помеченной команде в тех случаях, когда цикл следует повторять.

Задача 3. Определить наибольший общий делитель двух натуральных чисел.
Дано: M,N
Найти: НОД(M,N)

Программа решения задачи реализует известный алгоритм Евклида. Его описание на алгоритмическом языке выглядит следующим образом:

алг ЗАДАЧА 4
цел M,N
нач
	ввод M
	ввод N
	пока M<>N
	нц
		если M>N
		то M:=M-N
		иначе N:=N-M
		кв
	кц
	вывод M
кон

Алгоритм содержит цикл с вложенным ветвлением. Программа на Автокоде:
Таблица 8
Программа Пояснения Результат трансляции
          INPUT M ввод M00   00 FC 00 2C
          INPUT N ввод N04   00 FC 00 30
L10: SUB M,N,XX:=M-N08   02 2C 30 34
          IFGO L20 при X>0 идти к L200C   0A 00 00 1C
          MOV M,X X:=M10   00 2C 00 34
          MOV N,M M:=N14   00 30 00 2C
          MOV X,N N:=X18   00 34 00 30
L20: SUB M,N,MM:=M-N1C   02 2C 30 2C
          IFGO L10 при M>0 идти к L1020   0A 00 00 08
          OUTPUT N вывод N24   00 30 00 FC
          STOP Стоп28   77 00 00 00

Здесь уже две команды имеют метки: L10 отмечает начало цикла, L20 - конец ветвления.


© И.Г.Семакин, 2001
Полный текст статьи в виде документа MS Word можно загрузить здесь.
© Оформление Web-страницы Е.А.Еремин, 2001


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com


Free Web Hosting