3

私が学んでいる組み立てについていくつか質問があり、混乱しています。

  1. bxandbpssandの違いは何spですか?本はそれbxがベースレジスタであり、bpベースポインタであると言っています。これは、それらが同じものであることを意味しますか?

  2. mov ax, bx、、、mov ax, [bx]mov ax, bpの違いは何mov ax, [bp]ですか?

  3. dispインデックス付きアドレッシングモードとはどういう意味ですか?たとえばmov al, disp[bx]?またはmov al, disp[si]?この本はの意味を説明していませんdisp

  4. レジスタはRAMではなくCPUにありますか?

    私の英語を許してください、それは私の最初の言語ではありません。

4

2 に答える 2

8

ああ、これらの16ビットレジスタは1984年にほとんど時代遅れになりました。ごめんなさい、古い本を持っています。それにもかかわらず、現代のプロセッサはまだこれらのものを使用しているので、あなたの質問は理にかなっています。私は実際にその日にいくつかの16ビットアセンブリを書きましたが、奇妙なことにそれを覚えています。うわぁ。

  1. BX、BP、SS、およびSPは、4つの別個のレジスタです。BX、BP、およびSPは汎用レジスタ(他の16ビットGPRはAX、CX、DX、SI、およびDI)であり、SSはあまり頻繁に使用しないセグメントレジスタです(暗黙的に使用されるのはBPおよびSPを参照します)。これらのレジスタのそれぞれがはるかに遠いものに対する完全な答えは、通常のSOの答えよりもはるかに多くのスペースを占めることになります。しかし、特定の質問に答えるために、BXとBPは2つの異なるレジスタであり、同じレジスタではありません。BPは通常、スタックフレームのインデックスを作成するために使用され、BXは通常、構造体または配列のインデックスを作成するために使用されます。

  2. MOV AX, BXBXの内容をAXにMOV AX, [BX]移動し、DS:BXに値があるメモリ位置の内容をAXに移動します。つまり、BXに値500が含まれている場合、最初の命令は500をAXに移動し、2番目の命令はアドレス500の内容(技術的にはセグメントDSの先頭から500バイト)をAXに移動します。(このようなMOV命令が、MASMやNASMなどのさまざまなアセンブラで解釈される方法には微妙な違いがあることに注意してください。)

  3. DISPは、「変位」の略語であり、スタックフレーム内の変数のアドレスや構造内の要素などを計算するために、レジスタ内の値に追加される数値です。そのような命令MOV AX, [BX+25]では、25が変位です。

  4. はい、レジスタはCPUの一部です。

于 2011-08-31T05:11:12.383 に答える
2

4:x86アーキテクチャでは、レジスタは実際にはCPUにあり、RAMにはありません。さて、私はレジスタがCPUに現れない1970年以降のアーキテクチャを知りませんが、レジスタがRAMと同じアドレス空間にあるアーキテクチャ(たとえば8051)を知っています-または少なくともレジスタはサブアドレス空間です。RAMにアクセスする命令は、まったく同じ命令コードを使用してレジスタに簡単にアクセスできます。アクセスがRAMにオフチップになるか、レジスタにオンチップのままになるかは、アドレスのみに依存します。使用済み。ただし、x86では、メモリ参照命令を使用してレジスタのライブ値にアクセスすることはできません。(最初に明示的または暗黙的にそれらをメモリに保存しない限り、ここではそれについて話していません。)

于 2011-11-16T21:14:43.397 に答える