インラインアセンブリ
9fansにHello worldをアセンブリで書きたいという投稿が流れていた。最終的には以前「アセンブリでHello, world!」で書いたようなプログラムになったようだが、Oberonでインラインアセンブリはこう書くというコードがフォローされていた。バイナリアンな感じがびしびし伝わってくるね。Wirthはこんなのを許すのか?と思っていたら、このコードはPaul Reedのコンパイラじゃないと動かないらしい。
PROCEDURE syspread(poshi, poslo: LONGINT; VAR buf: ARRAY OF CHAR; fd: LONGINT): LONGINT; BEGIN (* 18: return value 14: poshi 10: poslo 0c: buflen 08; buf ptr 04: fd 00: RA *) SYSTEM.CODE( 0C9H, (* leave *) 06AH, 50, (* pushb $close *) 058H, (* pop eax *) 0CDH, 040H, (* int $40h *) 089H,084H,024H,018H,000H,000H,000H, (* movl eax, 18h(esp) *) 0C2H, 14H, 0 (* ret $14h *) ) END syspread;
Plan9 Cコンパイラにはインラインアセンブリ構文はない。あくまでCはC、アセンブリはアセンブリ。混ぜるな危険?というポリシらしい。