1
私はEDXの左端のバイトを保存しようとすると、EAXの内容に続いて次の行で、メモリ内の5バイトのスポットにしています:NASM - 無効なセグメントオーバーライド
mov numh, [dl:eax]
と私を得ますエラー "無効なセグメントの上書き"です。
これはどういう意味ですか、どうすれば修正できますか?
私はEDXの左端のバイトを保存しようとすると、EAXの内容に続いて次の行で、メモリ内の5バイトのスポットにしています:NASM - 無効なセグメントオーバーライド
mov numh, [dl:eax]
と私を得ますエラー "無効なセグメントの上書き"です。
これはどういう意味ですか、どうすれば修正できますか?
まず、「無効なセグメントの上書き」とは、[dl:eax]の表現方法を指します。この式では、 'dl'はセグメントレジスタと呼ばれるものとして機能します。問題は、dlが有効なセグメントレジスタではないことです。セグメントレジスタは、この場合に使用するものではありません。
私はあなたがあなたの質問に求めているものを明確にしたい:メモリ
上記の場合、edx(内容を気にする場合)を保存し、24ビット右にシフトしてdlに0x12を入れてから保存する必要があります。ここで
は、私の頭の上からいくつかのASMです:
push edx ; save initial value
shr edx, 24 ; get the leftmost byte down to the 'dl' portion of edx
mov [numh], dl ; write the byte to the memory referenced by numh
mov [numh+1], eax ; write eax
pop edx ; restore original edx value
注: "MOV [numh + 1]が" 有効である場合、私は覚えていないことができます。しかし、これはあなたが正しい方向に動くことを望みます。
"無効なセグメントの上書き"とは、[dl:eax]の表現方法を指します。この式では、dlはセグメントレジスタと呼ばれるものとして機能します。セグメントレジスタは、この場合に使用するものではありません。 これについて詳しく説明できますか? – mavix
セグメントレジスタは、このケースで使用するものではないため、この議論の範囲を少し超えています。上で概説したパスを試してみてください。セグメントレジスタの動作方法(この日と年齢のx86 esoterica)に興味がある場合は、次の記事をお読みください。http://en.wikipedia.org/wiki/X86_memory_segmentation –
;私は[dl:eax]がdlとeaxの連結データを参照するという印象の下にありました。 – mavix