Команды консоли. Вызовы и решения. Команды сравнения данных вещественного типа

Для получения инструкций от пользователей операционная система использует команды языка CL. Ознакомьтесь с основными правилами применения команд CL и инструкциями по просмотру справки по командам CL.

Управляющий язык (CL) предоставляет удобное и гибкое средство подачи команд системе. Команды CL могут применяться для управления многими функциями операционной системы. Они могут вводиться в командную строку, включаться в программы или подаваться в System i Navigator . Даже если вы не знакомы с меню и командами CL системы System i , вам будет несложно с ними работать, так как в командах CL применяется интуитивно понятный синтаксис, а в операционной системе предусмотрены разнообразные функции справки.

Синтаксис команд CL

Команда CL содержит глагол, объект и иногда прилагательное, например WRKACTJOB:

Одним из главных достоинств синтаксиса CL является его согласованность. Например, для работы с любым объектом достаточно ввести команду, начинающуюся с символов WRK. В результате появится меню, позволяющие выполнить над указанным объектом ряд операций.

Ввод команд CL

Команды CL можно вводить через System i Navigator . Для этого из панели задач нужно выбрать пункт Выполнить команду . В System i Navigator панель задач представляет собой перечень системных задач и предоставляет пользователям доступ к функциям операционной системы. Она содержит набор связанных задач, выполняющих какую-либо функцию или описывающих выполнение этой функции. Кроме того, команды CL можно вводить в любой командной строке и в большинстве меню.

У каждой команды есть набор обязательных и дополнительных параметров. Например, в команде Создать библиотеку (CRTLIB) обязательно нужно указать имя создаваемой библиотеки. Обычно команды CL задаются в следующем формате имя команды параметр , значение . Например, команда CRTLIB LIB(FRED) задает глагол создать и тип объекта библиотека. Кроме того, она указывает, что обязательному параметру LIB (имя библиотеки) присвоено значение FRED . В результате вызова этой команды операционная система создаст библиотеку с именем FRED.

Если вы не знаете все параметры команды, введите команду с известными вам параметрами, поместите курсор на имя команды и нажмите клавишу F4 (Приглашение). Система выведет доступные опции для команды. Если вы введете команду без параметров, то появится меню, в полях которого можно задать обязательные параметры команды. При необходимости можно просмотреть справку по любому полю меню. Например, если ввести CRTLIB, то появится следующее меню.

Для просмотра подробной информации о параметре введите ? в соответствующем поле.

Просмотр справки по командам CL

В операционной системе предусмотрено несколько функций, облегчающих ввод команд CL. Программа Ввод команд предоставляет удобный интерфейс для ввода команд и позволяет просмотреть расширенную справку. Для запуска этой программы введите в командной строке CALL QCMD. Для поиска информации по отдельной команде можно воспользоваться программой поиска CL, предусмотренной в information center. Всегда помните о том, что для просмотра подробной справки по параметрам команды достаточно открыть меню, введя команду без параметров или поместив курсор на имя команды и нажав F4 (Приглашение).

Судя по недавно опубликованным фото- и видеоматериалам с борта первого ки-тай-с-ко-го авианосца «Ляонин» (достроенный советский ТАКР «Рига»/«Варяг» про-е-к-та 1143.6), в Военно-морском флоте Народно-освободительной армии Китая ре-ши-ли не изобретать велосипед и по-за-и-м-ствовали отработанную многими де-ся-ти-ле-ти-ями американскую систему вз-лёт-но-посадочных операций палубной авиации. Цветовая «кодировка» спе-ци-а-ль-ностей палубной команды была также по-за-и-м-с-т-вована без каких-либо изменений. В связи с этим небезынтересно вспомнить, как за-рож-да-лась и как первоначально работала эта система. А её история, обя-за-нн-ая своим возникновением весьма сво-е-об-раз-ной конструкции первого аме-ри-кан-с-кого авианосца, началась в далёкие 20-е го-ды прошлого века...

Уже не первые

США заслуженно считаются родиной как авиации вообще, так и морской авиации, в том числе и палубной. Именно в этой стране ещё в 1910–12 годах был произведён первый взлёт аэроплана с корабля, первая посадка на корабль, изобретены поплавковый гидросамолёт, летающая лодка, корабельная катапульта, первые аэрофинишёры и многое другое. Однако к окончанию Первой Мировой войны ВМС США оказались в этой области в положении догоняющих, и в особенности это касалось авианосцев и палубной авиации.



День рождения палубной авиаци – 18 января 1911 года, гавань Сан-Франциско. Авиатор Юджин Эли на аэроплане «Модель D» Глена Кё-р-ти-са совершает первую в истории посадку летательного аппарата на корабль (броненосный крейсер ACR-4 «Пенсильвания»). Что самое по-ра-зи-те-ль-ное, разработавшему посадочные приспособления инженеру Хью Робинсону удалось с первой попытки угадать принципиальную схе-му, применяемую на авианесущих кораблях и по сей день. Она включала аэрофинишёры с поперечными тросами без жёсткого кре-пле-ния, посадочный гак и даже аварийный барьер, роль которого играл кусок брезента, закреплённый в конце посадочной платформы.


Королевский флот Великобритании к тому времени уже имел 4 авианосца, перестроенных из боевых кораблей и оке-а-н-с-ких лайнеров. Кроме того, англичанами уже был заложен первый авианосец специальной постройки. Аналогичный корабль строился и в Японии, а вот на родине морской авиации, где тоже осознали перспективность нового класса кораблей, на ави-а-нос-цы попросту не нашлось денег – все средства съедали масштабные программы постройки «обычных» кораблей (здесь до-ста-точ-но вспомнить хотя бы постройку 273 эсминцев-«флашдекеров»). А затем США втянулись в охватившую все ведущие во-ен-но-морские державы послевоенную «линкорную гонку». В их случае это означало постройку шести линкоров и шести ли-ней-ных крейсеров водоизмещением более 40 000 тонн каждый.

Единственное, подо что Конгресс смог выделить финансирование, была недорогая перестройка в экспериментальный ави-а-но-сец уже имевшегося судна. Им стал угольщик AC-3 «Юпитер» 1913 года постройки водоизмещением 19 360 тонн, ос-на-щё-н-ный – впервые в истории американского флота – турбоэлектрической силовой установкой. Не следует думать, что для кон-вер-сии было использовано первое подвернувшиеся не особо ценное судно. В начале 1920-х годов значительная часть флота США всё ещё использовала котлы с угольным питанием, так что специализированные угольщики, способные проводить бункеровку в открытом море, были более чем востребованы. Основной причиной выбора именно «Юпитера» стали шесть огромных уго-ль-ных трюмов, занимавших бóльшую часть его корпуса, что значительно упрощало и удешевляло конверсию.



Угольщик AC-3 «Юпитер» вскоре после вступления в строй, Калифорния, 16 октября 1913 года. Бóльшую часть корпуса судна занимают 6 угольных трюмов (расположены между конструкциями для погрузки-разгрузки угля).


Здесь стóит отметить, что данный корабль – в отличие от его современников и, теоретически, «одноклассников», японского «Хосё» и британского «Гермеса» – никогда не планировали использовать в боевых условиях. Ещё во время разработки планов конверсии он рассматривался исключительно как недорогая экспериментальная платформа для отработки авианосных те-х-но-ло-гий, которую строили, чтобы не терять времени, дожидаясь финансирования постройки полноценных авианосцев.

Первый блин комом

