Talk:SMITH

Esoteric Syntax
I'm writing a SMITH self-interpreter and a SMITH interpreter in brainfuck. To simplify these tasks, I have created a variation on the SMITH syntax. The SMITH commands are mapped to lower-case letters starting with "a". REP and * are not allowed. The command ordering is as follows:

MOV register, immediate        => a MOV register, register          => b MOV register, [register]        => c MOV register, PC                => d MOV register, TTY               => e MOV [register], register        => f MOV [register], TTY             => g MOV [register], "string"        => h MOV TTY, register               => i MOV TTY, [register]             => j SUB register, immediate         => k SUB register, register          => l MUL register, immediate         => m MUL register, register          => n NOT register                    => o COR offset, offset, register    => p COR offset, register, register  => q BLA offset, NOP, register       => r NOP                             => s STOP                            => t

The following rules apply:
 * 1) Every instruction (with one exception) is followed by three hexadecimal numbers
 * 2) The first two hexadecimal numbers are signed by a preceding 0 for positive or a 1 for negative. The third is not.
 * 3) Hexadecimal numbers are exactly 4 digits and use uppercase A-F
 * 4) The values of the extra numbers for instructions that require less than three numbers will be ignored
 * 5) There is no whitespace between the numbers
 * 6) A single newline separates each instruction
 * 7) For the BLA instruction, NOP is 0 and STOP is 1

The only exceptional case is the MOV [register], "string" instruction which is followed by two unsigned 4-digit hexadecimal numbers and then by the string. The second number is the length of the string.

--Nthern 23:26, 6 August 2007 (UTC)