無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

バイナリをつつく10ー電波ソムリエ2

コンニチハ コンニチハ
今回はレジスタ以外の情報を必要とする命令を一緒に調べていこう。 いつものマニュアルのA-61バイトのオペコード・マップ(左側)をざっと眺めると EbとかGbなどの謎の記号が登場する。これは一体何なんだろう。
マニュアルを調べると、A-1〜A3にその正体が書いてあった。ピムピム。 大文字はアドレス指定方式で 小文字のほうはオペランド・タイプのコードらしい。 それにしても多い・・・めまいがするピヨ。 でもよく考えてみれば当たり前かもしれないピヨね。だって、CPUは1と0しか判らないから、レジスタやメモリとかも1と0で判断しなければならない。 人間に例えると、ピとヨだけで会話するようなものなんだね。CPUって案外馬鹿っぽい・・・
それはさておき、何かの命令を前回用意したSearchOpeCodeメソッド内に用意しよう。
ピヨっとその前に、アドレス指定方式をAddressingMode列挙体に、 オペランド・タイプをOperandType列挙体で実装しておこう。
これでよし!次にめぼしい命令を探すととしよう。
バッサ
バッサ
バッサ
みーつけた。前回の例で使ったADDにしよう。
実装の抜粋
public static OpeCodeInfo SearchOpeCode( byte value ) {
    OpeCodeInfo info = new OpeCodeInfo( value ); //オペコード・マップの情報
    byte row = ( byte ) ( value & 0x11110000 ); //バイトから行を抽出
    byte col = ( byte ) ( value & 0x00001111 ); //バイトから列を抽出
    //途中省略
    switch ( row ) {
	case 0:
            switch ( col ) {
	        #region ADD
            	case 0:
                    info.Name = CommandName.ADD;
                    info.NextType = NextInfoType.DoubleAddressingMode;
                    info.DestinationAddressMode = AddressingMode.E;
                    info.DestinationOperand = OperandType.b;
                    info.SourceAddressMode = AddressingMode.G;
                    info.SourceOperand = OperandType.b;
                    break; 
//途中省略
}

ピッし、これで大方の命令の情報を設定できるぞ。きりがいいので今回の記事はこれで終わるピヨ。 これからどんどん面白くなるからまた来てね。
別窓 | バイナリ | コメント:0 | トラックバック:0 | ∧top | under∨
<<バイナリをつつく11−任務実行の概要 | 無差別に技術をついばむ鳥 | バイナリをつつく9ー電波ソムリエ1>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |