Hello, world!
先日、UNIX V1が動いたという話を書いたが、現実逃避でHello, world!書いてみた。もちろんPDP-11アセンブリでである。
r0にstdoutのファイル記述子を入れてwriteシステムコールを呼び出す。文字列のアドレスと文字数は、sys命令の後に列挙する。$は即値で、14の後のピリオドは10進数を意味する(デフォルトは8進数)。ちなみに、a.outのサイズは68バイト。
# ed hello.s ? a mov $1,r0 sys write; 1f; 14. sys exit 1: <hello, world!\n> . w 64 q # as hello.s I II # ./a.out hello, world!
ところで、エディタはedしかないので頑張れ。私もedでのプログラミングははじめてだった。catを使う手もあるけど...
また、ユーザランドコマンドのイディオムとしてよく現れるのは、こんな感じの使い方。
jsr r5,mesg; <hello, world!\n\0>; .even sys exit mesg: movb (r5)+,ch beq 1f mov $1,r0 sys write; ch; 1 br mesg 1: inc r5 bic $1,r5 rts r5 .bss ch: .=.+2
nullターミネートな文字列ってのは、このころすでに使っていたのか。と思ったら、ここによると、DECのマクロアセンブラの.ASCIZディレクティブがnullターミネートだったようだ。この辺がC文字列の起源なのかな。