問題タブ [cpu-registers]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - coutはどういうわけか変数を変更できますか?
だから私はこのような関数を持っています:
ある時点で、この関数はオーバーフローし、非常に大きな負の値を返します。これが発生している場所を正確に追跡するために、関数が次のようになるようにcoutステートメントを追加しました。
そしてそれはうまくいきました!もちろん、ダブルを使って問題を完全に解決しました。しかし、私がそれを吐いたときに、なぜ関数が正しく機能したのかについて興味があります。これは典型的なものですか、それとも私が見逃しているバグがどこかにある可能性がありますか?
(助けになる場合は、floatに格納される値は単なる整数値であり、特に大きな値ではありません。キャストを避けるために、floatに入れるだけです。)
assembly - GCC インライン アセンブラ、レジスタ サイズの混在 (x86)
次のアセンブラ警告を取り除く方法を知っている人はいますか?
コードは x86、32 ビットです。
コンパイルすると、次の(非常に有効な)警告が表示されます。
私が探しているのは、%0 の下位 16 ビット サブレジスタにアクセスしたいことをコンパイラ/アセンブラに伝える方法です。バイト サブレジスタ (この場合は AL と AH) へのアクセスについても知っておくとよいでしょう。
既に "q" 修飾子を選択しているため、コンパイラは EAX、EBX、ECX、または EDX を使用する必要があります。コンパイラーがサブレジスターを持つレジスターを選択する必要があることを確認しました。
特定のレジスター (およびそのサブレジスター) を使用するように asm コードに強制できることはわかっていますが、レジスター割り当てのジョブはコンパイラーに任せたいと考えています。
assembly - EAX の上位バイトを含むレジスタがないのはなぜですか?
%AX = (%AH + %AL)
%EAX = (%SOME_REGISTER + %AX)では、いくつかのレジスタを使用しないのはなぜ%SOME_REGISTERですか?
.net - VS2008 IDE 内から CPU レジスタを変更できますか?
Visual Studio IDE 内から CPU レジスタ (EAX、EBX、ECX など) またはフラグ (OV、UP、erc) を編集する方法があるかどうか疑問に思っていました。Registersペイン(ctrl-shift-G)を使用して表示でき、TABまたはENTERで循環できることは知っていますが、デバッグ中にそれらを変更できないようです(はい、プログラムの実行は停止:))。
そうする必要はあまりありません。ただそれだけです。アセンブリを見ることができます...以前はこれを行うことができました(VC ++ 6)...どうして今はできないのですか? '事!
ありがとう!
c++ - 主要な C/C++ コンパイラによって生成されたコードに割り当て規則を登録する
昔 (32 ビット以前の Intel プロセッサ)、C/C++ コンパイラ (私の場合は当時の Borland/Turbo) によって生成されたアセンブリ出力を分析する必要が (少なくとも私にとっては) 非常に頻繁にあったときのいくつかのルールを覚えています。パフォーマンスのボトルネックを見つけ、アセンブリ ルーチンと C/C++ コードを安全に混在させることができます。thisポインターに SI レジスターを使用する、戻り値に AX を使用する、アセンブリー・ルーチンが戻るときに保持する必要があるレジスターなど。
今私は、より一般的な C/C++ コンパイラ (Visual C++、GCC、Intel...) とプロセッサ (Intel、ARM、...) のリファレンスがあるかどうか疑問に思っていました。 1。アイデア?
windows - Windows 64 が xmm6 と xmm7 の保存/復元を要求することを選択したのはなぜですか?
Windows 64 が xmm6 と xmm7 の保存/復元を要求することを選択したのはなぜですか?
Windows 32 では、xmm0...xmm7 を上書きするアセンブリ ルーチンを作成できました。しかし、同じアセンブリ コードを Windows 64 で実行すると、VS2007 は xmm6 と xmm7 に倍精度値を格納するため、通常はアプリケーション エラーが発生します。
X64 には 16 個の xmm レジスタ xmm0...xmm15 (X32 には 8 個の xmm レジスタしかないのに対し) があるため、Microsoft はユーザーが xmm0..xmm7 を上書きできるようにすることを選択できたように思えました (ユーザーが Win32 からアセンブリ ルーチンを再利用できるようにするため)。考えなくても)、ユーザーは xmm8...xmm15 を保存/復元する必要があります。
では、私の好奇心を満足させるために、なぜ Windows 64 は xmm6 と xmm7 の保存/復元を要求することを選択したのでしょうか?
c - C でレジスタ変数を使用する良い例は何ですか?
私は K&R を読んでいて、レジスタ変数に関する小さなセクションにたどり着きました。ここの人々がこれを実践した良い例を持っているかどうか疑問に思っていました。
K&R のセクション 4.7 から:
register 宣言は
register int x;のようになります。
文字 c を登録します。
明確にするために、私はいくつかのクールなコード サンプルを見たいと思っています。私は主題を理解していると確信しているので、詳細な説明を入力する必要はありません (必要な場合を除きます)。
visual-studio - マネージド コードのデバッグ: 戻り値の表示
Win32 では、アンマネージ コードでは、戻り値は通常 EAX レジスタに格納されます。これは、プログラムが戻り値を変数に保存しない場合に便利です。これは、Visual Studio デバッガーで簡単に確認できます。
マネージド コードに相当するものはありますか?
java - レジスタintに相当するJava?
Cでは、変数にレジスタを割り当てることができます。次に例を示します。
私は、Javaがインタプリタ言語であり、CPUから離れた多くの抽象化であることを認識しています。
キャッシュやメインメモリに移動する代わりに、変数をレジスタに残しておくように要求するために利用できるメカニズムはありますか(アーキテクチャで許可されていない場合はどうなりますか)?
方法はないと思いますが、以前は嬉しい驚きでした。
ありがとうございました、