Перестройка началась в марте 1920 года и продлилась до 22 марта 1922 года, когда корабль был принят состав флота под новым именем CV-1 «Лэнгли». С угольщика было демонтировано громоздкое оборудование для погрузки-разгрузки угля, поэтому водоизмещение перестроенного корабля значительно уменьшилось и составило 14 100 тонн. Силовая установка мощностью 7200 л.с., сообщавшая авианосцу более чем скромную скорость в 15,5 узлов была оставлена без из-ме-не-ний, а дальность хода при работе силовой установки в экономическом режиме составляла всего 3500 миль (6500 км). В носовом угольном трюме было оборудовано хранилище авиабензина, в четвёртом был размещен погреб боеприпасов, а также привод самолётоподъёмника. Оставшиеся четыре трюма использовались для хранения самолётов.


Перестройка угольщика AC-3 «Юпитер» в авианосец, 1921 год. Идёт монтаж пиллерсов под будущую полётную палубу.


На бывшей верхней палубе угольщика были установлены пиллерсы, на которых смонтировали полётную палубу раз-ме-ром 160×20 метров. Надстройка и мостик остались на прежнем месте и оказались под полётной палубой, причём довольно да-ле-ко от её носового среза, что серьёзно ухудшило обзор. Бронирование и противоторпедная защита у корабля от-су-т-с-т-во-вали, а его вооружение составили четыре 127-мм/51 орудия не совсем понятного назначения c максимальным углом возвышения 20°. На корме корабля была устроена голубятня, где жили почтовые голуби, предназначенные для связи самолётов с авианосцем.



Посадка тренировочного самолёта «Аэромарин» 39-B на авианосец «Лэнгли» в исходной конфигурации, 1922 год.


Но оригинальней всего была организована собственно авианосная составляющая «Лэнгли». Его авиагруппа первоначально насчитывала всего 14 машин, при этом у корабля фактически отсутствовала ангарная палуба – самолёты с демонтированными плоскостями хранились в бывших угольных трюмах и поднимались оттуда с помощью двух кран-балок, расположенных под полётной палубой. После подъёма самолёты собирались на бывшей верхней палубе, после чего, опять же кран-балкой, по-ме-ща-лись на платформу самолётоподъёмника, расположенную между двумя парами «самолётных» трюмов и возвышавшуюся на 2,4 м над уровнем палубы. И только затем его можно было поднять на полётную палубу. Как нетрудно догадаться, для того, чтобы вернуть самолёт в трюм, все эти операции надо было повторить в обратном порядке.

Нет худа без добра

Однако несуразность конструкции «Лэнгли» сыграла и положительную роль. На британских авианосцах «второго по-ко-ле-ния» практически с самого начала придерживались концепции «чистой палубы», благо нормальные ангары и са-мо-лё-то-подъ-ём-ники позволяли достаточно быстро (за считанные минуты) опускать совершившие посадку самолёты в ангары, и так же быстро поднимать машины на полётную палубу. Эта же схема была позаимствована и Императорским флотом Японии. В то время как процедура подъёма самолёта из трюма первого американского авианосца на его полётную палубу – равно как и процедура его спуска обратно – с учётом промежуточной сборки или разборки занимала уже десятки минут на каждую ма-ши-ну. По воспоминаниям служивших на «Лэнгли» пилотов, одна только перегрузка самолёта с платформы са-мо-лё-то-подъ-ёмника на бывшую верхнюю палубу (или наоборот) могла занимать до 12 минут.



Приглашённая на авианосец «Лэн­гли» публика наблюдает за предполётной сборкой извлечённого из трюма разведчика «Воут» O2U «Корсар», происходящей на платформе самолётоподъёмника. Обратите внимание, на какой высоте от бывшей верхней палубы корабля находится платформа – это её самая нижняя позиция. Сверху также видны обе кран-балки, использовавшиеся для перемещения самолётов.


Для сокращения этого времени часть самолётов можно было держать на бывшей верхней палубе корабля уже в со-б-ран-ном виде, но в таком случае машины стояли на крышках люков трюмов, закрывая доступ к находившимся в них самолётам. Командованию авианосца пришлось придумывать и отрабатывать сложные алгоритмы перемещения запаркованных на «не-до-ан-гар-ной» палубе машин с помощью кран-балок, а также при любой возможности использовать парковку самолётов на по-лёт-ной палубе, что также требовало разработки алгоритмов их перемещения и «натаскивания» палубной команды на эти операции. В случае «Лэнгли» это были всего лишь вынужденные меры, что называется «не от хорошей жизни», но именно они дали впоследствии толчок к разработке уникальной американской технологии палубных операций, обеспечившей серьёзные преимущества авианосцам ВМС США в ходе Второй Мировой войны.



«Недоангарная» бывшая верхняя палуба авианосца «Лэнгли», около 1925 года. На переднем плане справа торпедоносец «Дуглас» DT-2 с демонтированными плоскостями. Также видны восемь истребителей «Воут» VE-7 из эскадрильи VF-2. Машины стоят на крышках люков трюмов-самолётохранилищ. Сверху видна кран-балка для перемещения самолётов.


Создание этой технологии связано, в первую очередь, с именем «отца американской палубной авиации» капитана 1-го ра-н-га (впоследствии адмирала и главкома ВМС США) Джозефа М. Ривза. По основному образованию он был артиллерийским офицером и к тому времени успел покомандовать крейсером и аж тремя линкорами. Однако во время обучения в Военно-морском колледже (научно-учебный центр по подготовке старшего и высшего командного состава ВМС США, аналог нашей Во-ен-но-морской академии) Ривз стал энтузиастом морской авиации. Поэтому он (в 52 года!) прошёл под-го-тов-ку лётного на-блю-да-те-ля и в августе 1925 года возглавил авиацию линейных сил ВМС США (Commander Aircraft Squadron, Battle Fleet ).


Контр-андмирал Джозеф М. Ривз, 1928 г.


А состояла эта «авиация» на тот момент из более чем скромной авиагруппы «Лэнгли», что совершенно не устраивало её нового командира, желавшего на практике проверить разработанные им тактические решения по ее применению. Для этого предстояло решить ряд технических и организационных проблем, и здесь капитану 1-го ранга на коммодорской должности серьёзно помогло то, что он прекрасно знал устройство «Лэнгли», так как первым кораблём, которым он командовал в своей карьере, когда-то был некий угольщик «Юпитер».

Вызовы и решения

Ранние аэропланы, садившиеся на палубы первых авианосцев, были очень лёгкими и имели очень низкую посадочную ско-ро-сть. Фактически, опытный пилот мог почти уровнять скорость относительно палубы идущего полным ходом против ве-тра авианосца. Поэтому главной проблемой тогда было не столько затормозить садившуюся машину, сколько пре-до-твра-тить снос лёгкого аэроплана с палубы за борт в результате внезапного порыва ветра, какой-либо турбулентности и т. п.



Посадка британского истребителя-разведчика «Сопвич Пап» на палубу первого в истории авианосца HMS «Фьюриес», 1917 год. Хорошо видна одна из ранних версий посадочных приспособлений «британской схемы»: продольные аэрофинишёры и рампа для торможения. Колёсное шасси заменено лыжами для увеличения трения. Никаких зацепов на шасси ещё нет. На переднем плане – прообраз будущих аварийных барьеров, сделанный из вертикально натянутых канатов.


