問題タブ [x86]
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.
assembly - Grub とリアル モード (低レベルのアセンブリ言語プログラミング) への移行
私はおもちゃの OS に取り組んでおり、ブートローダーとして grub を使用しています。最近、VGA を使用しようとすると、ハードウェア割り込みが使用できないことがわかりました。私が見つけたのは、grub によってプロテクト モードにされていたためです。
grubを取り除かずにリアルモードに戻す方法を知っている人はいますか?
visual-studio - プログラムによるブレークポイント/アサートを無効にする方法は?
Visual Studio を使用してネイティブ アプリケーションを開発しています。コードに __asm int 3 または __debugbreak を使用して配置されたプログラム ブレークポイント (アサート) があります。ヒットしたときに、同じデバッグセッションでの連続したヒットがデバッガーに侵入しないように、それを無効にしたい場合があります。これどうやってするの?
optimization - 3D 演算を SSE やその他の SIMD に変換すると、どれくらい高速化しますか?
私は自分のアプリケーションで 3D 数学を広範囲に使用しています。ベクトル/行列ライブラリを SSE、AltiVec、または同様の SIMD コードに変換すると、どの程度の速度向上を達成できますか?
assembly - GCC インライン アセンブラ、レジスタ サイズの混在 (x86)
次のアセンブラ警告を取り除く方法を知っている人はいますか?
コードは x86、32 ビットです。
コンパイルすると、次の(非常に有効な)警告が表示されます。
私が探しているのは、%0 の下位 16 ビット サブレジスタにアクセスしたいことをコンパイラ/アセンブラに伝える方法です。バイト サブレジスタ (この場合は AL と AH) へのアクセスについても知っておくとよいでしょう。
既に "q" 修飾子を選択しているため、コンパイラは EAX、EBX、ECX、または EDX を使用する必要があります。コンパイラーがサブレジスターを持つレジスターを選択する必要があることを確認しました。
特定のレジスター (およびそのサブレジスター) を使用するように asm コードに強制できることはわかっていますが、レジスター割り当てのジョブはコンパイラーに任せたいと考えています。
gcc - 組み込み関数を使用するときに GCC に 3 つ以上の SIMD レジスタを使用させるにはどうすればよいですか?
私はいくつかのコードを書いており、SIMD 組み込み関数 SSE2/3 を使用して高速化しようとしています。私のコードは、いくつかのデータを XMM レジスターにロードして何度も操作する必要があるような性質のものです。生成されたアセンブラー コードを見ていると、XMM0 と XMM1 で別のものをリロードするために、GCC がデータをメモリにフラッシュし続けているようです。x86-64 用にコンパイルしているので、15 個のレジスタがあります。GCC が 2 つしか使用していないのはなぜですか? さらに使用するように依頼するにはどうすればよいですか? レジスタに値を「固定」する方法はありますか? 変数定義に "register" キーワードを追加しましたが、生成されたアセンブリ コードは同じです。
assembly - Why can't I change the value of a segment register? (MASM)
I decided to teach myself assembly language.
セグメント レジスタの値を変更しようとすると、プログラムがコンパイルされないことに気付きました。
私が見つけたすべての記事は、実際に少なくとも 4 つのセグメント レジスタの値を変更できると述べています。
この時点で本当に興味があるのはその理由だけです。これらのアドレスを変更する本当の目的はありません。
.net - 64 ビット プロセスから 32 ビット コードを呼び出す
32 ビットから 64 ビットに移行しようとしているアプリケーションがあります。これは、x64 フラグを使用してコンパイルされた .NET です。ただし、32 ビット用にコンパイルされた FORTRAN 90 で記述された多数の DLL があります。FORTRAN DLL の関数は非常に単純です。データを入力し、データを引き出します。どんな状態でもない。また、そこに多くの時間を費やすことはなく、合計でおそらく 3% ですが、それが実行する計算ロジックは非常に貴重です。
どうにかして 64 ビット コードから 32 ビット DLL を呼び出すことはできますか? MSDN は、できないと示唆しています。簡単なハッキングを行い、これを確認しました。すべてが無効なエントリ ポイント例外をスローします。これまでに見つけた唯一の解決策は、すべての 32 ビット DLL 関数に対して COM+ ラッパーを作成し、64 ビット プロセスから COM を呼び出すことです。これはかなりの頭痛の種のようです。プロセスを WoW エミュレーションで実行することもできますが、メモリの上限は増加せず、約 1.6 GB に制限されます。
64 ビット CLR プロセスから 32 ビット DLL を呼び出す他の方法はありますか?
operating-system - x86 アーキテクチャ用のオペレーティング システムの開発
x86 アーキテクチャ用のオペレーティング システムを開発する予定です。
- プログラミング言語にはどのようなオプションがありますか?
- できれば Windows 環境で、どのような種類のコンパイラを利用できますか?
- オペレーティング システムの開発についてさらに学ぶのに役立つ情報源はありますか?
- 仮想マシンまたは物理ハードウェアでオペレーティング システムをテストする方が適切ですか?
助言がありますか?
c# - ランタイム変数文字列をインジェクション用のマシンコードにアセンブルする .NET 用のアセンブラ ライブラリ
C# から呼び出すことができる x86 アセンブラーなどはありますか? x86 命令を文字列として渡し、バイト配列を取得できるようにしたいと考えています。存在しない場合、どうすれば自分で作成できますか?
明確にするために-C#からアセンブリコードを呼び出したくありません-命令からコードをアセンブルし、バイト配列でマシンコードを取得できるようにしたいだけです。
このコード (オンザフライで生成される) を挿入して、完全に別のプロセスに挿入します。
c++ - 奇妙なMSC8.0エラー:「ESPの値が関数呼び出し全体で適切に保存されませんでした...」
最近、一部のVisual Studioプロジェクトをライブラリに分割しようとしましたが、ライブラリプロジェクトの1つを依存関係として持つテストプロジェクトでは、すべてが正常にコンパイルおよびビルドされたようです。ただし、アプリケーションを実行しようとすると、次の厄介な実行時エラーメッセージが表示されました。
実行時チェックの失敗#0-ESPの値は、関数呼び出し全体で適切に保存されませんでした。これは通常、異なる呼び出し規約で宣言された関数ポインターを呼び出した結果です。
関数の呼び出し規約(__cdeclなど)を指定したことはなく、すべてのコンパイラスイッチをデフォルトのままにします。私がチェックしたところ、プロジェクト設定は、ライブラリとテストプロジェクト全体で規約を呼び出すために一貫しています。
更新:開発者の1人が、「BasicRuntimeChecks」プロジェクト設定を「Both(/ RTC1、equiv。to / RTCsu)」から「Default」に変更し、ランタイムが消えて、プログラムが明らかに正しく実行されたままになりました。私はこれをまったく信用していません。これは適切な解決策でしたか、それとも危険なハックでしたか?