プログラミング言語/VIP言語

はじめに

  • 非常に難解だが、習得すればものの数時間で弾道計算ソフトさえ作れてしまう。 上級者にしか手が出ない代物。
    だがソース自体が激しく処理系依存である。
  • ちなみに簡易言語VIP(Programless Language VIP)およびその移植達とは別物。
  • どっかにコンパイラ無いですかね?→Perlで作った。
    #!/usr/local/bin/perl
    use strict;
    $_ = sub{local $/; <>;}->();
    y/Ww//cd;y/Ww/01/;
    binmode(STDOUT); # Windowsでコンパイルするときに必要
    print pack'B*',$_;
    コンパイル方法
    $perl VIPlc.pl < source.vipl > output.bin
    実行権限も忘れずに。
    $chmod u+x output.bin
    ついでに逆コンパイラ
    #!/usr/local/bin/perl
    use strict;
    my $c = 0;
    binmode(STDIN);
    for(sub{local $/ = \1; <>;}->()){
    	$_ = unpack'B*',$_;
    	y/01/Ww/;
    	print$_,(++$c%4)?" ":$/;
    }
  • 言語仕様はいたって簡単。Wは0、wは1にそれぞれ対応していて、中身自体は機械語です。
    それ以外の文字は無視するみたいです。

Hello World

Hello, World!プログラムの一覧。

i386, GNU/Linux

wWwwWWwW WWWWwwWw wWwwwWWw WWWwWWwW WWWWWWWW WWWWWWWW WWWWWWWW
wWwwWWww WWWWWWWw wWwwWWWW WWWWWwWW
wwWWwwWw wWWWWWWW
WWwwWWWw wwWWWWWW WwWWWWWW
wwWWwwWw wWWWWWWW
WwWWwWWW WwwWWwWw WwwWwwWW WwwWwwWW WwwWwwww WWwWwwWW WWwWWWWW
WwWwWwww WwwWwwww WwwwWWwW WwwWwwWW WwwWWwWW WWwWWWWw

まず、はじめのwWwwWWwW WWWWwwWwは、Hello, World!の長さの13をdlレジスタに入れています。
そして次のwWwwwWWw WWWwWwWW WWWWWWWW WWWWWWWW WWWWWWWWでHello, World!文字列のアドレスをecxレジスタに入れています。
次に、wWwwWWww WWWWWWWwではSTDOUTである1をblレジスタに、wWwwWWWW WWWWWwWWではwriteのシステムコール番号である4をalレジスタに入れます。

  • 本当は32biなのでedx ebx eaxレジスタを使わないといけないのだが、短縮のためdl bl alレジスタを使用してる。←たいてい下位ビットで事足りる

そしてwwWWwwWw wWWWWWWWでシステムコール(ソフトウェア割り込み)を実行してます。
次の、WWwwWWWw wwWWWWWW WwWWWWWWではeaxレジスタをxorしてインクリメントすることで1にしています(wWwwWWWW WWWWWWWwでもおkですね)。これは_exitのシステムコール番号1を入れています。

  • この時の引数ebxは上でのSTDOUT(1)のままなので終了ステータスは異常終了になってしまいます。これも短縮のため。

最後にwwWWwwWw wWWWWWWWでシステムコールを実行して終了。 残った部分はHello, World!文字列です。

i386, FreeBSD

wwWWwwWw wWWWWWWW 
WwwWwWWW WWWWwwWw WWWWWWWW WWWWWWWW WWWWWWWW
WwwWwWWW WWwWWwWW WWWWWWWW WWWWWWWW WWWWWWWW
WwwWwWWW WWWWWWWw WWWWWWWW WWWWWWWW WWWWWWWW
wWwwwWWW WWWWWwWW WWWWWWWW WWWWWWWW WWWWWWWW
wwWWwwWw wWWWWWWW 
WwwWwWWW WWWWWWWW WWWWWWWW WWWWWWWW WWWWWWWW
wWwwwWWW WWWWWWWw WWWWWWWW WWWWWWWW WWWWWWWW
wwWWwwWw wWWWWWWW 
WwWWwWWW WwwWWwWw WwwWwwWW WwwWwwWW WwwWwwww WWwWwwWW
WWwWWWWW WwWwWwww WwwWwwww WwwwWWwW WwwWwwWW WwwWWwWW
WWwWWWWw

