2

以下は、プロセッサを 16 ビットから 32 ビットに切り替える際の多くのチュートリアルで提供されている一般的な方法のようです。

    mov     eax, cr0            ; set bit 0 in CR0-go to pmode
    or      eax, 1
    mov     cr0, eax

単純に次のことをしないのはなぜですか。

    or      cr0, 1

足りないものはありますか?おそらく、私が考えることができる唯一のことは、cr0 レジスタでこのような操作を実行できないということです。

4

3 に答える 3

6

オペレータには、orCR0 レジスタにアクセスできるオペコードがありません。(CR0レジスタではこの操作はできません。)

そのためmov、CR0 レジスタにアクセスできるオペコードが存在します。

于 2010-04-04T17:29:59.800 に答える
-2

or は、実際に 2 つの値を取り、解を作成する比較演算子です。or 操作が完了した後、ソリューションは eax に格納されます。または、特殊な操作であり、スコープによって支配されるため、ストレージ レジスタとして使用することはできません。そのため、結果を取得し、プロセスが完了した直後に新しい値を格納することをお勧めします。

オペランドの使用または使用について述べたことを詳しく説明すると、ストレージの容量がなく、ID が既に存在するデータに対して操作を実行するだけです。足し算、引き算、掛け算、割り算などの 1 つの操作を行う電卓のボタンのようなものと考えてください。コードは、メモリ バッファーを管理する計算機です。などであり、そのメモリ ストア内のデータに対するオペレーター/操作のサービスを利用し、終了すると、さらなる操作またはユーザーへの終了した出力の戻り結果を取得します。

ここでの質問は論理的なものであり、コードはよく考えられて簡潔であり、素晴らしいものです。

于 2011-09-12T23:38:43.360 に答える
-3

これを試して、1 つのコマンドで 1 を cr0 に強制します。

MOV cr0, 1
于 2012-05-27T00:03:49.777 に答える