NEST

laboratory

最新記事

2004/05/11

KUE-CHIP2

KUE-CHIP2(キューチップ): Kyoto University Education Chip 2

京都大学と京都高度技術研究所でコンピュータ教育のための教材として開発された 8bit のマイクロプロセッサ。 コンピュータの基本構造や動作原理の理解が容易なように、極めて単純なアーキテクチャと最低限の命令セットで構成されている。 またレジスタの内容を外部から観測・制御でき、さらにクロックフェーズ単位での命令の実行が可能である。

以上、ガッコでもらった「情報科学実験 IA マイクロプロセッサ実験テキスト」より。 (ただし一部表現を変えてある。)

こんなのを実験でやってるわけです。 (実際は、実機を使わずにエミュレータを使用してるわけですが。)  ちなみに KUE です。 KEU じゃないです。

KUE-CHIP2 による、アセンブリでのサブルーチンの実装

知人より質問を受けたため、メールで回答した。 以下はその写しである。

まずこれらアセンブリ言語で書かれた命令群は
アセンブルを行い機械語等へと変換される。
今やってるのだとアセンブリ命令は 1byte か 2byte の機械語になる。

例:
	LD IX, ACC   → 68    ( 1byte )
	LD ACC, [8D] → 64 8D ( 2byte )

これは 58, 61 ページの表を参照。(見なくていいけど。)
ここまで OK ?


次に、CALL / RET で使用している BA について。
これは
	BA XX
で
	「Program Counter を XX にする」
という命令。
PC が変更されれば実行される場所が変わるので、
メモリにロードされたプログラムの中を自由に移動できるわけだ。
さて、それではどこに移動するか。

CALL は問題ない。
サブルーチンが書かれているアドレスに飛べばいいだけ。
問題は RET 、サブルーチンから戻る際。

もちろん戻る際はそのサブルーチンが「呼ばれた場所」へ戻る。
ただしホントに呼ばれた場所に戻っちゃうと
もっかいサブルーチンを呼び始めるので、
正確には「呼ばれたトコの次の場所」へ戻る必要がある。

その「呼ばれたトコの次の場所」はスタックにつめておく。


さーて、ここからが本題。

BA XX で移動はできるんだが、
この XX はあらかじめソースコードに書いておかなくてはならない。
アセンブリには変数ってのが存在しないので、
具体的な数字を書かにゃならんのだ。

ところがサブルーチンはどこから呼ばれるのかはわからない。
(一般に、複数箇所から何度も呼び出す。)
具体的に数値を書いておく事なんて不可能だし、
かといって呼ばれる箇所に対応した数だけのサブルーチンを書くのはめんどうだ、
っていうかわざわざサブルーチンにする意味がねぇ。

そこでウルトラ C な技をしてみる。

ST 命令でメモリやレジスタの値を書き換える事ができるので、

	メモリにロードされたプログラム自身を書き換える

という事をやってのける。
もちろん、ここで「書き換える」のは

	BA XX

の XX の部分。

ここで重要なのが、23 ページの 実現例にも出てくる

	CA

というもの。
これは Current Address を意味する(と思う)。
アセンブルすると、そのコードが出力されたアドレスに置き換わるわけだ。
また CA+6 なら、そのアドレスに 6 を加算した値に置換される。

と、ゆーわけで。
結論としては

	ST ACC, (CA+3)      → 75 ??
	BA XX               → 30 XX

とする事で、

	?? (=ST 命令のアドレスの 3byte 先の XX ) を ACC の値で書き換える

という事になる。
これであらかじめ ACC にスタックから戻る先のアドレスをぶち込んどきゃ OK 。


ちなみに〜、レジスタ内容を破壊しない「改訂版」のコードでは、
上記を読めばわかるものと思うが、
CA に加算する値は変わるので注意。
ちょっと気になったので補足。

> 結論としては
> 
> 	ST ACC, (CA+3)      → 75 ??
> 	BA XX               → 30 XX
> 
> とする事で、
> 
> 	?? (=ST 命令のアドレスの 3byte 先の XX ) を ACC の値で書き換える
> 
> という事になる。

CA の内容は、機械語の 75 のアドレスになる。
だからアドレスはそれぞれ

	CA   = 75		CA+1 = ??
	CA+2 = 30		CA+3 = XX

を指す。

いずれ column の方で公開したい。 KUE-CHIP2 に関する情報が、Web 上にあまり見受けられなかったので。

最近のマリーンズ

書く時間がないのでそのうちまとめて。

今日のリンク

と、特にまとめずに一般的な「話題」として扱っていきます。 要はコンテンツとしては潰れるけど今後とも変わらずによろしく、と。

っていうか東大助手だったんだ ...。

あと ZAKZAK の記事にWinny 東大助手のオタクな素顔なんてのが。 作者の履歴とか人物像なんかに触れてます。 近所の住人の話から「オタクっぽい」という結論を得ているが、『挨拶しても頭を下げるだけ』のどこがオタクっぽいんだろう。 ただの「駄目な現代人」じゃねぇか。

written by : 高梨ギンペイ
mailto : nest@0xff.biz