내가 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'은 세그먼트 레지스터라고 불리는 것으로 작동합니다. 문제는 dl이 유효한 세그먼트 레지스터가 아니라는 것입니다. 세그먼트 레지스터는이 경우에 사용하려는 것이 아닙니다. " 이것에 대해 자세히 설명해 주시겠습니까? – mavix
세그먼트 레지스터는이 경우 사용하려는 것이 아니기 때문에이 토론의 범위를 벗어납니다. 위에서 설명한 경로를 시도해보고 세그먼트 레지스터가 작동하는 방식에 관심이있는 경우이 기사를 참조하십시오. http://en.wikipedia.org/wiki/X86_memory_segmentation –
윤곽을 그리는 경로가 작동해야합니다. ; 나는 [dl : eax]가 dl과 eax의 연결된 데이터를 나타낼 것이라는 인상을 받고있었습니다. – mavix