(CS)= 1075H、(IP)= 0300H、次の命令を実行する前に:アセンブリ言語のCALL命令
のCALL 1000H
何アドレスプログラム制御が渡されるために? 命令が実行された後のCSとIPの新しい値は何ですか?
(CS)= 1075H、(IP)= 0300H、次の命令を実行する前に:アセンブリ言語のCALL命令
のCALL 1000H
何アドレスプログラム制御が渡されるために? 命令が実行された後のCSとIPの新しい値は何ですか?
この質問に答えるには、call
の説明が何であるかを考えてください。
あなたがわからない場合は、その後、look it up:
実アドレスまたは仮想8086モードで遠くの呼び出しを実行すると、プロセッサは、CSとEIPの両方の電流値をとして使用するためにスタックに登録するプッシュリターン命令ポインタ。次に、プロセッサは、呼び出されたプロシージャのターゲットオペランドで指定されたコードセグメントおよびオフセットに対して「遠い分岐」を実行する。
ここで、ターゲットオペランドは、ポインタ(ptr16:16またはptr16:32)またはメモリ位置(m16:16またはm16:32)を使って間接的に絶対アドレスを指定します。ポインタメソッドでは、呼び出されたプロシージャのセグメントとオフセットは、4バイト(16ビットオペランドサイズ)または6バイト(32ビットオペランドサイズ)のファーストアドレス即値を使用して、命令でエンコードされます。間接的な方法では、ターゲットオペランドは、4バイト(16ビットオペランドサイズ)または6バイト(32ビットオペランドサイズ)のファーアドレスを含むメモリロケーションを指定します。 operand-size属性は、遠いアドレスのオフセット(16または32ビット)のサイズを決定します。遠いアドレスは、CSおよびEIPレジスタに直接ロードされます。 operand-size属性が16の場合、EIPレジスタの上位2バイトがクリアされます。
はあなたがIP
(命令ポインタ)が300H
であること、そしてCS
(コードセグメント)が1075H
であることを告げています。ドキュメンテーションでは何が起こるのでしょうか?
呼び出しから戻ったときにまず、CS
とIP
は後で使用するためにスタックにプッシュされます。
プロセッサは、指定されたコードセグメントに分岐し、オフセットします。
この場合、1000H
になります。
どのように影響しますかCS
およびIP
?さて、CS
はセグメントを変更していないため同じですが、IP
が変更されるためです。 IP
がなぜ変更されますか? IP
がであることを考えてください:実行しようとしている命令へのポインタです。実行が1000H
にジャンプする場合、実行される命令は明らかに1000H
にあるので、IP
は1000H
になります。 ret
call
からあなたの後に何が起こる
?古いCS
とIP
(スタックにcall
でプッシュされたもの)がポップされます。 CS
は変更されませんが、IP
は今度は300H
になります。
(これはないは無限ループを作成することに注意してください。なぜ?のでIP
作品は。実行されるように次の命令を指すように命令デコード中に内部で設定されている方法の。このため、 call
命令が呼び出し後の命令に、IP
ポイントを実行されている。そのため、あなたが戻ってIP
をポップするとき、あなたはcall
後の実行を開始します。)
'push'を実行している ''現在の '' ip''が実際に次の命令を指しているのは( 'call'命令がすでにデコードされ、' ip'が内部的に更新されているので) 1つを呼ぶ。 ...文字通りあなたの説明で(IPは300hです)、 'ret'は無限ループを作ります。 :) – Ped7g
「IP」はあなたが記述する方法で動作するため、無限ループを作成しません。私は答えに明示的に含めるべきだと思う。 –
ええと...私は本当に*(OP)の*を実行する前に、* "(IP)= 0300Hを意味するのでしょうか?"これはちょっと相反していて、 'org 300h'と*(デコード後)を実行する前の*として理解でき、' call'は02FDです( 'call rel16'の場合)。私はこれがCPUの内部処理と実行とデコードの違いの知識がない人にとって混乱するかもしれないと思う。 – Ped7g
(CS)= 1075H、(IP)= 1000H – Tommylee2k
caあなたはIPが1000Hになる方法を説明しますか? –
コールは現在のIP(そこに戻ることができる)をプッシュし、指定されたアドレスにジャンプします。だから "1000を呼び出す" 1000にジャンプし、IPがある1000 – Tommylee2k