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:
- Every instruction (with one exception) is followed by three hexadecimal numbers
- The first two hexadecimal numbers are signed by a preceding 0 for positive or a 1 for negative. The third is not.
- Hexadecimal numbers are exactly 4 digits and use uppercase A-F
- The values of the extra numbers for instructions that require less than three numbers will be ignored
- There is no whitespace between the numbers
- A single newline separates each instruction
- 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)