Именно под эту задачу в Королевском флоте Великобритании в ходе Первой Мировой войны и были разработаны первые посадочные приспособления (arresting gear ), так называемая «ловушка Бастида» (Busteed trap ), названная по имени раз-ра-бот-чика, капитана 2-го ранга Джека Бастида. Она представляла собой металлические тросы, натянутые вдоль кормовой части по-лёт-ной палубы, поднимавшиеся с помощью двух рамп на высоту 9 дюймов [около 23 см] и располагавшиеся на таком же рас-сто-я-нии друг от друга. Соответственно, на тележках шасси первых палубных самолётов были смонтированы своеобразные «гребёнки» с редкими зубьями-«рогами» V-образной формы.



Посадка британского истребителя-бомбардировщика «Сопвич» 1½ «Страттер» на первый в истории авианосец со «сквозной» полётной па-лу-бой – HMS «Аргус», 1918 год. Хорошо видны посадочные приспособления классической «британской схемы»: поддерживаемые рам-па-ми продольные аэрофинишёры, а также смонтированная на тележке шасси самолёта «гребёнка» с V-образными зубьями-«рогами» для зацепа тросов аэрофинишёра.


При посадке они (плюс колёса шасси) попадали между тросов и таким образом страховали машину как от сноса вбок, так и от подскока или переворота. А для торможения самолёта с его малой посадочной скоростью в тот период хватало со-про-тив-ле-ния воздуха, трения горизонтальной части «гребёнки» о тросы, а также передней рампы аэрофинишёра, въезжая на которую машина должна была потерять бóльшую часть скорости. В качестве дополнительной страховки от выката самолёта с полётной палубы, в её конце устанавливали прообраз аварийного барьера (crash barrier ) в виде редкой сетки из тросов (впервые использовалось ещё на первом в мире авианосце «Фьюриес»).



Японская версия «британской системы». Первая посадка первого японского палубного самолёта, истребителя «Мицубиси» 1MF, на первый японский авианосец «Хосё», 1923 г. Хорошо видно, что исходная схема претерпела значительные изменения. Видна классическая британская «гребёнка» между колёсами шасси, но продольные тросы авиафинишёров занимают гораздо больше места как по длинне, так и по ширине. Кроме того, они поддерживаются не рампами, а складывающимися подпружиненными дощечеками. Однако каждая из них, в отличие от американской версии, поддерживает сразу несколько тросов. Отсутствуют как рампа, так и какая-либо система активного торможения.


Главным недостатком этой «британской системы», применявшейся, с некоторыми модификациями, в 1920-х годах на бри-тан-с-ких, японских и американских авианосцах, было то, что для посадки требовалась практически вся длина полётной па-лу-бы. Поэтому сразу после торможения самолёт необходимо было опускать на ангарную палубу, чтобы освободить полётную для приёма следующей машины. Таким образом, интервал между посадками определялся продолжительностью цикла са-мо-лё-то-подъ-ём-ника, а численность авиагруппы жёстко лимитировалась вместимостью ангаров авианосца.

Особый американский путь

Именно подобная система была изначально установлена и на первом американском авианосце CV-1 «Лэнгли», а затем и на перестроенных из линейных крейсеров CV-2 «Лексингтон» и CV-3 «Саратога». Разрабатывавший её американскую версию капитан-лейтенант резерва ВМС США Альфред Прайд сохранил «британские» продольные тросы аэрофинишёров, которые, однако, поддерживались уже не рампами, а складывающимися при необходимости подпружиненными дощечками. Похожая схема была применена и на первом японском авианосце «Хосё».



Посадка американского палубного торпедоносца «Дуглас» DT-2 на авианосец «Лэнгли», 1925 год. Хорошо видно сочетание продольных аэ-ро-фи-ни-шё-ров «британской схемы», но поддерживаемых уже не рампами, а рядами складывающихся подпружиненных дощечек (по одной на трос), а также аэрофинишёров с поперечными тросами (видны слева, в кормовой части палубы).


При этом Прайд отказался от «пассивного» торможения с помощью рампы или просто пробега в пользу другой бри-тан-с-кой разработки 1918 года, не нашедшей применения у себя на родине. Ее автором был всё тот же капитан 2-го ранга Ко-ро-лев-с-ко-го флота Великобритании Джек Бастид, хотя его устройство, в свою очередь, восходило к конструкции, раз-ра-бо-тан-ной аме-ри-кан-с-ким инженером Хью Робинсоном ещё в 1911 году.

В варианте Бастида это были использовавшиеся ещё при первой посадке аэроплана на корабль поперечные тросы аэ-ро-фи-ни-шё-ров, за которые при посадке цеплялся специальный крюк – «посадочный гак » – свисавший в хвостовой части са-мо-лё-та. Основное отличие заключалось в том, что теперь тросы крепились уже не к лежащим на палубе мешкам с песком, а уходили одним концом через шкивы под палубу, где к ним были подвешены грузы (впрочем, скорее всего, это были всё те же мешки с песком или дробью). Кроме того, тросы аэрофинишёров были снабжены гидравлической подъёмной системой, которая да-ва-ла возможность опускать их на палубу, дабы они не мешали при взлёте самолётов.



Посадка первого американского палубного истребителя «Воут» VE-7 «Блюбёрд» на палубу авианосца «Лэнгли», 1923 год. Хорошо видны тросы аэрофинишёров, а также посадочные приспособления самолёта, сочетающие как британскую «гребёнку» на тележке шасси, так и непривычной для нас конструкции посадочный гак – тогда считалось, что его следут крепить как можно ближе к центру тяжести самолёта.


Теперь для посадки машин хватало кормовой части полётной палубы – не более трети от её общей длины. Оставшееся место можно было отвести для парковки самолётов, что в случае «Лэнгли», как мы помним, было более чем актуально. Но всегда оставался риск, что совершающий посадку самолёт из-за незацепа, обрыва троса аэрофинишёра или посадочного гака может выкатиться из посадочной зоны и, несмотря на оставляемое для страховки пространство, врежется в запаркованные в носовой части палубы машины. И капитан 1-го ранга Ривз совместно с сотрудниками Управления Аэронавтики ВМС США нашли решение, позволившее устранить эту проблему. С позиции послезнания оно кажется простым и очевидным, однако на самом деле это была, без преувеличения, подлинная революция во влётно-посадочных операциях палубной авиации.


Продолжение следует...

Использованная литература :
1. Norman Friedman, “U.S. Aircraft Carriers: An Illustrated Design History”, 1983.
2. Williamson Murray, Allan R. Millett, “Military Innovation in the Interwar Period”, 1998.
3. Paul E. Fontenoy, “Aircraft Carriers: An Illustrated History of Their Impact”, 2006.
4. Dan Linton, “Evolution of the Aircraft Carrier: The First Two Decades”, 2010.
5. E. R. Johnson, “United States Naval Aviation, 1919–1941: Aircraft, Airships and Ships Between the Wars”, 2011.

Команды для игроков

Команда Описание
me <сообщение > Аналогично команде /me в IRC- и jabber-клиентах. Команда посылает сообщение игрока от третьего лица: «* Никнейм текст действия ». Может использоваться для показания конкретного статуса игрока («*Player исследует пещеру»).
tell <игрок > <сообщение >
w <игрок > <сообщение >
Отправляет личное сообщение другому игроку. Используется на серверах, чтобы написать что-либо другому игроку так, чтобы остальные не видели.
kill Наносит игроку 1000 единиц урона, убивая его. Полезно, если игрок заблудился, застрял или умирает от голода (если после смерти игрок может легко найти вещи). Работает в режиме Творчество (после предварительной версии 12w16a). Также после использования в чате отображается сообщение «Ouch. That look like it hurt.»
seed Выводит зерно мира. Введено в версии 12w19a.

