Redcode (Redcode)
Redcode — язык программирования, созданный специально для игры «Бой в памяти»[1]. Автор языка – Александр Киватин Дьюдни (англ. Alexander Keewatin Dewdney), который в соавторстве с Дэвидом Джонсом впервые написал руководство к игре со списком восьми команд языка, опубликованное в журнале Scientific American в марте 1984 года. Синтаксически Redcode похож на ассемблер. Существует несколько различных стандартов, определяющих систему выполнения команд: ICWS'86, ICWS'88[2], ICWS'94, также существуют системы, не соответствующие полностью им.
Список команд языка
[править | править код]Стандарт ICWS'94 определяет следующие 19 команд (приведены в алфавитном порядке; в круглых скобках — англоязычная расшифровка команды), синтаксис некоторых из них существенно отличается от других стандартов:
ADD – (add) команда сложения; пример: ADD A B — прибавить число A к числу по адресу B и сохранить результат по адресу B CMP – (compare) = SEQ; пример: CMP A B — если A=B, пропустить следующую команду DAT – (data) остановить процесс; пример: DAT A — # А DIV – (divide) команда деления; пример: DIV A B – разделить число по адресу B на число A и сохранить результат по адресу B, если результат не равен нулю (иначе остановить процесс) DJN – (decrement and jump if not zero) перейти к адресу в случае ненулевого значения после уменьшения на 1; пример: DJN A B — уменьшить число по адресу B, если в итоге B≠0, перейти по адресу A (иначе продолжить со следующего адреса) JMN – (jump if not zero) перейти к адресу в случае ненулевого значения; пример: JMN A B — если B≠0, перейти по адресу A и продолжить выполнение с него (иначе продолжить со следующей команды) JMP – (jump) перейти к адресу; пример: JMP A — перейти к адресу A и продолжить выполнение с него JMZ – (jump if zero) перейти к адресу в случае нулевого значения; пример: JMZ A B — если B=0, перейти по адресу A и продолжить выполнение с него (иначе продолжить со следующей команды) LDP – (load from p-space) загрузить число из пользовательского пространства; пример: LDP A B — загрузить число из адреса A пользовательского пространства по адресу B ядра MOD – (modulus) взять остаток деления; пример: MOD A B – разделить число по адресу B на число A и сохранить остаток по адресу B, если остаток не равен нулю (иначе остановить процесс) MOV – (move) переслать данные с одного адреса на другой; пример: MOV A B — переслать данные из А в В MUL – (multiply) команда умножения; пример: MUL A B – умножить число A на число по адресу B и сохранить результат по адресу B NOP – (no operation) нет операции SEQ – (skip if equal) пропустить следующую команду в случае равенства чисел; например: SEQ A B — если A=B, пропустить следующую команду SLT – (skip if lower than) пропустить следующую команду, если первое число меньше второго; например: SLT A B — если A<B, пропустить следующую команду SNE – (skip if not equal) пропустить следующую команду в случае неравенства чисел; например: SNE A B — если A≠B, пропустить следующую команду SPL – (split) начать отдельный процесс; пример: SPL A — сначала продолжить текущий процесс выполнением следующей команды и начать отдельный процесс по адресу A (в случае достижения предельно допустимого количества процессов SPL экваивалетно NOP) STP – (save to p-space) сохранить число в пользовательское пространство; пример: STP A B — сохранить число из адреса B ядра по адресу A пользовательского пространства SUB – (subtract) команда вычитания; пример: SUB A B — вычесть число A из числа по адресу B и сохранить результат по адресу B
Примечания
[править | править код]- ↑ Shen. Игры настоящих кодеров . «Хакер» (15 октября 2003). Дата обращения: 9 августа 2013. Архивировано из оригинала 17 ноября 2011 года.
- ↑ Архивированная копия . Дата обращения: 10 октября 2016. Архивировано из оригинала 11 декабря 2017 года.