2012-03-11 48 views
1

我試圖存儲EDX的最左側字節和隨後EAX的內容到5個字節點在內存中的以下行:NASM - 無效段重載

mov numh, [dl:eax] 

和我得到的錯誤「無效段覆蓋」。

這是什麼意思,我該如何解決它?

回答

0

首先,「無效段覆蓋」是指您表達[dl:eax]的方式。在這個表達式中,'dl'就像一個段寄存器。問題是dl不是有效的段寄存器。在這種情況下,段寄存器不是您想要使用的。

我想澄清一下你問你的問題是什麼:

  • numh引用一些內存
  • EDX包含,例如,0x12345678的5字節的區域,並以「EDX的最左邊字節」,你想存儲0x12

如果以上情況屬實,你需要保存edx(如果你關心它的內容),向右移動24位得到0x12到dl中,然後存儲它。

下面是一些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'作爲段寄存器的一部分,問題在於dl不是有效的段寄存器。段寄存器不是你想在這種情況下使用的。「 你能詳細說明一下嗎? – mavix 2012-03-11 05:57:59

+0

段寄存器有點超出了本討論的範圍,因爲它們不是你想要在這種情況下使用的。試試我上面概述的路徑,如果您對分段寄存器的工作原理感興趣,請閱讀以下文章:http://en.wikipedia.org/wiki/X86_memory_segmentation – 2012-03-11 06:05:20

+0

您列出的路徑應該可以工作;我只是覺得[dl:eax]會引用dl和eax的連接數據。 – mavix 2012-03-11 06:27:30