i8086, MS-DOS

wWwwWwWW WWWWwWWw
wWwwwWwW WWWWwwWW WWWWWWWw
wwWWwwWw WWwWWWWw
wWwwwWWW WWWWWWWW WwWWwwWW
wwWWwwWw WWwWWWWw
WwWWwWWW WwwWWwWw WwwWwwWW WwwWwwWW WwwWwwww WWwWwwWW
WWwWWWWW WwwwWwww WwwWwwww WwwwWWwW WwwWwwWW WwwWWwWW
WWwWWWWw
WWwWWwWW

i386, BeOS

wwWWwwWw WWwWWwWw wwWWWWww WwwWwWWW
WWWWwwWw WWWWWWWW WWWWWWWW WWWWWWWW
WwwWwWWW WWwwWwWW WWWWWWWW WWWWWWWW
WWWWWWWW WwwWwWWW WWWWWWWw WWWWWWWW
WWWWWWWW WWWWWWWW wWwwwWWW WWWWWWww
WWWWWWWW WWWWWWWW WWWWWWWW wwwWwWWW
wwwWWwWW wwwwwwww wwwwwwww wwwwwwww
wWWWWWWw wwWWWwWW WWWWwwWW WWWWWWWW
WWWWWWWW WWWWWWWW WwwWwWWW WWWWWWWW
WWWWWWWW WWWWWWWW WWWWWWWW wWwwwWWW
WWwwwwww WWWWWWWW WWWWWWWW WWWWWWWW
wwwWwWWW wwWWwwww wwwwwwww wwwwwwww
wwwwwwww WWWWWWWW WWWWWWWW WWWWWWWW
WwWWwWWW WwwWWwWw WwwWwwWW WwwWwwWW
WwwWwwww WWwWwwWW WWwWWWWW WwWwWwww
WwwWwwww WwwwWWwW WwwWwwWW WwwWWwWW
WWwWWWWw

elf32-i386

Wwwwwwww WwWWWwWw WwWWwwWW WwWWWwwW
WwWWwWWW WwwWWwWw WwwWwwWW WwwWwwWW
WwwWwwww WWwWwwWW WwWwWwww WwwWwwww
WwwwWWwW WwwWwwWW WwwWWwWW WWwWWWWw
WWWWWWwW WWWWWWWW WWWWWWww WWWWWWWW 
WWWWWWWw WWWWWWWW WWWWWWWW WWWWWWWW
WwWWwwWW wWWWWWWW WWWWWwWW WWWWwWWW 
WWwWwwWW WWWWWWWW WWWWWWWW WWWWWWWW
WWWWWWWW WWWWWWWW WWWWWWWW WWWWWWWW
WWWWWWWW WWWWWWWW WWWWWWWW WWWWWWWW
WWwwWwWW WWWWWWWW WWwWWWWW WWWWWWWW
WWWWWWWw WWWWWWWW WWWWWWWW WWWWWWWW
WWWWWWWW WWWWWWWW WWWWWWWW WWWWWWWW
WWWWWWWW wWWWWWWW WWWWWwWW WWWWwWWW
WWWWWWWW wWWWWWWW WWWWWwWW WWWWwWWW
WwWwwwwW WWWWWWWW WWWWWWWW WWWWWWWW
WwWwwwwW WWWWWWWW WWWWWWWW WWWWWWWW
WWWWWwWw WWWWWWWW WWWWWWWW WWWWWWWW
WWWWWWWW WWWwWWWW WWWWWWWW WWWWWWWW
wWwwWWwW WWWWwwWW wWwwwWWw WWWWWwWW
wWWWWWWW WWWWWwWW WWWWwWWW wWwwWWww
WWWWWWWw wWwwWWWW WWWWWwWW wwWWwwWw
wWWWWWWW WWwwWWWw wwWWWWWW WwWWWWWW
wwWWwwWw wWWWWWWW

Wは0、wは1にそれぞれ対応しています。

あとは機械語を勉強してください。

以上でVIP言語の説明は終わりです。本当にお疲れ様でした!これであなたも立派なVIPROGRAMERです!

最後にVIP言語で実装された、VIP言語コンパイラを紹介しておきましょう
http://vipprog.tumblr.com/post/38698900/by-vip-for-vip-i386linux