0

私はこの質問を範囲外にしないことを願っています.そのレジスタはCPU内の少量のメモリですが、レジスタ値をアセンブリから16進数に変換する方法をもっと知りたいのですが、これはknida noobのようですが、このようなアセンブリがある場合、このことを学んでいません

mov dl,oah
mov ah,oaah
mov bh,0010b

ここでいくつかのものはdl、ah、およびbhに移動されていることを知っています。そこのアドレスと16進値を計算する方法を知りたいだけです。これを見つけるために使用できるテーブルまたはこれを計算するための良い方法はありますか

4

2 に答える 2

0

レジスタは、CPU 上のストレージと考えることができます。プロセッサーが異なれば、レジスターの数とタイプも異なります。レジスタは通常、プロセッサの幅です。したがって、32 ビット プロセッサにはほとんど 32 ビット幅のレジスタがあります。レジスタには、絶対値またはメモリ アドレスをロードできます。アセンブリ命令をリストするために使用する逆アセンブラーまたはデバッガーは、何が起こっているかを示します。ほとんどの場合、アセンブラー コードは 16 進数で値を表示しますが、他の形式も可能です。CPU/デバッガ/逆アセンブラに依存します。関心のある CPU のアセンブリ言語のチュートリアルを探す必要があります。

于 2013-06-25T13:30:37.853 に答える
0

通常、レジスタ自体にはアドレスがなく、メモリ空間からアクセスすることはできません。これが実際に当てはまるプロセッサーがいくつかありますが、それは規則ではなく例外です。

レジスタが持っているアドレスのわずかな概念は、マシンコードで使用される値です。ここでは x86 を使用することを選択しましたが、これは必ずしもその概念には従わないものですが、arm や mips などの多くのものを見れば、それはより明白です。r0 は、命令自体のマシン コードで 0b0000、r1 0b0001、r2 0b0010 などのビット パターンを持ちます。また、プロセッサの内部には、変更されているかどうかにかかわらず、これらのレジスタ ビットを使用する RAM が存在する可能性がありますが、その RAM は、レジスタの内容が保持される場所として以外の方法でプログラマにアクセスすることはできません。

プロセッサについては、プロセッサ ベンダーの Web サイトにアクセスするか、そのプロセッサの命令セットについてグーグル検索を行ってください。ベンダーのドキュメントには通常、命令ごとにオペコード マップまたは基本的に各命令のマシン コードが含まれています。一部のベンダー以外の Web サイトには、プログラマーが参照するための構文しかなく、マシン コードが含まれていない場合があるため、それらは役に立ちません。レジスタがメモリ マップされている 1 つまたはいくつかのプロセッサにもドキュメントがあります (私が考えているプロセッサはかなり古いため、元のベンダーのドキュメントが見つからない可能性があります)。

于 2013-06-25T13:37:59.590 に答える