Команды только для операторов

Команда Описание
clear <цель > [номер объекта ] [дополнительные данные ] Полностью очищает инвентарь указанного игрока или только удаляет из него указанные по ID объекты.
debug Запускает новую сессию профилирования отладки или останавливает текущую, если она запущена. Если сессия запущена, это выявляется характерными лагами во время работы с консолью и созданием файла с результатами в папке debug после остановки. Команда была добавлена в 12w27a.
defaultgamemode Устанавливает игровой режим по умолчанию. Это значит, что новые игроки, которые только подключились, будут играть в этом игровом режиме. Команда также доступна в одиночной игре, но польза от неё есть только в многопользовательской. survival = s = 0, creative = c = 1, adventure = a = 2. Эта команда была добавлена в 12w22a.
difficulty <0 | 1 | 2 | 3> Устанавливает сложность: 0 - мирно, 1 - легко, 2 - нормально, 3 - сложно. Эта команда была добавлена в 12w32a.
effect <цель > <эффект > [длительность ] [уровень ] Накладывает на игроков указанный эффект. Длительность по умолчанию - 30 секунд, чтобы снять эффект, установите его длительность в 0. Длительность имеет ограничение в 1 000 000 секунд, уровень с 13w09c ограничен в 255. Эта команда была добавлена в 13w09a.
enchant <цель > <EID > [уровень ] Зачаровывает предмет, который игрок держит в руках, по идентификатору эффекта. Несовместимые и невозможные чары не могут быть получены. Эта команда была добавлена в 1.4.4 Pre-release.
gamemode [цель ] Изменяет режим игры для конкретного игрока. Выживание (survival, s или 0), Творчество (creative, c или 1), Приключение (adventrure, a или 2). Если никнейм игрока не указан, то команда изменит режим игры для того, кто её ввел. Чтобы команда сработала, игрок должен быть в сети. Заметка: в списке чит-кодов эта команда самая первая. Чтобы быстро ее набрать, нажмите / и Tab ⇆ .
gamerule <правило > [значение ] Регулирует несколько базовых параметров (правил). Значение может быть true или false , если значение не указано, будет выведено текущее состояние правила. Список:
  • doFireTick - при false огонь не распространяется, не уничтожает блоки и не затухает.
  • doMobLoot - при false с мобов не выпадает дроп (опыт все равно выпадает).
  • doMobSpawning - при false мобы не могут спауниться.
  • doTileDrops - при false при разрушении блоков не выпадают предметы.
  • keepInventory - при true при смерти инвентарь игрока сохраняется.
  • mobGriefing - при false мобы не могут уничтожать блоки (отключает взрывы криперов, возможности странников Края поднимать блоки или возможность мобов топтать грядки).
  • commandBlockOutput - при false командный блок не выводит ничего в чат при выполнении команд.
  • naturalRegeneration - при false здоровье самостоятельно не регенерируется. При true здоровье регенерируется за счет траты сытости.
  • doDaylightCycle - при false останавливается цикл смены дня/ночи.
give <цель > <номер объекта > [количество ] [дополнительная информация ] Даёт игроку определённый предмет/блок в указанном количестве по нумерации данных. Например, если ввести /give John 4 , то это даст игроку с никнеймом John 1 блок булыжника, /give John 35 64 11 выдаст полную стопку синей шерсти, /give John 278 1 1000 - поврежденную на 1000 единиц алмазную кирку, а /give John 373 10 8193 выдаст 10 пузырьков зелья регенерации .
help [страница | команда ]
? [страница | команда ]
Выводит список всех доступных консольных команд. Список разделен на страницы, поэтому в качестве аргумента команда может принять номер страницы. Можно также вывести справку по конкретной команде. Заметка: некоторые команды не выводятся.
playsound <звук > <цель > [x ] [y ] [z ] [громкость ] [тональность ] Воспроизводит звук или музыку. Параметр звук , это путь к файлу в папке sound в директории игры. Путь пишется через ".". Параметр цель обозначает игрока который услышит звук. Параметры x y z указывают координату откуда будет исходить звук. Параметры громкость и тональность измеряются нецелыми числами. Например, /playsound random.explode @a 100 75 30 1.4 0.7, воспроизведет звук взрыва для всех игроков на координате 100 75 30 с громкостью 1.4 и тональностью 0.7. Эта команда была добавлена в 1.6.1 Pre-release.
publish Открывает доступ к миру по локальной сети. Эта команда была добавлена в 12w24a.
say <сообщение > Показывает всем игрокам на сервере сообщение розовым цветом.
scoreboard Дает доступ к системе счёта игровых событий.
spawnpoint [цель ] [x ] [y ] [z ] Устанавливает точку спауна для игрока. Если игрок не указан, выполняется для набравшего команду. Если координаты не указаны, точкой спауна устанавливается текущая позиция.
time set <число | day | night> Устанавливает время суток. Параметр число может принимать целочисленные значения в диапазоне от 0 до 24000, где 0 это рассвет, 6000 полдень, 12000 закат и 18000 полночь (т.e. часы разделены пополам). day равносильно 0 (рассвет) и night - 12500 (закат).
time add <число > Добавляет к текущему времени суток указанное значение. Параметр число может принимать целые неотрицательные значения.
toggledownfall Переключатель осадков.
tp <цель1 > <цель2 > Телепортирует первого игрока к второму, то есть "игрок1" к "игрок2"
tp <цель > <x > <y > <z > Телепортирует игрока в указанные координаты x, y, z. Значение y должно быть больше 0. Можно использовать относительные координаты, например, /tp John ~10 70 ~-16 переместит игрока John на высоту 70, сместит на +10 по X и на -16 по Z.
weather <время > Устанавливает погоду на определенное время, указанное в секундах. Эта команда была добавлена в 12w32a.
xp <количество > <цель > Даёт указанному игроку определенное количество очков опыта, допустимые значения от 0 до 5000. Если после числа ввести L, будет добавлено указанное количество уровней. Кроме того, уровни можно понижать, например, -10L уменьшит уровень игрока на 10.

Команды только для мультиплеера

Команда Описание
ban <игрок > [причина ] Блокирует никнейм игрока, добавляя его в чёрный список сервера. Блокировка удаляет никнейм игрока из белого списка.
ban-ip <ip-адрес > Блокирует все подключения с конкретного IP-адреса.
banlist Отображает список заблокированных игроков (чёрный список). Чтобы вывести список заблокированных IP-адресов, нужно ввести дополнительный параметр: banlist ips
deop <цель > Снимает с игрока привилегии оператора.
kick <цель > [причина ] Выкидывает указанного игрока с сервера.
list Выводит список всех подключенных к серверу игроков. Аналогично нажатию Tab ⇆
op <цель > Дает указанному игроку привилегии оператора.
pardon <никнейм > Удаляет никнейм игрока из чёрного списка, что вновь даёт ему возможность подключаться к серверу.
pardon-ip <ip-адрес > Удаляет указанный IP-адрес из черного списка.
save-all Принудительно заставляет сервер записать все изменения в игровом мире на жёсткий диск.
save-off Отключает функцию сервера записывать файлы игрового мира на жёсткий диск.
save-on Позволяет серверу сохранять файлы игрового мира автоматически. По умолчанию эта опция включена.
stop Завершает работу сервера нормальным путём.
whitelist <никнейм > Добавляет или удаляет игрока с конкретным никнеймом в белый список.
whitelist list Выводит всех игроков в белом списке.
whitelist Включает/выключает использование белого списка для сервера. Операторы сервера всегда смогут подключится, вне зависимости от того, есть ли их никнеймы в белом списке.
whitelist reload Перезагружает белый список, то есть обновляет его в соответствии с файлом white-list.txt на локальном жёстком диске (может использоваться, когда white-list.txt модифицируется сторонними программами).

