Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1863 yogev_ezra 1
;Файл программы для PrMK. Скомпилировать с помощью FASM.
2
 
3
;Игра "Посадка на Луну"
4
;Перепечатано с книги "5 вечеров с микрокалькулятором" И.Д.Данилов, Г.В.Славин. Москва. "Финансы и статистика", 1988
5
;Andriy Slezenko, student@uninet.kiev.ua
6
 
7
;1. Ввести программу.
8
;2. Перейти в режим вычислений.
9
;3. В/О С/П "0".
10
;4. h0 (начальная высота корабля) ПА v0 (начальная скорость) ПВ.
11
;   m0 (исходная масса топлива) ПС g (ускорение свободного падения для планеты) П9.
12
;5. С/П "h" XY "v" ИПС "m" ИП4 "t" (текущие значения).
13
;6. S (расход топлива в следующую секунду).
14
;7. Перейти к п.5 и продолжать до посадки корабля.
15
 
16
;Цель игры - посадить корабль на Луну.
17
;	Ситуация у нас с вами такая такая. Ракета находится на расстоянии N метров от Луны, скорость ее V метров в секунду, запас топлива в баках - S тонн. Величины эти, конечно, известны командиру. Сопла ракеты повернуты к Луне и, добавляя топливо в двигатель, мы начинаем тормозить. Каждую секунду на световом табло в командирской рубке появляется информация о высоте корабля над поверхностью планеты, скорости его и запасе топлива. Так как командиром корабля будете вы, то знайте, что перед тем, как посмотреть на табло, нужно нажать такие клавиши: XY показывает скорость, ИПС дает остаток топлива в баке, ИП4 - время с начала торможения. Что касается высоты ракеты над планетой, то она будет загораться на вашем табло сразу при остановке калькулятора после проведения очередного маневра.
18
;	Задача понятна - посадить корабль так, чтобы в момент посадки скорость его была близка к нулю, топлива при этом желательно израсходовать поменьше, да и провести посадку побыстрее - незачем долго мучить членов экипажа, ведь перегрузки при посадке не маленькие. Да, что касается топлива, дополнительное условие - если его останется меньше 95 тонн, то обратный старт на Землю станет невозможным.
19
 
20
;Контрольный пример:
21
;Пусть высота будет 1000 метров, скорость - 150 м/с, запас топлива - 500 тонн. Да, еще нужно ввести в бортовой компьютер ускорение свободного падения на Луне - 1,62 м/с^2. Вводим эти числа соответственно в регистры РА, РВ, РС и Р9.
22
;Нажимаем В/О С/П и на индикаторе появилась начальная высота. Вводим в двигатель первую порцию топлива - 20 С/П. Через 10 секунд на индикаторе появилась высота, на которой теперь находился корабль, 856.4. Еще столько же топлива - 20 С/П и высота стала 719.4. Еще порция побольше - 25 С/П. Высота 591 метр.
23
;Проверим остальные параметры: скорость (клавиша XY) - 128,4 м/с, запас топлива (ИПС) - 435 тонн, время в пути (ИП4) - 3 с.
24
;После ввода два раза подряд по 30 тонн горючего, высота корабля снизилась до 366,9 м.
25
;После дальнейшего ввода два раза подряд по 35 тонн горючего, табло показало высоту - 194,1 м, скорость - 76,6, топливо - 305, время - 7.
26
;Далее полет протекал так:
27
 
28
;	Расход топлива		Высота
29
;		40		130.5
30
;		45		85.6
31
;		40		57.4
32
;		40		46.2
33
;		10		38.1
34
;		10		33.2
35
;		0		26.6
36
;		0		18.4
37
;		5		10.9
38
;		7		5.1
39
;		8		1.6
40
;		10		1.2
41
;		5		1.5
42
;			(здесь скорость оказалась
43
;			отрицательной (-0,3) и корабль
44
;			начал снова удаляться от поверхности)
45
;		0		0.3
46
;		3		3.1111111
47
;Коснулись поверхности Луны. После посадки выяснилось (ИПС), что топлива осталось 82 тонны, а время, затраченное на этот процесс (ИП4), 21 секунда.
48
;В итоге мы видим, что сели тяжеловато, но корабль цел, с экипажем все в порядке. Вот только топлива перерасходовали, на обратный путь не хватит. Придется на Луне ждать корабль-спасатель и надеяться, что его капитан справится с посадкой лучше вас.
49
;Но не огорчайтесь. Для первого раза вполне прилично.
50
 
51
;Примечания:
52
;1. Числа в кавычках - это числа, высвечиваемые на экране.
53
;2. Выполнять п.4 не обязательно. По умолчанию предполагается: h=1000 м, v0=150 м/с, m0+500 т, g=1,62 м/с^2 для Луны.
54
;3. Смысл сообщений о качестве посадки расшифрован ниже.
55
 
56
;1,1111111 - идеальная посадка;
57
;2,1111111 - нормальная посадка;
58
;3,1111111 - тяжелая посадка;
59
;4,1111111 - посадка с легко устранимыми повреждениями;
60
;5,1111111 - повреждения, полученные при посадке, неустранимы. Обратный старт к Земле вряд ли 	    возможен;
61
;6,1111111 - очень сильные повреждения;
62
;7,1111111 - разгерметизация отдельных блоков в результате сильного удара. Жизнь членов 	    экипажа под угрозой;
63
;8,1111111 - гибель экипажа;
64
;9,1111111 - взрыв корабля.
65
 
66
 
67
db "<СТЕК>"
68
 
69
	 ;далее следуют значения регистров стека (только qword)
70
 
71
		 ;R.X1
72
		  dq 0.0
73
		 ;R.X
74
		  dq 0.0
75
		 ;R.Y
76
		  dq 0.0
77
		 ;R.Z
78
		  dq 0.0
79
		 ;R.T
80
		  dq 0.0
81
 
82
db "<РГСТ>"
83
 
84
		;Регистры: (с R.0 по R.E)
85
 
86
		  times 15 dq 0.0
87
 
88
db "<ПРГМ>"
89
		;Программа в ОПКОДах МК
90
 
91
db 0x0D,0x44,0x0C,0x03,0x4A,0x48,0x02,0x13,0x4C,0x01
92
db 0x05,0x00,0x4B,0x01,0x0A,0x06,0x02,0x49,0x0D,0x50
93
db 0x6B,0x6A,0x50,0x40,0xD4,0x14,0x6C,0x14,0x11,0x5C
94
db  36 ,0x0D,0x40,0x6C,0x51, 37 ,0x4C,0x68,0x13,0x02
95
db 0x10,0x60,0x14,0x13,0x69,0x14,0x11,0x6B,0x10,0x4B
96
db 0x6A,0x14,0x11,0x4A,0x5C, 20 ,0x0B,0x6B,0x22,0x21
97
db 0x10,0x01,0x10,0x4D,0xDD,0x6D,0x09,0x23,0x10,0x50