レジスタに書き込むとき、たとえばmov ax, 1
のように、以前の値を上書きします。CPUレジスタへの書き込みは実際にどのように機能しますか?
私は、大きな数字/文字列をレジスタに入力することができ、それによって別のアプリケーションが自分のアプリケーションのレジスタ値を上書きすることができますか?つまり、プロセス間でレジスタを共有しているのですか、それとも自分のサンドボックス/仮想レジスタを受け取りますか?
Intel x86(-64)Core CPUとWindowsでは面白いです。
レジスタに書き込むとき、たとえばmov ax, 1
のように、以前の値を上書きします。CPUレジスタへの書き込みは実際にどのように機能しますか?
私は、大きな数字/文字列をレジスタに入力することができ、それによって別のアプリケーションが自分のアプリケーションのレジスタ値を上書きすることができますか?つまり、プロセス間でレジスタを共有しているのですか、それとも自分のサンドボックス/仮想レジスタを受け取りますか?
Intel x86(-64)Core CPUとWindowsでは面白いです。
単一のコアで一度に1つのスレッドのみがスケジュールされます。コアはレジスタを持つものです。
新しいスレッドがスケジュールされると、レジスタが最初に保存され、以前に保存されたスレッドのレジスタが復元されます。これには、実行する次の命令を指すプログラムカウンタレジスタが含まれます。 (メモリから)
レジスタ:
はAX、BX、CX、DXはバイトに分け、16ビット、(AH、AL、BH、BL) SI、DI、SPとBPもまたあります16ビット
EAX、EBX、ECXなどは32ビット
私は、彼らが64ビットシステム上で呼び出されているのかわからないです。私はRAXを見たと思うが、わからない。
など特殊目的レジスタ、浮動小数点レジスタは、
それは多くをクリアしました。レジスタに適用される制限、つまりデータの量と種類を知っていますか?私はリンクを取ることを喜んで私は本当にこの上でインテルのドキュメントを見つけることができないので... – Tower
どのようにドキュメントを見つけることができますか? –
レジスタはビットで、すべて、1および0です。彼らはあなたが何かをするまで意味がありません。それでも意味は一時的です。アドレスを保存するためにレジスタを使用しているとします。アドレスにはレジスタがあり、レジスタにはちょうどビットです。それらのビットをアドレスとして解釈する命令でそのレジスタを使用すると、一時的にアドレスになります。そのアドレスを別の項目を指すように移動する必要があるときは、* p ++と言うと、そのレジスタにはオペランドが含まれ、結果として加算演算が行われます。 8ビット、16ビット、32ビット、または62ビットです。それだけのビットです。 –
1もあり)レジスタのサイズは、あなたが彼らのために使用しているものの名前に)明確に定義された方法で(依存しています。例えば、eax
は32ビット幅、ax
は16ビット、ah
/al
は8ビットです。 64ビットシステムの場合、rax
は64ビット幅です。
これらのレジスタサイズの正確な制限は、値を解釈する方法(特に、それらを符号付きまたは符号なしとして扱っているかどうか)によって多少異なります。しかし、サイズは根本的に重要なものです。
2)オペレーティングシステムカーネルは、他のプロセスやカーネルが実行中にプロセスのレジスタを保存します。レジスタは実行していない間に他の値を取るが、すべて透明です。プロセスが実行されている間は、レジスタはあなたの下から変更されません。
注:この基本レベルでは、OSは本当に重要ではありません。誰もが同じようにします。 –