MOV [1234H], AX
AXの値がメモリ内の1234の16進アドレスにコピーされることを意味します。だから、私が言っていることが間違っているなら、私を訂正してください、[]演算子はポインタとして機能しますよね?
そうは言っても、次の指示が理解できません。MOV [EBX], AX
なぜ[]を使用するのですか?EBXはプロセッサ内の汎用レジスタであり、メモリセルではないため、EBXへのポインタはありません。
PS私はmasm32でプログラミングしています。
ありがとう
ここでのレジスタ EBX は、アドレスである値を保持します。MOV [EBX], AX
レジスタ AX に格納されている値を取得します。EBXに格納されているアドレスに書き込みます。
私はあなたの質問ケースEBX
がアドレスを保持し、マシンがストアを行うと信じています。
の意味は、[]
より「アドレスを見る...」であるため[1234H]
、アドレス0x1234を[EBX]
調べ、に格納されているアドレスを調べることを意味しますEBX
。*
あなたがそれに精通しているなら、C /C++の演算子のように。
のような指示には注意してください。
MOV [EBX], AX
AX は 16 ビット レジスタであるため、EBX が保持するアドレスがアラインされていない限り、パフォーマンスが大幅に低下する可能性があります。
括弧は、間接性のレベルを意味します。
mov bx,ax は、ax を bx に入れるか、直接レジスタに格納することを意味し、レジスタを直接使用して値を格納することを意味します mov [bx],ax は、レジスタを間接的に使用することを意味します。 . mov ax,1234h は即時を意味し、1234h を AX に入れます。 mov [1234h],ax は上記の [bx] と同じように間接的なレベルを持ち、括弧内は結果を格納する場所へのアドレスを含みます。
私は x86 構文に慣れていませんが、x86 にこれがあり、mov [bx+cx],ax のようなものが表示された場合は、bx と cx を追加し、それをアドレスとして使用して値を ax に格納することを意味します。