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

Примечания

  1. Shen. Игры настоящих кодеров. «Хакер» (15 октября 2003). Дата обращения: 9 августа 2013. Архивировано из оригинала 17 ноября 2011 года.
  2. Архивированная копия. Дата обращения: 10 октября 2016. Архивировано из оригинала 11 декабря 2017 года.

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.