세그먼트 레지스터를 통해 레이블에 액세스 할 수 없습니다. 어셈블리 오류
문제
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
의 일부입니다 어바인의 도서관 스위트 ( "예제 프로그램 및 링크 라이브러리 소스 코드 ...").
제휴하지 않습니다 StackOverflow