Данному образовательному сайту пришлось несколько раз менять свое имя. С 2011 года доступ к нему обеспечивается по URL
http://educomp.runnet.ru

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


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



Модели (software):

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

Модели (hardware):






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

"SIC": примеры программ

Ниже приводится несколько примеров, которые демонстрируют, как можно составлять программы для SIC.

Пример 1. Простейшие вычисления

Демонстрирует:
  • организацию вычислений
  • работу с константами (для стандартной модели они хранятся в ячейках)

Расчетная формула:
R=N1+N2-1

Программа на ассемблере:

	LDA	N1	извлечь N1
	ADD	N2	прибавить N2
	SUB	ONE	вычесть 1
	STA	RES	сохранить результат в RES
...
ONE	WORD	1	константа 1
			переменные:
N1	RESW	1
N2	RESW	1
RES	RESW	1

Программа в кодах:
АдресКодМнемоника
00000 0103LDA N1
00318 0106ADD N2
0061C 0100SUB ONE
0090C 0109STA RES
...  
1000000011
103000005N1
106000003N2

Реализация в имитаторе: реализация в имитаторе

Конечно, при изучении приемов системного программирования ассемблер полезнее. Но с точки зрения понимания принципов работы компьютера, таблица кодов объясняет заметно больше.

Пример 2. Копирование строковой константы в переменную

Демонстрирует:

  • организацию циклов (инструкцией TIX)
  • работу с символьными массивами
  • индексную адресацию байтов
  • работу с байтами

Программа на ассемблере:

	LDX	ZERO	обнулить индексный регистр
MOVECH	LDCH	STR1,X	загрузить очередной символ из STR1
	STCH	STR2,X	сохранить его в STR2
	TIX	ELEVEN	+1 в индекс, результат сравнить с 11
	JLT	MOVECH	если индекс меньше 11 - повторять
...
STR1	BYTE	C'TEST STRING'	11-байтовая строковая константа
STR2	RESB	11		11-байтовая переменная
ZERO	WORD	0		константа 0
ELEVEN	WORD	11		константа 11

Пример 3. Вычисления с массивами

Демонстрирует:

  • организацию циклов
  • работу с числовыми массивами
  • индексную адресацию чисел

Расчетная формула:
GAMMA[i]=ALPHA[i]+BETA[i]

Программа на ассемблере:

	LDA	ZERO	обнулить индексный регистр
	STA	INDEX	и сохранить его в ОЗУ
ADDLP	LDX	INDEX	загрузить значение в индексный регистр
	LDA	ALPHA,X	извлечь очередной элемент массива ALPHA
	ADD	BETA,X	прибавить элемент из BETA
	STA	GAMMA,X	сохранить результат в массив GAMMA
	LDA	INDEX	увеличить значение индекса
	ADD	THREE	на 3 (число занимает 3 байта)
	STA	INDEX	и сохранить в ОЗУ
	COMP	K300	сравнить результат с 300
	JLT	ADDLP	если он меньше 300 - повторить
...
INDEX	RESW	1	здесь хранится индекс
ALPHA	RESW	100	массив ALPHA
BETA	RESW	100	массив BETA
GAMMA	RESW	100	массив GAMMA (все по 100 чисел)
			числовые константы:
ZERO	WORD	0
K300	WORD	300
THREE	WORD	3

Пример организации ввода/вывода см. здесь.


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