세그먼트 레지스터를 통해 레이블에 액세스 할 수 없습니다. 어셈블리 오류

StackOverflow https://stackoverflow.com/questions/1512734

  •  19-09-2019
  •  | 
  •  

문제

INCLUDE Irvine16.inc

.data
    byteArray   BYTE 6 DUP(?)
    listSize = ($ - byteArray)
    aSum        WORD 0
    soffset = 0
.code
main PROC
    mov     ax, @data
    mov     ds, ax
    mov     cx, listSize
Loop1:
    mov     ax, 0
    movzx   ax, [byteArray + soffset]
    add     aSum, ax
    soffset = soffset + 1
    loop Loop1
    exit
main ENDP
END main

내가 얻는 오류는 오류 "A2074 : 세그먼트 레지스터를 통해 레이블에 액세스 할 수 없음"입니다.

Soffset을 사용하여 BytearRay를 통해 루프를하려고합니다.

도움이 되었습니까?

해결책

Irvine16.inc에 무엇이 있는지 잘 모르겠지만 말하고 있습니다. .model small,... 어느 시점에서.

추가하면

ASSUME DS:_DATA

그러면 오류 메시지가 사라질 것입니다. 그러나 프로그램을 실행하기에 충분한 지 의심 스럽다.


좋아, 아이디어가 있어요. 32 비트 예로 전환해야한다고 생각합니다. 이는 세그먼트 레지스터를 OS에서 설정하고 프로그램에서 사용하지 않는 플랫 모델입니다. 방금 Irvine 예제와 샘플 프로젝트를 다운로드했습니다.이 프로젝트는 32 비트가 조립 및 실행되었습니다.

X86 머신 코드 인 Wierd와 Twisted World에서 16 비트 모델은 적어도 사용자 프로그램의 관점에서 32 비트 모델보다 훨씬 더 복잡합니다.

다른 팁

이 오류는 DOS 프로그램을 조립하려고 시도함으로써 발생합니다 (.model ! = 평평한) a COFF .OBJ 파일. 또한 ml.exe 던지기 error A2006:undefined symbol : DGROUP. 소스는 구식으로 조립되어야합니다 OMF 파일. 다음 명령 줄로 파일을 빌드하십시오.

ml.exe /omf hello.asm
link16.exe hello.obj, hello.exe;

ml.exe Visual Studio 설치의 일부입니다. link16.exe 의 일부입니다 어바인의 도서관 스위트 ( "예제 프로그램 및 링크 라이브러리 소스 코드 ...").

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top