2012-03-11 1 views
1

私はEDXの左端のバイトを保存しようとすると、EAXの内容に続いて次の行で、メモリ内の5バイトのスポットにしています:NASM - 無効なセグメントオーバーライド

mov numh, [dl:eax] 

と私を得ますエラー "無効なセグメントの上書き"です。

これはどういう意味ですか、どうすれば修正できますか?

答えて

0

まず、「無効なセグメントの上書き」とは、[dl:eax]の表現方法を指します。この式では、 'dl'はセグメントレジスタと呼ばれるものとして機能します。問題は、dlが有効なセグメントレジスタではないことです。セグメントレジスタは、この場合に使用するものではありません。

私はあなたがあなたの質問に求めているものを明確にしたい:メモリ

  • のいくつかの5バイトの領域EDXが含まれてい

    • numh参照、例えば、0x12345678の、および「EDXの左端のバイト」によっては、あなたが保存したい0x12

    上記の場合、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]が" 有効である場合、私は覚えていないことができます。しかし、これはあなたが正しい方向に動くことを望みます。

  • +0

    "無効なセグメントの上書き"とは、[dl:eax]の表現方法を指します。この式では、dlはセグメントレジスタと呼ばれるものとして機能します。セグメントレジスタは、この場合に使用するものではありません。 これについて詳しく説明できますか? – mavix

    +0

    セグメントレジスタは、このケースで使用するものではないため、この議論の範囲を少し超えています。上で概説したパスを試してみてください。セグメントレジスタの動作方法(この日と年齢のx86 esoterica)に興味がある場合は、次の記事をお読みください。http://en.wikipedia.org/wiki/X86_memory_segmentation –

    +0

    ;私は[dl:eax]がdlとeaxの連結データを参照するという印象の下にありました。 – mavix