uayeb

uayeb

uayebはマヤ暦の「無名月」

uayeb RSS Feed
 
 
 
 

アセンブラの生産性

昔、アセンブラの生産性を画期的に上げる開発環境、というのを作ったことがありました。
MZ-80という8bitパソコン用で、CPUはZ80でした。

アセンブラの何がいやかって、1命令でできることが限られているので、すぐ縦に長いリストになってしまい、見通しがとても悪いことです。

1行に、複数のニーモニックを並べられたらいいのに。

さらに、どうせ「足す」とか「移動」とか「比較」とかしかしないのに、ニーモニックが長ったらしい。

ちょうどそのころ、GAME言語というのがありまして。
GOTOは#、CALLは! という具合に、なんでも記号化してしまうのですが、これを応用すればいいんじゃないかと。

たとえば、BASICの

10 for i=1 to 10: next i: print “end”

を普通にZ80のアセンブラで書くと、

LD C,10
LD A,1
LABEL1:
INC A
CP A,C
JRNZ LABEL1
LD DE,LABEL2
CALL xxx (←システムコール)
HALT
LABEL2: DB “end”, 0


とかになるわけですが、これを私の作ったシステムで書くと

10 C,10 A,1
20 +A ;A,C #N20
30 P,^40 !xxx %HALT
40 “end” $0

とかになるわけです。ほら、行数少ないから見通しがいいし、無駄なニーモニックがなくレジスタや数値が前面に出てわかりやすいでしょ?

(言語仕様ちゃんと覚えてないので、細部は違ったかも。LDは書かない、という仕様が画期的! と自分では思っていた)
(BASICやGAMEみたく、行番号があるんです)

(^ は、行番号の場所をアドレスと見なす指定。PはDEレジスタを示す)

某パソコン誌に投稿したのですが、紙面掲載には至らず。
まあ、MZ-80Bというのもすでにマイナーだった時期ですし、PC-8001用だったらひょっとして、と思わなくもないのですが。
それはともかく、アセンブラの生産性って、このときから全然進化してないような気がするのですが……。

アセンブラで書く必要なんかないからいい、ってことなんでしょうかね?

それとも私のこの処理系、わかりやすくなってないですか?

よし、bizzfizzも書いてみましょう!

……あでも、z80って割り算命令ないから、「3で割り切れるかどうか」の判定ってどうやればいいんだろう。

Leave a Reply

  • 751982 Visitors

  • twitter

    Pages

    カテゴリー

    メタ情報