;Файл программы для PrMK. Скомпилировать с помощью FASM. ;Игра "Посадка на Луну" ;Перепечатано с книги "5 вечеров с микрокалькулятором" И.Д.Данилов, Г.В.Славин. Москва. "Финансы и статистика", 1988 ;Andriy Slezenko, student@uninet.kiev.ua ;1. Ввести программу. ;2. Перейти в режим вычислений. ;3. В/О С/П "0". ;4. h0 (начальная высота корабля) ПА v0 (начальная скорость) ПВ. ; m0 (исходная масса топлива) ПС g (ускорение свободного падения для планеты) П9. ;5. С/П "h" XY "v" ИПС "m" ИП4 "t" (текущие значения). ;6. S (расход топлива в следующую секунду). ;7. Перейти к п.5 и продолжать до посадки корабля. ;Цель игры - посадить корабль на Луну. ; Ситуация у нас с вами такая такая. Ракета находится на расстоянии N метров от Луны, скорость ее V метров в секунду, запас топлива в баках - S тонн. Величины эти, конечно, известны командиру. Сопла ракеты повернуты к Луне и, добавляя топливо в двигатель, мы начинаем тормозить. Каждую секунду на световом табло в командирской рубке появляется информация о высоте корабля над поверхностью планеты, скорости его и запасе топлива. Так как командиром корабля будете вы, то знайте, что перед тем, как посмотреть на табло, нужно нажать такие клавиши: XY показывает скорость, ИПС дает остаток топлива в баке, ИП4 - время с начала торможения. Что касается высоты ракеты над планетой, то она будет загораться на вашем табло сразу при остановке калькулятора после проведения очередного маневра. ; Задача понятна - посадить корабль так, чтобы в момент посадки скорость его была близка к нулю, топлива при этом желательно израсходовать поменьше, да и провести посадку побыстрее - незачем долго мучить членов экипажа, ведь перегрузки при посадке не маленькие. Да, что касается топлива, дополнительное условие - если его останется меньше 95 тонн, то обратный старт на Землю станет невозможным. ;Контрольный пример: ;Пусть высота будет 1000 метров, скорость - 150 м/с, запас топлива - 500 тонн. Да, еще нужно ввести в бортовой компьютер ускорение свободного падения на Луне - 1,62 м/с^2. Вводим эти числа соответственно в регистры РА, РВ, РС и Р9. ;Нажимаем В/О С/П и на индикаторе появилась начальная высота. Вводим в двигатель первую порцию топлива - 20 С/П. Через 10 секунд на индикаторе появилась высота, на которой теперь находился корабль, 856.4. Еще столько же топлива - 20 С/П и высота стала 719.4. Еще порция побольше - 25 С/П. Высота 591 метр. ;Проверим остальные параметры: скорость (клавиша XY) - 128,4 м/с, запас топлива (ИПС) - 435 тонн, время в пути (ИП4) - 3 с. ;После ввода два раза подряд по 30 тонн горючего, высота корабля снизилась до 366,9 м. ;После дальнейшего ввода два раза подряд по 35 тонн горючего, табло показало высоту - 194,1 м, скорость - 76,6, топливо - 305, время - 7. ;Далее полет протекал так: ; Расход топлива Высота ; 40 130.5 ; 45 85.6 ; 40 57.4 ; 40 46.2 ; 10 38.1 ; 10 33.2 ; 0 26.6 ; 0 18.4 ; 5 10.9 ; 7 5.1 ; 8 1.6 ; 10 1.2 ; 5 1.5 ; (здесь скорость оказалась ; отрицательной (-0,3) и корабль ; начал снова удаляться от поверхности) ; 0 0.3 ; 3 3.1111111 ;Коснулись поверхности Луны. После посадки выяснилось (ИПС), что топлива осталось 82 тонны, а время, затраченное на этот процесс (ИП4), 21 секунда. ;В итоге мы видим, что сели тяжеловато, но корабль цел, с экипажем все в порядке. Вот только топлива перерасходовали, на обратный путь не хватит. Придется на Луне ждать корабль-спасатель и надеяться, что его капитан справится с посадкой лучше вас. ;Но не огорчайтесь. Для первого раза вполне прилично. ;Примечания: ;1. Числа в кавычках - это числа, высвечиваемые на экране. ;2. Выполнять п.4 не обязательно. По умолчанию предполагается: h=1000 м, v0=150 м/с, m0+500 т, g=1,62 м/с^2 для Луны. ;3. Смысл сообщений о качестве посадки расшифрован ниже. ;1,1111111 - идеальная посадка; ;2,1111111 - нормальная посадка; ;3,1111111 - тяжелая посадка; ;4,1111111 - посадка с легко устранимыми повреждениями; ;5,1111111 - повреждения, полученные при посадке, неустранимы. Обратный старт к Земле вряд ли возможен; ;6,1111111 - очень сильные повреждения; ;7,1111111 - разгерметизация отдельных блоков в результате сильного удара. Жизнь членов экипажа под угрозой; ;8,1111111 - гибель экипажа; ;9,1111111 - взрыв корабля. db "<СТЕК>" ;далее следуют значения регистров стека (только qword) ;R.X1 dq 0.0 ;R.X dq 0.0 ;R.Y dq 0.0 ;R.Z dq 0.0 ;R.T dq 0.0 db "<РГСТ>" ;Регистры: (с R.0 по R.E) times 15 dq 0.0 db "<ПРГМ>" ;Программа в ОПКОДах МК db 0x0D,0x44,0x0C,0x03,0x4A,0x48,0x02,0x13,0x4C,0x01 db 0x05,0x00,0x4B,0x01,0x0A,0x06,0x02,0x49,0x0D,0x50 db 0x6B,0x6A,0x50,0x40,0xD4,0x14,0x6C,0x14,0x11,0x5C db 36 ,0x0D,0x40,0x6C,0x51, 37 ,0x4C,0x68,0x13,0x02 db 0x10,0x60,0x14,0x13,0x69,0x14,0x11,0x6B,0x10,0x4B db 0x6A,0x14,0x11,0x4A,0x5C, 20 ,0x0B,0x6B,0x22,0x21 db 0x10,0x01,0x10,0x4D,0xDD,0x6D,0x09,0x23,0x10,0x50