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

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

バイナリをつつく17−愛のメモリー3

インドリ「あれっ?ここは何処?何をしていたんだっけ・・・」
インドリはいきなり意識を断たれたので暫くの間今おかれている間状況が把握できなかった。
インドリ「うーんとえーと・・・はっそうだ!MOV命令の実装をしていたんだ。それで・・・」
インドリはドリィちゃんが傍に居ないか恐々回りを伺った・・・その結果、幸い居ないことが確認できた。
インドリ「よし鬼の居ぬ間に洗濯だ!」
インドリは何時もの様にIntelマニュアル中のA-6・オペコードマップを見た。 そして、行A・列3で目的のMOV命令を発見した。
インドリ「早速実装だ!まずはオペコードマップの実装だぁ〜」

鳥ゃーバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

注目するべき部分だけ抜粋
public static OpeCodeInfo SearchOpeCode( byte value ) {
    case 10:
        switch ( col ) {
            case 3:
                info.Name = CommandName.MOV;
                info.NextType = NextInfoType.DestinationAddressAndRegiser;
                info.DestinationAddressMode = AddressingMode.O;
                info.DestinationOperand = OperandType.v;
                info.SourceRegister = RegisterName.eAX;
                break;

         }
}
インドリ「次は命令解析部分だぁ〜、おりゃぁ〜」

鳥ゃーバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

注目するべき部分だけ抜粋
public void AnalyzeCommand( ) {
    foreach ( byte data in datas ) {
        OpeCodeInfo info = SearchOpeCode( data );
        Command cmd = new Command( );
        switch ( info.NextType ) {
            case NextInfoType.DestinationAddressAndRegiser:
                //しまった!まだ実装していない。 
                 cmd.SourceRegister = GetRegister( info );
                 SearchModRM( ref cmd ); 
                 break;
    }
    cmds.Enqueue(cmd);
}
インドリ「GetRegisterとSearchModRMについては改めて解説するよ。次はついに命令の実行だー。犯人はお前ダー。」
br> 鳥ゃーバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサバサ

注目するべき部分だけ抜粋
public void ExecuteCommand( ) {    
    foreach ( Command cmd in cmds ) {
        //途中省略
        switch ( cmd.Name ) {
            case CommandName.MOV:
                Mov( cmd );
                break;
        }
    }

}

注目するべき部分だけ抜粋
private void Mov( Command cmd ) {
    switch ( cmd.NextType ) {
        case NextInfoType.DestinationAddressAndRegiser:
            //CPUを持つPCのメモリにデータを送信。
            SendData( 
                cmd.DestinationAddress, 
                cmd.SourceValueLength, 
                cmd.SourceValue );
            break;
    }
}

インドリ「よし!今日は調子がいいぞ。きりが良いので今回の記事は終えて、 次の記事で、逆にレジスタにメモリ内のデータを受け取る場合を書くよ。今から書くからちょっとだけ待ってね。」
別窓 | バイナリ | コメント:0 | トラックバック:0 | ∧top | under∨
<<バイナリをつつく18−愛のメモリー4私の愛を受け取れますか? | 無差別に技術をついばむ鳥 | 中の人の徒然草10>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

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

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