Redcode - samouczek

Programowanie w Redcode zezwala na stosowanie dowolnych modyfikatorów po kropce, jednak taka wolna amerykanka nie zawsze ma sens. Jeśli w kodzie źródłowym programu-wojownika modyfikatory nie są jawnie zdefiniowane, pMARS przyjmuje je domyślnie w zależności od instrukcji, np. MOV 0, 1 jest kompilowane jako MOV.I $0, $1, ale MOV #0, 1 jako MOV.AB #0, $1. Ponadto zestawy instrukcja.modyfikator, które nie mają sensu z punktu widzenia kompilatora, są przybliżane do najbliższych sensownych, np. ADD.I zachowuje się jak ADD.F. Są jeszcze instrukcje skoków, które wyróżniają się tym, że ich pole argumentu A jest zawsze traktowane jak adres i modyfikatory ich nie dotyczą, np. nie ma sensu JMP.F czy JMP.I. Takie traktowanie ich wymuszone jest przez niebezpieczeństwo tworzenia za ich pomocą broni zbyt skutecznych, by się przed nimi obronić. Z drugiej strony, ograniczeń takich często nie posiadają zwyczajne asemblery, więc kto wie, czy w naszych komputerach nie czają się jakieś "nielegalne rozkazy procesora" ;)

Ale wróćmy do naszej szkółki rycerskiej. Warto przyjrzeć się bliżej modyfikatorom, ponieważ często pozwalają na uniknięcie prostymi sposobami skomplikowanych algorytmów. Rozważmy ich działanie po kolei:

W każdym z przypadków proces (a wojownik może składać się z wielu równolegle działąjących procesów) ginie, bo próbuje wykonać instrukcję DAT. Przytoczony tutaj przykład trudno zatem uznać za fragment skutecznie działającego wojownika, chociaż Redcode potrafi nieraz zaskoczyć i z pozoru bezsensowne sekwencje rozkazów bywają zabójcze.


Poprzedni Następny