spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
Когда в самом начале эксплуатации БЭСМ-6 программировали в машинных кодах, ради экономии памяти и труда программистов элементарные функции реализовали с помощью зарезервированных эмулируемых кодов операций : 050 - sqrt, 051 - sin, 052 - cos и т. д., по которым ЦП переключается в режим супервизора и передает управление по физическому адресу 0500+код операции. Казалось бы, много ли надо, чтобы посчитать простенький полином, сделать пару итераций по Ньютону и скорректировать порядок результата? Много было не надо (цитата из ядра системы):
*ВЫЧИСЛЕНИЕ SQRТ(Х)
*СРЕДНЕЕ ВРЕМЯ СЧЕТА=70МКСЕК.
*МАКС.ОТН.ПОГР.=1.5Е-12
*КОРЕНЬ ИЗВЛЕКАЕТСЯ ТОЧНО ИЗ ВСЕХ
*Х=N**2,ГДЕ 1 ≤ N ≤ 2**20

Но потом ОС стала развиваться, появилась потребность в десятках, если не сотнях, разных служебных и сервисных системных вызовов, и вместо того, чтобы навесить их на ещё не задействованные коды операций, их стали навешивать на коды операций элементарных функций, благо им был нужен только один операнд на сумматоре, и поле адреса в команде пропадало. Ну ладно, не жалко.

Казалось бы, много ли ума надо, чтобы поставить первой же командой проверку эффективного адреса на ноль и делать условный переход на вычисление корня, и только по ветви "иначе" идти на сохранение регистров и декодирование всех остальных возможных запрошенных операций?

На самом деле, немного - для этого было бы достаточно ровно одной команды; Но всем было пофиг, раз всю жизнь ОС Диспак при вызове экстракода квадратного корня выполнял три дюжины команд, которых можно было с лёгкостью избежать.

00550 (-> зп 2213, пб 7053)
00550 (зп 2213, -> пб 7053)
07053 (-> сч 474, и 103)
07053 (сч 474, -> и 103)
07054 (-> по 7057, сч 7044)
07054 (по 7057, -> сч 7044)
07055 (-> мод 2222, и 102)
07055 (мод 2222, -> и 102)
07056 (-> по 4750, мода)
04750 (-> счи 16, пио 4766(16))
04750 (счи 16, -> пио 4766(16))
04766 (-> уиа 5007(16), сч 2213)
04766 (уиа 5007(16), -> сч 2213)
04767 (-> зп 2213, счрж 7777) 
04767 (зп 2213, -> счрж 7777) 
04770 (-> зп 2214, счи 17)
04770 (зп 2214, -> счи 17)
04771 (-> зп 2220, счи 15)
04771 (зп 2220, -> счи 15)
04772 (-> зп 2216, ржа 10)
04772 (зп 2216, -> ржа 10)
04773 (-> уиа 2213(17), пб 7034)
04773 (уиа 2213(17), -> пб 7034)
07034 (-> сч 2213, пб (16))
07034 (сч 2213, -> пб (16))
(и только потом начинаются команды, перед которыми был комментарий, упомянутый выше)
05007 (-> уиа 4776(16), слпа 100) 
05007 (уиа 4776(16), -> слпа 100)
05010 (-> зп 2213, ржа 4) 
05010 (зп 2213, -> ржа 4) 
05011 (-> по (16), ржа 20)
05011 (по (16), -> ржа 20)
05012 (-> пе 5004, сда 101)
05012 (пе 5004, -> сда 101)
05013 (-> зп 2206, сч 2213)
05013 (зп 2206, -> сч 2213)
05014 (-> вчп 2213, зп 2205)
05014 (вчп 2213, -> зп 2205)
05015 (-> умн 246, сл 247)
05015 (умн 246, -> сл 247)
05016 (-> умн 2205, сл 250)
05016 (умн 2205, -> сл 250)
05017 (-> слпа 140, слп 2206) 
05017 (слпа 140, -> слп 2206)
05020 (-> зп 2205, сч 2206)
05020 (зп 2205, -> сч 2206)
05021 (-> ржа 22, по 5024)
05021 (ржа 22, -> по 5024)
05024 (-> сч 2213, дел 2205)
05024 (сч 2213, -> дел 2205)
05025 (-> сл 2205, слпа 77)
05025 (сл 2205, -> слпа 77)
05026 (-> зп 2205, сч 2213)
05026 (зп 2205, -> сч 2213)
05027 (-> дел 2205, сл 2205)
05027 (дел 2205, -> сл 2205)
05030 (-> слпа 77, пб (16))
05030 (слпа 77, -> пб (16))
(примерно здесь кончаются команды, относящиеся к вычислению корня)
04776 (-> зп 2213, мод 2220)
04776 (зп 2213, -> мод 2220)
04777 (-> уиа (17), рж 2214)
04777 (уиа (17), -> рж 2214)
05000 (-> сч 2213, уиа 3) 
05000 (сч 2213, -> уиа 3) 
05001 (-> уи, зп)
05001 (уи, -> зп)
05002 (-> уиа 2003, пб 6610)
05002 (уиа 2003, -> пб 6610)
06610 (-> уии 27, выпр (2))
06610 (уии 27, -> выпр (2))


То есть реально вычисление квадратного корня работало не обещанные 70 μs, а раза в полтора дольше.

Предлагается задачка: оценить, сколько всего операций квадратного корня все БЭСМ-6 произвели за все годы эксплуатации, и сколько машинного времени было потеряно. :)

Profile

Сообщество любителей БЭСМ-6

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21222324252627
282930 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 13th, 2026 11:15 am
Powered by Dreamwidth Studios