2012-03-11 4 views
1

내가 EDX의 왼쪽 바이트를 저장하기 위해 노력하고 다음 EAX의 내용으로 5 바이트 자리에 메모리에 다음 줄을 해요 :NASM - 유효하지 않은 세그먼트 재정의

mov numh, [dl:eax] 

그리고 내가 얻을 오류 "잘못된 세그먼트 무시".

이것은 무엇을 의미하며 어떻게 해결할 수 있습니까?

답변

0

먼저 "유효하지 않은 세그먼트 재정의"는 [dl : eax]를 표현한 방식을 나타냅니다. 이 표현식에서 'dl'은 세그먼트 레지스터라는 역할을합니다. 문제는 dl이 유효한 세그먼트 레지스터가 아니라는 것입니다. 세그먼트 레지스터는이 경우에 사용하려는 것이 아닙니다.

나는 당신이 당신의 질문에 묻는 것을 명확히하려는 : 예

  • EDX에 포함 된 메모리, 0x12345678의

    • NUMH 참조 일부 5 바이트 영역을, 그리고 "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'은 세그먼트 레지스터라고 불리는 것으로 작동합니다. 문제는 dl이 유효한 세그먼트 레지스터가 아니라는 것입니다. 세그먼트 레지스터는이 경우에 사용하려는 것이 아닙니다. " 이것에 대해 자세히 설명해 주시겠습니까? – mavix

    +0

    세그먼트 레지스터는이 경우 사용하려는 것이 아니기 때문에이 토론의 범위를 벗어납니다. 위에서 설명한 경로를 시도해보고 세그먼트 레지스터가 작동하는 방식에 관심이있는 경우이 기사를 참조하십시오. http://en.wikipedia.org/wiki/X86_memory_segmentation –

    +0

    윤곽을 그리는 경로가 작동해야합니다. ; 나는 [dl : eax]가 dl과 eax의 연결된 데이터를 나타낼 것이라는 인상을 받고있었습니다. – mavix