松下昇への接近

 旧 湾曲していく日常

CASLIIに入門するぞ。

えっと昨日は早朝から独立行政法人情報処理推進機構のサイトにある、CASLⅡシミュレータをダウンロードして遊んでみました。
CASLIIというのは情報処理推進機構が作った(のだと思う)ヴァーチャルなシステムCOMETⅡのためのアセンブラ言語です。
どんな物かというとまあこんなもので、右側のSTART とか書いてある文字列の部分がプログラムで、エディタで書いてコンパイルする点は他の言語と同じ。
−−−−−−−−−−−−−−−

メモリの内容 ________ ラベル オペコード オペランド
12: MULS START BEGIN
0000:FF07 13: BEGIN RPUSH __  
0002:1030-0018R 14: _ LD GR3,A
0004:1020-0019R 15: _ LD GR2,B
0006:1000-001AR 16: _ LD GR0,=0
0008:5320-0001 17: LOOP SRL GR2,1
000A:6600-0010R 18: _ JOV ADD  
000C:6300-0015R 19: _ JZE FIN1  
000E:6400-0011R 20: _ JUMP SHIFT  
0010:2403 21: ADD ADDA GR0,GR3
0011:5030-0001 22: SHIFT SLA GR3,1
0013:6400-0008R 23: _ JUMP LOOP
0015:FF08 24: FIN1 RPO _
0017:8100 25: _ RET _
0018:0009 26: A DC 9 ; 2進数 1001
0019:0005 27: B DC 5 ; 2進数 101
_ 28: _ END _
001A:0000 29: =0 DC 0


Label:=0 | Def(Loc): 29(001A) Ref: 1
Label:A | Def(Loc): 26(0018) Ref: 14
Label:ADD | Def(Loc): 21(0010) Ref: 18
Label:B | Def(Loc): 27(0019) Ref: 15
Label:BEGIN | Def(Loc): 13(0000) Ref: 12
Label:FIN1 | Def(Loc): 24(0015) Ref: 19
Label:LOOP | Def(Loc): 17(0008) Ref: 23
Label:MULS | Def(Loc): 12(0000) Ref:
Label:SHIFT | Def(Loc): 22(0011) Ref: 20
END CASLⅡ Assembler.
−−−−−−−−−−−−
CASという拡張子のファイルをCASL2でコンパイルして、objファイルが出来たらRUNする、というわけだが初級レベルのものは何も出力しないので何も面白くない。
CASL2でコンパイルするときに、-a というパラメーターを付けると上記のようなログのような物がでてくる。*1
これを1ビットずつ舐めるように観賞していくのが、CASL2の楽しみ方です。
0002:1030-0018R 14: LD GR3,A
例えば3行目の上記、1030-0018Rは、右の言語「 LD GR3,A」をそのまま翻訳したものなのです。とてもそうは思えませんよね。C言語とかの世界でも数字と文字列は峻別されています。でももちろんそうであってはコンピュータというものは動かないので、それは隠されているだけで文字だけでなくコマンドもすべて数字に置き換えられてコンピュータの中では動いているわけです。私達の命令が数字に置き換えられているわけではなく、莫大な数のビットをひとまず2進数と読みそれを操作しそれをまた私達の分かる言葉に翻訳しているだけですね。
でとにかく、LDというのはload(ロード)ですね。A(下を見ると分かるが9が入っている)を汎用レジスタの3番*2に入れろというわけです。
1030-0018R の10はLDを意味し、その次の3は汎用レジスタの3番を意味します。で下を見ると分かるがメモリの18番地にAは入っているのです。*3
1030というただの数字が3番レジスタにロードせよという意味とはね。とほんの少し驚くことができるわけです。
(ところでこれはかけ算のプログラムで、9*5をやっています。答えは16進法で2D。苦労してGR0を覗いてみると「2D」になっていました。でも合ってるかどうか苦労しないと分からないのは困ったものだ。)
 というかまだ全然よく分かっていないのですが、勉強のきっかけになるかと思い書いてみました。

*1:なおこれはずっとDOS窓の中での話

*2:0から数えるので4つ目

*3:で最後のR の意味がまだ分かって居ないのでした、そのうち分かるかな