DEBUG で クワイン。

DEBUG で Quine。

かつてDOSで標準装備されて今も32ビット版のWindowsについている DEBUG.COM (DEBUG.EXE)で Quine を書いた。やってることはMASMでクワインと同じ。書き直してるのでちょっとはマシかも。

・quin.txt

a100
mov bx,1
mov si,300
mov di,33
mov ah,40
mov cx,10
mov dx,si
int 21h
mov ah,40
mov dx,204
mov cx,2
int 21h
add si,10
dec di
jnz 109
mov si,300
mov di,36
mov ah,40
mov dx,200
mov cx,4
int 21
mov ah,40
mov dx,si
mov cx,10
int 21h
mov ah,40
mov dx,203
mov cx,3
int 21h
add si,10
dec di
jnz 128
mov si,630
mov di,3
mov ah,40
mov cx,1
mov dx,si
int 21h
mov ah,40
mov dx,204
mov cx,2
int 21h
add si,10
dec di
jnz 151
int 20h

a200
db"db ",27,d,a

a300
db 'a100            '
db 'mov bx,1        '
db 'mov si,300      '
db 'mov di,33       '
db 'mov ah,40       '
db 'mov cx,10       '
db 'mov dx,si       '
db 'int 21h         '
db 'mov ah,40       '
db 'mov dx,204      '
db 'mov cx,2        '
db 'int 21h         '
db 'add si,10       '
db 'dec di          '
db 'jnz 109         '
db 'mov si,300      '
db 'mov di,36       '
db 'mov ah,40       '
db 'mov dx,200      '
db 'mov cx,4        '
db 'int 21          '
db 'mov ah,40       '
db 'mov dx,si       '
db 'mov cx,10       '
db 'int 21h         '
db 'mov ah,40       '
db 'mov dx,203      '
db 'mov cx,3        '
db 'int 21h         '
db 'add si,10       '
db 'dec di          '
db 'jnz 128         '
db 'mov si,630      '
db 'mov di,3        '
db 'mov ah,40       '
db 'mov cx,1        '
db 'mov dx,si       '
db 'int 21h         '
db 'mov ah,40       '
db 'mov dx,204      '
db 'mov cx,2        '
db 'int 21h         '
db 'add si,10       '
db 'dec di          '
db 'jnz 151         '
db 'int 20h         '
db '                '
db 'a200            '
db 'db"db ",27,d,a  '
db '                '
db 'a300            '
db '                '
db 'g               '
db 'q               '

g
q

32ビット版Windowsならコマンドプロンプト内で起動してるdebug.comにコピペでも流し込めるが106/109キー配列だと文字化けするので”を*に、’を:に置換するとうまく動く。それでもsymdebと違ってリダイレクトできないし、逆スクロールもできないからちゃんと動いてるのかわかりにくい。コマンドラインでリダイレクトを使って

debug < quin.txt > q2.txt

てやるとq2.txtに結果が保存される。要らないメッセージやエコーバックも保存されのでそこは手動で削る。結果は標準出力でなくファイルに保存したほうがよいかも。32ビット版のWindowsなら標準エラー出力に変更して2>&1でリダイレクトとすると出力を削らなくてもソースを取得できる。

quindebug

※ジェネレータは冗長なので削除。Ver2に載せる。

debugでquineなんて変人の仲間入りになるかと思ったが、アセンブラで素直に書くと正直わかりやすすぎる。全く難解プログラミングな感じがしない。RubyやCのクワインのほうがずっとわかりにくいし、わかりにくく書ける。

DEBUG で クワイン。」への1件のフィードバック

  1. ピンバック: DEBUG.COM で クワイン その2 – の回想録

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中