Команды только для командного блока

Эти команды не могут быть выполнены в чате или в консоли сервера, только в командном блоке.

Цели команд

В качестве цели обычно выступает ник игрока, но в 1.4.2 был добавлен расширенный синтаксис. Существует три основных заменителя имени:

  • @p соответствует ближайшему игроку;
  • @a - всем игрокам (будет получен список из всех игроков, и к каждому будет применена команда);
  • @r - случайному игроку.

Заменитель имени может быть расширен при помощи аргументов, указываемых в квадратных скобках (например, @p). Аргументы перечисляются через запятую. Доступные аргументы:

  • x - X координата центра поиска;
  • y - Y координата центра поиска;
  • z - Z координата центра поиска;
  • r - максимальный радиус поиска;
  • rm - минимальный радиус поиска;
  • m - игровой режим;
  • l - максимальный уровень игрока;
  • lm - минимальный уровень игрока;
  • c - специальный аргумент для @a: ограничение количества игроков, к которым будет применена команда. Например, @a - это 10 первых игроков из списка, @a - 12 последних игроков из списка.

Для системы счёта игровых событий есть специальные аргументы. score_name и score_name_min соответствуют игрокам с максимальным и минимальным счётом соответственно, где вместо name нужно подставить название события. Аргумент team позволяет найти игроков в определённой команде, а синтаксис team=!teamName - игроков не в данной команде. При этом team= соответствует всем игрокам без команды вообще.

Система команд сопроцессора включает в себя около 80 машинных команд, включающих в себя

Мнемоническое обозначение команд сопроцессора характеризует особенности их работы и в связи с этим может представлять определенный интерес. Поэтому коротко рассмотрим основные моменты образования названий команд:

  • все мнемонические обозначения начинаются с символа f (float );
  • вторая буква мнемонического обозначения определяет тип операнда в памяти, с которым работает команда: — i - целое двоичное число; — b - целое десятичное число; — отсутствие буквы - вещественное число;
  • последняя буква мнемонического обозначения команды р означает, что последним действием команды обязательно является извлечение операнда из стека;
  • последняя или предпоследняя буква r (reversed) означает реверсивное следование операндов при выполнении команд вычитания и деления, так как для них важен порядок следования операндов.

Система команд сопроцессора отличается большой гибкостью в выборе вариантов задания команд, реализующих определенную операцию, и их операндов. Минимальная длина команды сопроцессора - 2 байта. Все команды сопроцессора оперируют регистрами стека сопроцессора. Если операнд в команде не указывается, то по умолчанию используется вершина стека сопроцессора (логический регистр st(0) ). Если команда выполняет действие с двумя операндами по умолчанию, то эти операнды – регистры st(0) и st(1) .

Команды передачи данных

Группа команд передачи данных предназначена для организации обмена между регистрами стека, вершиной стека сопроцессора и ячейками оперативной памяти. Команды этой группы имеют такое же значение для процесса программирования сопроцессора, как и команда mov основного процессора. С помощью этих команд осуществляются все перемещения значений операндов в сопроцессор и из него. По этой причине для каждого из трех типов данных, с которыми может работать сопроцессор, существует своя подгруппа команд передачи данных. Собственно на этом уровне все его умения по работе с различными форматами данных и заканчиваются. Главной функцией всех команд загрузки данных в сопроцессор является преобразование их к единому представлению в виде вещественного числа расширенного формата. Это же касается и обратной операции - сохранения в памяти данных из сопроцессора.
Команды передачи данных можно разделить на следующие группы:

  • команды передачи данных в вещественном формате;
  • команды передачи данных в целочисленном формате;
  • команды передачи данных в двоично-десятичном формате.

Основными командами передачи данных являются

  • команда (сохранение вершины стека сопроцессора в память)

и их модификации.

Команды передачи данных вещественного типа
Используются в случае если операнд, применяемый в команде, имеет вещественный тип (4, 8 или 10-байтный).

Команда Операнды Пояснение Описание
FLD src TOP SWR -=1; ST(0)=src;
FST dst dst=ST(0);
FSTP dst dst=ST(0); TOP SWR +=1;
FXCH ST(i) ST(0) ↔ ST(i) Обмен значений ST(0) и ST(i)

Команды передачи данных целого типа Используются в случае если операнд, применяемый в команде, имеет целый тип (1, 2, 4 или 8-байтный).

Команда Операнды Пояснение Описание
FILD src TOP SWR -=1; ST(0)=src;
FIST dst dst=ST(0); Сохранение вершины стека в память
FISTP dst dst=ST(0); TOP SWR +=1; Сохранение вершины стека в память с выталкиванием

Команды передачи данных двоично-десятичного типа Используются в случае если операнд, применяемый в команде, представлен в двоично-десятичной системе счисления (1, 2, 4 или 8-байтный).

Команда Операнды Пояснение Описание
FBLD src TOP SWR -=1; ST(0)=src;
FBSTP dst dst=ST(0); TOP SWR +=1; Сохранение вершины стека в память с выталкиванием

Команды загрузки констант Команды загрузки констант не имеют операндов и загружают соответствующее константное значение в вершину стека сопроцессора.

Команда Пояснение Описание
FLDZ TOP SWR -=1; ST(0)=0;
FLD1 TOP SWR -=1; ST(0)=1;
FLDPI TOP SWR -=1; ST(0)=3.1415926535;
FLDL2T TOP SWR -=1; ST(0)=3.3219280948;
FLDL2E TOP SWR -=1; ST(0)=1.4426950408;
FLDLG2 TOP SWR -=1; ST(0)=0.3010299956;
FLDLN2 TOP SWR -=1; ST(0)=0.6931471805;

Команды сравнения данных

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

Команды сравнения данных вещественного типа

Команда Операнды Пояснение Описание
FCOM FUCOM src ST(0) — src Вещественное сравнение
FCOMP FUCOMP src ST(0) — src; TOP SWR +=1; Вещественное сравнение с выталкиванием
FCOMPP FUCOMPP ST(0) — ST(1); TOP SWR +=2; Вещественное сравнение с двойным выталкиванием
FCOMI FUCOMI ST, ST(i) ST(0) — ST(i) Вещественное сравнение c модификацией EFLAGS
FCOMIP FUCOMIP ST, ST(i) ST(0) — ST(i); TOP SWR +=1; Вещественное сравнение c выталкиванием с модификацией EFLAGS
FXAM Анализ ST(0)

Команды сравнения сравнивают значение в вершине стека с операндом. По умолчанию (если операнд не задан) происходит сравнение регистров ST(0) и ST(1) . В качестве операнда может быть задана ячейка памяти или регистр. Команда устанавливает биты C0, C2, C3 регистра swr в соответствии с таблицей. Сбрасывает в 0 признак C1 при пустом стеке после выполнения команды.

