問題タブ [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.
reference - いくつかのx86ASMリファレンス/チュートリアル?
x86アセンブリ言語に関するいくつかの参照を見つけようとしています。私の理解を助けるためのチュートリアル/例。-ありがとう
c - x86ベアメタルアセンブリでキーボード入力を取得するには?
私は、カーネルの最初のビットを一緒にハックしようとしているところです。私は現在、カーネル全体を C コードとしてコンパイルしており、コンソール ウィンドウにテキストを表示することができました。ここで、キーボード入力の受け入れを開始して、実際に使用してプロセス管理を開始できるようにします。
DJGPP を使用してコンパイルし、GRUB をロードしています。また、基本的にコンパイル済みの C コードに直接ジャンプする小さなアセンブリも使用しており、そこから満足しています。
私が行ったすべての調査では、$0x16 の ISR がキーボード バッファーから次の文字を読み取ることを示しているようです。私が知る限り、これは ASCII 値を ah に格納し、キーコードを al に格納するか、その効果を発揮するものです。インライン アセンブリで次のルーチンを使用して、これをコーディングしようとしています。
このコードが呼び出されると、コアはすぐにクラッシュします。(私は VirtualBox で実行していますが、実際のハードウェアでこの基本的なことを試す必要はないと感じました。)
今、私は実際にいくつかの質問があります。(私のコードは GRUB から起動されたので) 現在、私がリアル モードで実行しているかプロテクト モードで実行しているかは、誰も教えてくれませんでした。プロセス ハンドラをセットアップするまでは、リアル モードで実行する予定でした。
では、リアル モードで実行していると仮定すると、何が間違っているのでしょうか。また、どのように修正すればよいでしょうか。基本的な getc ルーチン、できればノンブロッキングが必要なだけですが、Google がこれを手伝ってくれているとしたら、私はうんざりします。それができたら、そこから残りを行うことができます。
私がここで尋ねているのは、私は正しい道の近くにいるのでしょうか? 一般的に、このレベルでキーボード入力を取得するにはどうすればよいでしょうか?
編集:ああ...私は保護モードで実行しています。これは確かに、リアルモード機能にアクセスしようとしてクラッシュしたことを説明しています.
それで、プロテクトモードからキーボードIOにアクセスする方法を探していると思います。自分で見つけられるかもしれませんが、もしご存知の方がいらっしゃいましたらよろしくお願いします。再度、感謝します。
keyboard - x86 アセンブリでの保護モードのキーボード アクセス
私が開発している非常に基本的なカーネルのキーボード入力に取り組んでおり、完全に立ち往生しています。私が知る必要がある情報を示すことができる情報をオンラインで見つけることができないようです。
私のカーネルは現在プロテクト モードで実行されているため、リアル モードにジャンプしてから戻らないとリアル モード キーボード ルーチンを使用できません。これは回避しようとしています。プロテクト モードからキーボードにアクセスできるようにしたい。誰もこれを行う方法を知っていますか? これまでに見つけた唯一のことは、in/out ポートを使用してコントローラーと直接通信する必要があることですが、それ以上は困惑しています。もちろん、これは頻繁に出てくるものではありません。通常、アセンブリ チュートリアルでは、オペレーティング システムが実行されていることを前提としています。
私は x86 アセンブリに非常に慣れていないので、保護モードから標準ハードウェアを操作するための優れたリソースを探しています。Assembly ソース コードを NASM でコンパイルし、DJGPP でコンパイルされた C ソース コードにリンクしています。助言がありますか?
assembly - EAX の上位バイトを含むレジスタがないのはなぜですか?
%AX = (%AH + %AL)
%EAX = (%SOME_REGISTER + %AX)
では、いくつかのレジスタを使用しないのはなぜ%SOME_REGISTER
ですか?
assembly - ビット比較に関する x86 の質問
課題の最後の部分に問題があります。ビットなどのストリームを取得します。ストリームは、テキスト部分の 1 の数を含む整数です。その整数と正しい 24 を取得し、取得したテキスト データをループして、そこにあるすべての 1 をカウントしようとしました。しかし、私のプロシージャは常にゼロを返します。
適切にループしていることを確認できました。
テキスト = Hello は 16 個の 1 です。これは、そのテキストをループしてその中の 1 の数をカウントするための私の proc です。
proc の残りの部分は、プッシュ/ポップだけです。これを実際に実行したいのは、TEST を使用して 100000000 をバイトと比較することです。1 inc AX の場合は、マスクを 1 だけ右にシフトし、バイト全体をループし、inc を次のバイトに移動してもう一度実行します。
macos - NOPに置き換えることでCALLLにパッチを適用することは、ユーザースペースでは機能しますが、カーネルスペースでは機能しません。
パッチを適用したいデバイスドライバがあります。このデバイスドライバーはIOLogを呼び出し、ログを削除したいと思います。
CALLL to IOLogをデバイスドライバー(kext)内の(対応する数の)NOPに置き換えると、カーネルがクラッシュし、スタックが破壊されたように見えます(「バックトレースが終了しました-無効なフレームポインター0」)。
ただし、同じ手法がユーザースペースで正常に機能します(たとえば、OS Xバイナリ内のNSLogをNOPpingします)。
ここで何が欠けていますか?
.net - .NET アセンブリが x86 または x64 用にビルドされたかどうかを確認するにはどうすればよいですか?
.NET アセンブリの任意のリストを取得しました。
各 DLL が (x64 または任意の CPU ではなく) x86 用にビルドされているかどうかをプログラムで確認する必要があります。これは可能ですか?
gcc - GCC でのレジスタの値のダンプ
GCC でレジスタの値を取得する必要があります。
これに似たもの:
32 ビット レジスタを取得するのは簡単ですが、フラグを取得する最も簡単な方法が何であるかはわかりません。
この本の例: http://kipirvine.com/asm/
彼らは、EFLAGS レジスタ全体を取得し、問題のビットをシフトすることによってそれを行います。また、Jcc と CMOVcc を使用して実行することも考えました。
それを行う方法に関する他の提案はありますか?検証するいくつかのテストケースも役立ちます。
assembly - IRQ マッピングの設定
カーネルをセットアップするために、いくつかのチュートリアルとリファレンスに従っています。チュートリアルで、まったく説明していないなじみのないコードに出くわしました。16 IRQs (0-15)
ISRの場所にマップすると言われているのはコードです32-47
:
のコードoutportb()
は次のとおりですが、私はすでにそれが何をしているのかを明確に把握しています:
これは保護モードの x86 アーキテクチャ上にあることに注意してください。このソース コードは正常に動作し、その機能は理解できますが、どのように機能するかはわかりません。誰かがここで何が起こっているのか説明してもらえますか?
gcc - gcc を使用して x64 コンピューターで x86 アセンブリ コードをコンパイルするにはどうすればよいですか?
学校の課題では、x86 アセンブリ コードを作成する必要がありますが、私のコンピューターは x64 マシンであり、gcc は x86 コードのみを想定しているため、gcc を使用してコンパイルすることはできません。gccにx86アセンブリコードを受け入れさせるコマンドはありますか? ありがとう
PS x86マシンで問題なくコンパイルされるため、コードが有効であることはわかっています。