Вычисление суммы ряда чисел


Главная / ЭКВМ / Программы / Примеры

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

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

Запуск программы выполняется командами "В/О", "С/П". После запуска в строке комментариев выводится текст "Слагаемое 1".

Очередное слагаемое вводится в регистр стека RX с клавиатуры. Для суммирования нажимается клавиша "С/П". В строке комментариев появляется подсказка с номером следующего слагаемого, которое следует ввести. В регистре стека RY - текущее значение суммы.

После окончания ввода всех слагаемых следует нажать кнопки "ШГ->" и "С/П". В регистр стека RX при этом выводится значение суммы, а в строке комментариев - соответствующий текст.

Для обнуления суммы и повторного запуска нажать "С/П".

.CHARSET 1251
; Работа со строкой комментариев
; Формирование строки символов в памяти данных
; Вывод строки символов из памяти данных

STRB	.EQU	1000	; Указатель на строку символов

.ORG 0
	CX		; Очистка регистра X и флага ввода
	MA		; Обнуление суммы
	M4		; Обнуление номера слагаемого
A1:	PP M 9030	; Индексный регистр 0 буфера
	PP M 9031	; Индексный регистр 1 буфера
	KRM4		; Инкремент номера слагаемого
	RM4		; Номер очередного слагаемого
	PP M 9035	; Преобразовать в текст	(регистр 0)

	.NUMD STRB	; Указатель на строку в памяти данных
	M5		; Записать в R5
	
A2:	PP RM 9034	; Содержимое буфера (регистр 1 с автоинкрементом)
	KM5		; Записать в строку STRB
	K NOT		; Преобразовать 255 в 0
	F X=0 A2	; Проверка на 0, переход на A2 если не конец строки

	.NUML STRM	; Адрес строки STRM ("Слагаемое ")
	PP M 9026	; Вывести STRM в строку комментариев
	1 EE 3		; 1000 - адрес cтроки в памяти данных (содержит номер)
	PP M 9027	; Дописать к строке комментариев
	
	CX ENT		; Очистить RT и RZ при выводе
	RMA 		; RY - сумма
	0		; Очистить RX для ввода слагаемого (команда "0" поднимает стек)
	R/S		; Останов для ввода очередного слагаемого
	GOTO A3		; Переход на A3 (Одновременно команда "К НОП" после "ШГ->" )
	.NUML STRM1	; Адрес строки STRM1 ("Сумма")
	PP M 9026	; Вывести STRM1 в строку комментариев
	CX ENT		; Очистить RT, RZ и RY при выводе
	RMA		; В RX - сумма
	R/S		; Останов для показа суммы
	GOTO 0		; Перейти на начало программы
A3:	RMA + MA	; Добавить очередное слагаемое к сумме
	CX		; Очистить RX для заполнения индексных регистров
	GOTO A1

STRM:	.TEXT "\rСлагаемое \0"	; Пробел после слова отделяет его от номера
STRM1:	.TEXT "\rСумма\0"
.ENDP

Программа является примером поочерёдного вывода строк из памяти программ и данных, а также демонстрирует способ вывода числа в строку комментариев.

Для перехода от одной части программы к другой использован способ пропуска команды при останове, часто применявшийся в советских ПМК. При выполнении "ШГ->" после останова при последующем запуске выполняется не команда "БП 54", а команда, соответствующая коду "54" (адресу в двухбайтовой команде безусловного перехода) - то есть "К НОП" ("нет операции"). Очевидно, что работе программы эта команда не мешает.

  0 1 2 3 4 5 6 7 8 9
00 Cx П A П 4 PP П 90 30 PP П 90 31 K ИП 4
10 ИП 4 PP П 90 35 9 9 9 П 5 PP ИП 90
20 34 K П 5 K NOT F x=0 18 6 0 PP П 90 26
30 1 ВП 3 PP П 90 27 Cx B↑ ИП A 0
40 С/П БП 54
(К НОП)
7 2 PP П 90 26 Cx B↑
50 ИП A С/П БП 00 ИП A + П A Cx БП 03
60 0Dh 91h 'С' ABh 'л' A0h 'а' A3h 'г' A0h 'а' A5h 'е' ACh 'м' AEh 'о' A5h 'е'
70 20h ' ' 00h 0Dh 91h 'С' E3h 'у' ACh 'м' ACh 'м' A0h 'а' 00h  

Строка комментариев - подсчёт суммы, ввод слагаемого

Программа занимает всего 79 байт вместе с текcтовыми строками. То есть, по размеру она могла бы свободно уместиться в памяти советских ПМК.

Строка комментариев - вывод суммы

Программа может быть улучшена, к примеру, выводом предыдущего введённого числа в одном из регистров стека при останове.


НПП "СЕМИКО" (383) 271-01-25 (многоканальный)