Core War

Propaganda
Core War
A Batalha do Núcleo
O que é o Core War ?
É um jogo de programação onde programas
em assembler tentam destruir-se na memória
de um computador simulado
Os programas (os guerreiros) são escritos
numa linguagem especial chamada Redcode, e
são executados num programa chamado
MARS (Memory Array Redcode Simulator)
Simplificação
Ambos, o Redcode e o MARS são
simplificações abstractas comparadas com os
sistemas computacionais normais.
Como Funciona?
O Core (a memória do computador simulado) é uma cadeia de
instruções, vazias excepto nos registos que guardam as
instruções dos programas que estão em combate.
A memória dobra-se (a boca morde a cauda), um donut.
Não existem endereços absolutos.
O endereço 0 não se refere ao primeiro endereço da memória
mas antes à própria instrução que contém esse endereço.
A instrução seguinte é 1 e a anterior é -1
Uma Instrução RedCode, a
unidade do Core
• A unidade básica da memória é uma
instrução e não um byte como é normal.
• todas ocupam uma célula de memória e
demoram o mesmo tempo a serem
executadas (1 ciclo).
Estrutura de uma Instrução
• Cada instrução Redcode divide-se num
código de instrução (opcode) e dois
campos numéricos (A:endereço fonte e
B:endereço destino)
• Uma instrução só pode ser copiada e
testada quanto à igualdade.
Exemplos de códigos de instrução
DAT: Remove o processo corrente da fila de
processos
MOV: Copia dados de uma instrução para outra
JMP: Faz com que a execução do programa
continue no endereço especificado.
ADD: Adiciona o valor fonte para o destino.
SEQ: Compara duas instruções, e salta por cima
da próxima instrução se forem iguais.
Modos de Endereçamento
#: Imediato
$: Directo (pode ser omitido)
*: Campo-A indirecto
@: Campo-B indirecto.
…
Controlo dos Programas
• O MARS executa uma instrução de cada
vez e passa para a seguinte, a não ser
que a instrução indique explicitamente
para saltar para outro endereço.
• Num combate, em que há mais do que 1
programa na arena, os programas são
executados alternadamente, uma
instrução de cada vez.
Multitarefas
• Cada guerreiro tem a sua própria fila de
processos, a lista de processos que serão
executados repetidamente pela ordem
que começaram.
• Cada Guerreiro começa apenas com um
só processo.
• O tamanho da fila de processos é limitado
Multitarefas
• Os processos de cada programa são
executados de forma alternada.
• O tempo de execução de cada processo é
inversamente proporcional ao número de
processos activos do respectivo guerreiro
Morte dos Processo e Derrota
• Um processo morre quando executa uma
instrução DAT (ou executa uma divisão
por 0)
• Um programa morre quando todos os
seus processos desaparecerem.
WAIT
JMP 0
• O Wait é o programa mais simples
• O seu tamanho mínimo torna-o difícil de
ser detectado.
• Não possui ataque.
• Só vence se o seu inimigo se autodestruir.
IMP
MOV #0, 1
• Foi o primeiro guerreiro a ser criado (Dewdney)
• O seu tamanho mínimo torna-o difícil de ser
detectado.
• Está sempre em movimento no core, em ciclo,
ad infinitum.
• Não mata, se atingir o adversário, transforma-o
noutro Imp.
• Gosta de empatar e só vence se o inimigo se
autodestruir.
DWARF
ADD
MOV
JMP
DAT
•
•
•
#4,
2,
-2
#0,
3
@2
#0
O Dwarf (Dewdney) é um bombardeiro que cegamente copia uma “bomba”
para lugares com intervalos regulares entre si (de 4 em 4 células, por
exemplo), esperando acertar no alvo.
A bomba é uma instrução DAT que se acertar no código do seu inimigo
será letal caso essa instrução venha a ser executada.
Neste caso, é necessário ter cuidado pois a bomba pode acertar no próprio
Dwarf. É necessário que a memória tenha um número de células que seja
múltiplo de 4.
Download