1

そこで、x86アセンブリ言語を調べました。すべてのコマンドは非常に明確ですが、次のようなコンピュータで実際に何かをトリガーできるものは見当たりません。CPUレジスタだけでなく、RAMにアクセスしたり、HDDから読み取ったりします。

  • アセンブラを使用してCPUでの計算をどのように超えますか?
4

4 に答える 4

5

x86アセンブリでは、このMOV命令を使用してRAMからデータを取得し、CPUのレジスタの1つに配置して、操作できるようにします。このMOV命令は、RAMにデータを書き戻すこともできます。コンピューター上のデバイスを使用するには、それは別の話です。

デバイスは、いわゆる割り込みを使用します。これは、デバイスが(CPUの)注意を必要とするときに発生するイベントです。コードでは、割り込みが発生したときに割り込みを処理するように関数を登録します。デバイスとの間でデータを取得するには、INおよびOUT命令を使用して、データバス上でデータを移動できます。このようにして、デバイスに次のような指示を与えることができます。ハードディスクセクターXからYからデータを取得します。次に、ハードディスクが回転し、データの一部をフェッチして、割り込みを発生させます。その割り込みに登録したコードは、それを処理し、データを取得して、適切なRAMの場所に書き込む必要があります。ほとんどのCPUとデバイスはDMA(ダイレクトメモリアクセス)もサポートしています)、デバイスがデータを書き込む必要があるRAM内の場所のみを指定し、その間にCPUを中断することなくデータを書き込みます。デバイスが完了するとすぐに割り込みが発生し、アセンブラコードはそれに応じて応答できます。

于 2010-04-10T10:45:13.427 に答える
3

通常、メモリマップドデバイスへの読み取り/書き込みを行うか、特別なI/O命令を使用してI/Oポートへの読み取り/書き込みを行います。メモリマップドデバイスは、CPUと実際のハードウェアの間で共有されるメモリです。デバイスにアクセスすると、ハードウェアが何かを実行します。

于 2010-04-10T10:44:35.430 に答える
1

MOVなどの命令を使用してRAMにアクセスできます。ディスクなどにアクセスするAPIは、使用しているOSによって異なります。Linuxでは、システムコールインターフェイスを調べてください。Windowsの場合は、このチュートリアルをご覧ください。入門的なものはスキップしてください。

もう1つ行うことは、アセンブリコードからCライブラリを呼び出すことです。

あなたが興味を持つかもしれないプロジェクトは、16ビットASMで書かれた教育用OSです。それはファイルシステムへのアクセスを行い、さらにかなり多くのことを行います-MikeOSですが、さまざまな理由から、最新のOSで実行されているプログラムにはほとんどのことが適用されないことに注意してください。

于 2010-04-10T10:48:05.767 に答える
0

movメモリマップドIOまたはx86の特別なIOスペース(in、 )のRAM(およびメモリオペランドを持つその他)にアクセスするコードを記述しますout

アートは、何をいつどのアドレスに書き込み/読み取るかを知っています。

于 2010-04-10T10:44:24.590 に答える