Условие С3 С2 C0
ST(0) > src 0 0 0
ST(0) < src 0 0 1
ST(0) = src 1 0 0
Недопустимая операция (#IA) 1 1 1

Особый интерес представляет команда FCOMI (FUCOMI) . Она сравнивает содержимое регистра ST(0) со значением операнда ST(i) и устанавливает биты ZF, PF, CF регистра EFLAGS в соответствии с таблицей. Анализ выполнения сравнения осуществляет последующая команда условного перехода (команда центрального процессора).

Условие ZF PF CF Переход
ST(0) > ST(i) 0 0 0 ja
ST(0) < ST(i) 0 0 1 jb
ST(0) = ST(i) 1 0 0 je
ST(0) >= ST(i) * 0 0 jae
ST(0) <= ST(i) * 0 * jbe
Недопустимая операция (#IA) 1 1 1

Команда FXAM проверяет содержимое регистра ST(0) и устанавливает биты C0, C2, C3 регистра swr в соответствии с таблицей. Бит C1 устанавливается равным знаковому биту ST(0).

Класс С3 С2 C0
Неподдерживаемый формат 0 0 0
Нечисло (NaN) 0 0 1
Конечное число 0 1 0
Бесконечность 0 1 1
Ноль 1 0 0
Пустой регистр 1 0 1
Ненормированное число 1 1 0

Команды сравнения данных целого типа

Команда Операнды Пояснение Описание
FICOM src ST(0) — src Cравнение с целым числом src
FICOMP src ST(0) — src; TOP SWR +=1; Cравнение с целым числом src с выталкиванием
FTST ST(0)-0; Анализ ST(0) (сравнение с нулем)

Арифметические команды

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

Арифметические команды вещественного типа Схема расположения операндов вещественных команд традиционна для команд сопроцессора. Первый операнд по умолчанию (если не указан в команде) располагается в вершине стека сопроцессора - регистре ST(0) , и на его место после выполнения команды записывается результат. Второй операнд может быть расположен либо в памяти, либо в другом регистре стека сопроцессора. По умолчанию в качестве второго операнда используется регистр ST(1) . Допустимыми типами операндов в памяти являются вещественные форматы простой и двойной точности. В отличие от целочисленных арифметических команд, вещественные арифметические команды допускают большее разнообразие в сочетании местоположения операндов и самих команд для выполнения конкретного арифметического действия.

Команда Операнды Пояснение Описание
FADD dst, src dst = dst + src; Сложение вещественное
FADDP ST(i), ST(0) ST(i) = ST(i) + ST(0); TOP SWR +=1; Сложение вещественное с выталкиванием
FSUB dst, src dst = dst — src; Вычитание вещественное
FSUBP ST(i), ST(0) ST(i) = ST(i) — ST(0); TOP SWR +=1; Вычитание вещественное с выталкиванием
FSUBR dst, src dst = src — dst; Вычитание вещественное реверсивное
FSUBRP ST(i), ST(0) ST(i) = ST(0) — ST(i); TOP SWR +=1; Вычитание вещественное реверсивное с выталкиванием
FMUL dst, src dst = dst * src; Умножение вещественное
FMULP ST(i), ST(0) ST(i) = ST(i) * ST(0); TOP SWR +=1; Умножение вещественное с выталкиванием
FDIV dst, src dst = dst / src; Деление вещественное
FDIVP ST(i), ST(0) ST(i) = ST(i) / ST(0); TOP SWR +=1; Деление вещественное с выталкиванием
FDIVR dst, src dst = src /dst; Деление вещественное реверсивное
FDIVRP ST(i), ST(0) ST(i) = ST(0) / ST(i); TOP SWR +=1; Деление вещественное реверсивное с выталкиванием

Арифметические команды целого типа Целочисленные арифметические команды предназначены для работы на тех участках вычислительных алгоритмов, где в качестве исходных данных используются целые числа в памяти, имеющие размерность 4 или 8 байт. Перед выполнением команды целочисленное значение преобразуется к вещественному формату двойной расширенной точности (80 бит).

Команда Операнды Пояснение Описание
FIADD src ST(0) = ST(0) + src; Сложение целочисленное
FISUB src ST(0) = ST(0) — src; Вычитание целочисленное
FISUBR src ST(0) = src — ST(0); Вычитание целочисленное реверсивное
FIMUL src ST(0) = ST(0) * src; Умножение целочисленное
FIDIV src ST(0) = ST(0) / src; Деление целочисленное
FIDIVR src ST(0) = src / ST(0); Деление целочисленное реверсивное

Дополнительные арифметические команды Команды этой группы не имеют операндов, производят действие с операндом в вершине стека сопроцессора. Результат выполнения операции сохраняется в регистре ST(0) . Сбрасывают в 0 признак C1 при пустом стеке, устанавливают в 1 при округлении результата.

Команда Пояснение Описание
FSQRT ST(0) = √ST(0) Вычисление квадратного корня
FABS ST(0) = |ST(0)| Вычисление модуля
FCHS ST(0) = -ST(0) Изменение знака
FXTRACT temp = ST(0); ST(0)=порядок(temp); TOP-=1; ST(0)=мантисса(temp); Выделение порядка и мантиссы
FSCALE ST(0) = ST(0) · 2 ST(1) Масштабирование по степеням 2
FRNDINT ST(0)=(ST(0)) Округление ST(0)
FPREM ST(0)=ST(0)-Q*ST(1) Частичный остаток от деления
FPREM1

Команда FXTRACT – выделение порядка и мантиссы. Операнд-источник по умолчанию, хранящийся в регистре ST(0) , разделяется на порядок и мантиссу, порядок сохраняется в ST(0) , а затем мантисса помещается в стек, меняя при этом указатель вершины стека (поле top ). Для операнда, хранящего мантиссу, знак и мантисса остаются неизменными по сравнению с операндом источника. Вместо порядка записывается 3FFFh. После выполнения команды регистр ST(1) хранит значение порядка исходного операнда.

Команда FSCALE – команда масштабирования: изменяет порядок значения, находящегося в вершине стека сопроцессора ST(0) на величину ST(1) . Команда не имеет операндов. Величина в ST(1) рассматривается как число со знаком. Его прибавление к полю порядка вещественного числа в ST(0) означает его умножение на величину 2 ST(1) . С помощью данной команды удобно масштабировать на степень двойки некоторую последовательность чисел в памяти. Для этого достаточно последовательно загружать числа в вершину стека, после чего применять команду FSCALE и сохранять значения обратно в памяти.

Команда FRNDINT – округляет значение, находящееся в вершине стека сопроцессора ST(0) . Команда не имеет операндов. Сопроцессор имеет программно-аппаратные средства для выполнения операции округления тех результатов работы команд, которые не могут быть точно представлены. Но операция округления может быть проведена и принудительно к значению в регистре ST(0) , для этого предназначена последняя команда в группе дополнительных команд - команда округления. Возможны четыре режима округления величины в ST(0) , которые определяются значениями в поле RC управляющего регистра CWR . Для изменения режима округления используются команды FSTCWR и FLDCWR , которые, соответственно, записывают в память содержимое управляющего регистра сопроцессора и восстанавливают его обратно. Таким образом, пока содержимое этого регистра находится в памяти, можно установить необходимое значение поля RC .

Команда FPREM – получение частичного остатка от деления. Исходные значения делимого и делителя размещаются в стеке - делимое в ST(0) , делитель в ST(1) . Команда производит вычисления по формуле

ST(0)=ST(0)-Q*ST(1),

где Q – целочисленное частное от деления. Делитель рассматривается как некоторый модуль. Поэтому в результате работы команды получается остаток от деления по модулю. Физически работа команды заключается в реализации деление в столбик. При этом каждое промежуточное деление осуществляется отдельной командой FPREM . Цикл, центральное место в котором занимает команда FPREM , завершается, когда очередная полученная разность в ST(0) становится меньше значения модуля в ST(1) . Судить об этом можно по состоянию флага С2 в регистре состояния swr:

  • если С2 =0, то работа команды fprem полностью завершена, так как разность в ST(0) меньше значения модуля в ST(1) ;
  • если С2 =1, то необходимо продолжить выполнение команды fprem , так как разность в ST(0) больше значения модуля в ST(1) .

Таким образом, необходимо анализировать флаг С2 в теле цикла. Для этого С2 записывается в регистр флагов основного процессора с последующим анализом его командами условного перехода. Другой способ заключается в сравнении ST(0) и ST(1) . Команда fprem не соответствует последнему стандарту на вычисления с плавающей точкой IEEE-754. По этой причине в систему команд сопроцессора i387 была введена команда fprem1 , которая отличается от FPREM тем, что накладывается дополнительное требование на значение остатка в ST(0) . Это значение не должно превышать половины модуля в ST(1) . После полного завершения работы команды FPREM/FPREM1 (когда С2 =0), биты С0, С3, С1 содержат значения трех младших разрядов частного.

Команды трансцендентных функций

Сопроцессор имеет ряд команд, предназначенных для вычисления значений тригонометрических функций, а также значений логарифмических и показательных функций. Значения аргументов в командах, вычисляющих результат тригонометрических функций, должны задаваться в радианах. Данная группа команд не имеет операндов. Результат сохраняется в регистре ST(0) . Сбрасывает в 0 признак C1 при пустом стеке, устанавливают в 1 при округлении. Признак C2 устанавливается в 1 при выходе значения угла за границы диапазона [-2 63 ; 2 63 ].

Команда Пояснение Описание
FSIN ST(0) = sin(ST(0)) Вычисление синуса
FCOS ST(0) = cos(ST(0)) Вычисление косинуса
FSINCOS temp=ST(0); ST(0)=sin(temp); TOP-=1; ST(0)=cos(temp); Вычисление синуса и косинуса
FPTAN ST(0)=tg(ST(0)); TOP-=1; ST(0)=1.0; Вычисление тангенса
FPATAN ST(1)=atan(ST(1)/ST(0)); TOP+=1; Вычисление арктангенса
F2XM1 ST(0)=2 ST(0) -1; Вычисление выражения y=2 x -1
FYL2X x=ST(0); y=ST(1); TOP+=1; ST(0)=y*log 2 x; Вычисление выражения y*log 2 x
FYL2XP1 x=ST(0); y=ST(1); TOP+=1; ST(0)=y*log 2 (x+1); Вычисление выражения y*log 2 (x+1)

Команда FPTAN – вычисляет частичный тангенс угла: ST(1)=tg(ST(0)), ST(0)=1 . Это сделано для совместимости с сопроцессорами 8087 и 287. Выполнение данной команды в них имело следующую особенность: результат команды возвращался в виде двух значений - в регистрах ST(0) и ST(1) . Ни одно из этих значений не является истинным значением тангенса. Истинное его значение получается лишь после операции деления ST(0)/ST(1) . Таким образом, для получения тангенса требовалась еще команда деления. Синус и косинус в ранних версиях сопроцессоров вычислялись через тангенс половинного угла. В микропроцессоре i387 появились самостоятельные команды для вычисления синуса и косинуса, вследствие чего отпала необходимость составлять соответствующие подпрограммы. Что же до команды fptan , то она по-прежнему выдает два значения в st(0) и st(1) , но значение в st(0) всегда равно 1, а в st(1) находится истинное значение тангенса числа, находившегося в st(0) до выполнения команды fptan .

Команда FPATAN вычисляет частичный арктангенс угла: . Команда не имеет операндов. Результат возвращается в регистр ST(1) , после чего производится выталкивание вершины стека. Команда FPATAN широко применяется для вычисления значений обратных тригонометрических функций (arcsin, arccos, arcctg, arccosec, arcsec). Для вычисления функции arcsin используется формула:

Для вычисления функции arccos используется формула:


Для вычисления функции arcctg используется формула:


Для вычисления этих функций необходимо выполнить следующую последовательность шагов:

  • Если а является мерой угла в градусах, то выполнить ее преобразование в радианную меру.
  • Вычислить значение выражения числителя и поместить его в стек.
  • Вычислить значение выражения знаменателя и поместить его в стек.
  • Выполнить команду fpatan с аргументами в st(0) =знаменатель и st(1) =числитель.

В результате этих действий в регистре ST(0) будет сформировано значение, которое и будет являться значением требуемой функции.

Команда F2XM1 вычисляет значение функции: 2 x -1. Исходное значение x размещается в вершине стека сопроцессора ST(0) и должно лежать в диапазоне [-1; 1]. Результат замещает значение в регистре ST(0) . Эта команда может быть использована для вычисления показательных функций. 1 вычитается для того, чтобы получить точный результат, когда x близок к нулю. Поскольку нормированное число всегда содержит в качестве первой значащей цифры единицу, если в результате вычисления функции получается число 1,000000000456…, то команда F2XM1 , вычитая 1 из этого числа, и затем, нормируя результат, формирует больше значащих цифр, то есть делает его более точным. Неявное вычитание единицы командой F2XM1 компенсируется командой FADD с единичным операндом.

Команда FYL2X вычисляет значение функции ST(0)=ST(1)·log 2 ST(0). Значение х должно лежать в диапазоне . В случае, если x превышает это значение (например, для вычисления 16 3) при вычислении выражения 3·log 2 16 командой FYL2X , получим в стеке значение 12. Попытка вычислить значение 2 12 командой F2XM1 ни к чему не приведет - результат будет не определен. В этой ситуации используется команда сопроцессора FSCALE , которая вычисляет значение выражения 2 х, но для целых значений x со знаком. Применив формулу

2 a+b = 2 a ·2 b ,

получаем решение проблемы. Разделяем дробный показатель степеней больших 1 по модулю на две части - целую и дробную. После этого вычисляем отдельно командами FSCALE и F2XM1 степени двойки и перемножаем результаты.

Команды управления сопроцессором

Данная группа команд предназначена для общего управления работой сопроцессора. Команды этой группы имеют особенность - перед началом своего выполнения они не проверяют наличие незамаскированных исключений. Однако такая проверка может понадобиться, в частности для того, чтобы при параллельной работе основного процессора и сопроцессора предотвратить разрушение информации, необходимой для корректной обработки исключений, возникших в сопроцессоре. Поэтому некоторые команды управления имеют аналоги, выполняющие те же действия плюс одну дополнительную функцию - проверку наличия исключения в сопроцессоре. Эти команды имеют одинаковые мнемокоды (и машинные коды тоже), отличающиеся только вторым символом N:

  • мнемокод, не содержащий второго символа N, обозначает команду, которая перед началом своего выполнения проверяет наличие незамаскированных исключений;
  • мнемокод, содержащий второй символ N, обозначает команду, которая перед началом своего выполнения не проверяет наличия незамаскированных исключений, то есть выполняется немедленно, что позволяет сэкономить несколько машинных тактов.

Эти команды имеют одинаковый машинный код. Отличие лишь в том, что перед командами, не содержащими символа N, транслятор ассемблера вставляет команду wait . Команда wait является полноценной командой основного процессора и ее, при необходимости, можно указывать явно. Команда wait имеет аналог среди команд сопроцессора - fwait .

Команда Операнды Пояснение Описание
FWAIT Синхронизация работы с центральным процессором
FINIT FNINIT CWR=037Fh; SWR=0; TWR=FFFFh; DPR=0; IPR=0; Инициализация сопроцессора
FSTSW FNSTSW dst AX dst=SWR; AX = SWR; Считать слово состояния сопроцессора в память
FSTCW FNSTCW dst AX dst=СWR; AX = CWR; Считать слово управления сопроцессора в память
FLDCW src CWR=src; Загрузить слово управления сопроцессора
FCLEX FNCLEX SWR=SWR & 7F00h Сброс флагов исключений
FINCSTP TOP+=1; Увеличение указателя стека сопроцессора на 1
FDECSTP TOP-=1; Уменьшение указателя стека сопроцессора на 1
FFREE ST(i) TAG(i)=11b Очистка указанного регистра
FNOP Пустая операция
FSAVE FNSAVE dst Сохранение состояния среды сопроцессора
FRSTOR src Восстановление состояния среды сопроцессора
FSTENV FNSTENV dst Частичное сохранение состо­яния среды сопроцессора
FLDENV src Восстановление частичного со­стояния среды сопроцессора

Команда FWAIT - команда ожидания. Предназначена для синхронизации работы процессора и сопроцессора. Так как основной процессор и сопроцессор работают параллельно, то может создаться ситуация, когда за командой сопроцессора, изменяющей данные в памяти, следует команда основного процессора, которой эти данные требуются. Чтобы синхронизировать работу этих команд, необходимо включить между ними команду wait/fwait . Встретив данную команду в потоке команд, основной процессор приостановит свою работу до тех пор, пока не поступит аппаратный сигнал о завершении очередной команды в сопроцессоре.

Команда FINIT/FNINIT - инициализация сопроцессора. Данная команда инициализирует управляющие регистры сопроцессора определенными значениями: CWR = 037Fh

  • RC=00b; округление к ближайшему целому;
  • PM,UM,OM,ZM,DM,IM=1; все исключения не замаскированы;
  • PC=11b; максимальная точность 64 бита.

SWR = 0h – отсутствие исключений и указание на то, что физический регистр стека сопроцессора r0 является вершиной стека и соответствует логическому регистру ST(0) ; TWR = FFFFh – все регистры стека сопроцессора пусты; DPR =0; IPR =0. Данную команду используют перед первой командой сопроцессора в программе и в других случаях, когда необходимо привести сопроцессор в начальное состояние.

Команда FSTSW/FNSTSW - сохранение содержимого регистра состояния swr в регистре ах или в ячейке памяти размером 2 байта. Эту команду целесообразно использовать для подготовки к условным переходам по описанной при рассмотрении команд сравнения схеме. Команда FSTCW/FNSTCW - сохранение содержимого регистра управления cwr в ячейке памяти размером 2 байта. Эту команду целесообразно использовать для анализа полей маскирования исключений, управления точностью и округления. В качестве операнда назначения не используется регистр ах, в отличие от команды FSTSW/FNSTSW .

Команда FLDCW - загрузки значения ячейки памяти размером 16 бит в регистр управления cwr . Эта команда выполняет действие, противоположное командам FSTCW/FNSTCW . Команду целесообразно использовать для задания или изменения режима работы сопроцессора. Если в регистре состояния swr установлен любой бит исключения, то попытка загрузки нового содержимого в регистр управления cwr приведет к возбуждению исключения. По этой причине необходимо перед загрузкой регистра cwr сбросить все флаги исключений в регистре swr .

Команда FCLEX/FNCLEX - позволяет сбросить флаги исключений, которые, в частности, необходимы для корректного выполнения команды FLDCW . Ее также применяют и в случаях, когда необходимо сбрасывать флаги исключений в регистре swr , например, в конце подпрограмм обработки исключений. Если этого не делать, то при исполнении первой же команды сопроцессора прерванной программы (кроме тех команд, которые имеют в названии своего мнемокода второй символ n) будет опять возбуждено исключение. PE, UE, OE, ZE, DE, IE, ES, SF и B биты регистра SWR равны 0.

Команда FINCSTP - увеличение указателя стека на единицу (поле top ) в регистре swr . Команда не имеет операндов. Действие команды fincstp подобно команде FST , но она извлекает значение операнда из стека «в никуда». Таким образом, эту команду можно использовать для выталкивания, ставшего ненужным операнда, из вершины стека. Команда работает только с полем top и не изменяет соответствующее данному регистру поле в регистре тегов twr , то есть регистр остается занятым и его содержимое из стека не извлекается.

Команда FDECSTP - уменьшение указателя стека (поле top ) в регистре swr . Команда не имеет операндов. Действие команды FDECSTP подобно команде FLD , но она не помещает значения операнда в стек. Таким образом, эту команду можно использовать для проталкивания внутрь стека операндов, ранее включенных в него. Команда работает только с полем top и не изменяет соответствующее данному регистру поле в регистре тегов twr , то есть регистр остается пустым.

Команда FFREE -помечает любой регистр стека сопроцессора как пустой. Команда записывает в поле регистра тегов, соответствующего регистру ST(i) , значение 11b, что соответствует, пустому регистру. При этом указатель стека (поле tор ) в регистре swr и содержимое самого регистра не изменяются. Необходимость в этой команде может возникнуть при попытке записи в регистр ST(i) , который помечен, как непустой. В этом случае будет возбуждено исключение. Для предотвращения этого применяется команда FFREE .

Команда FNOP - пустая операция. Не производит никаких действий и влияет только на регистр указателя команды IPR .

Команда FSAVE/FNSAVE - сохранения полного состояния среды сопроцессора в память по адресу, указанному операндом приемник. Размер области памяти зависит от размера операнда сегмента кода use16 или use32 :

  • use16 - область памяти должна быть 94 байта: 80 байт для восьми регистров из стека сопроцессора и 14 байт для остальных регистров сопроцессора с дополнительной информацией;
  • use32 - область памяти должна быть 108 байт: 80 байт для восьми регистров из стека сопроцессора и 28 байт для остальных регистров сопроцессора с дополнительной информацией.

После выполнения сохранения состояния среды сопроцессора производится инициализация сопроцессора.

Команда FRSTOR - используется для восстановления полного состояния среды сопроцессора из области памяти, адрес которой указан операндом источник. Сопроцессор будет работать в новой среде сразу после окончания работы команды frstor .

Команда FSTENV/FNSTENV - сохранение частичного состояния среды сопроцессора в область памяти, адрес которой указан операндом приемник. Размер области памяти зависит от размера операнда сегмента кода usel6 или use32 . Формат области частичной среды сопроцессора совпадает с форматом области полной среды, за исключением содержимого стека сопроцессора (80 байт).

Команда FLDENV - восстановление частичного состояния среды сопроцессора содержимым из области памяти, адрес которой указан операндом источник. Информация в данной области памяти была ранее сохранена командой FSTENV/FNSTENV . Команды сохранения среды целесообразно применять в обработчиках исключений, так как только с помощью данных команд можно получить доступ, например, к регистрам DPR и IPR . Не исключено использование этих команд при написании подпрограмм или при переключении контекстов программ в многозадачной среде.



  • Разделы сайта