【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

インタプリタの動作確認

前回、インタプリタを複数のCPUやOSに対応させる過程を書きました。

実際に動かしてみます。

$ file write-minix write-v6 write-8086v6
write-minix:  Linux-8086 impure executable
write-v6:     PDP-11 executable
write-8086v6: DOS executable (COM)
$ 7run write-minix
hello
$ 7run write-v6
hello
$ 7run write-8086v6
hello

ソースとバイナリを示します。MINIXはメッセージ作成が複雑です。

write-minix

sub sp, #20

mov ax, #1
mov bx, sp
mov cx, #3
mov  2(bx), #4
mov  4(bx), #1
mov 10(bx), #hello
mov  6(bx), #6
int 0x20

mov ax, #0
mov bx, sp
mov cx, #3
mov  2(bx), #1
mov  4(bx), #0
int 0x20

.sect .data
hello: .ascii "hello\n"
0000 01 03 10 04 20 00 00 00 36 00 00 00 06 00 00 00 .... ...6.......
0010 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 ................
0020 83 ec 14 b8 01 00 89 e3 b9 03 00 c7 47 02 04 00 ............G...
0030 c7 47 04 01 00 c7 47 0a 36 00 c7 47 06 06 00 cd .G....G.6..G....
0040 20 b8 00 00 89 e3 b9 03 00 c7 47 02 01 00 c7 47  .........G....G
0050 04 00 00 cd 20 00 68 65 6c 6c 6f 0a             .... .hello.

write-v6

mov $1, r0
sys write
hello
6

mov $0, r0
sys exit

.data
hello: <hello\n> 
0000 07 01 10 00 06 00 00 00 00 00 00 00 00 00 01 00 ................
0010 c0 15 01 00 04 89 10 00 06 00 c0 15 00 00 01 89 ................
0020 68 65 6c 6c 6f 0a                               hello.

write-8086v6

mov ax, #1
int 7
.data1 4
.data2 hello, 6

mov ax, #0
int 7
.data1 1

.sect .data
hello: .ascii "hello\n"
0000 eb 0e 10 00 06 00 00 00 00 00 00 00 00 00 01 00 ................
0010 b8 01 00 cd 07 04 10 00 06 00 b8 00 00 cd 07 01 ................
0020 68 65 6c 6c 6f 0a                               hello.