2015-01-15 3 views
0

왜이 프로그램에서 오류가 발생하는지 알고 싶습니다.어셈블리 프로그래밍 잘못된 인덱싱 모드

터보 어셈블러 버전 3.0 저작권 (C) 1988, 1991 볼랜드 국제

조립 파일 : sample.asm
오류 sample.asm (16) 불법 인덱스 모드
오류 메시지 : 1
경고 메시지 : 없음
패스 : 1
남은 메모리 : 470k

title test.program 
cstack segment para stack 'stack' 
dw 200h 
cstack ends 

cdata segment para 'data' 
msg1 db 'Sample progr! $' 
cdata ends 

ccode segment para 'code' 
assume cs: ccode, ds: cdata ,ss: cstack 
main: 
mov cl,00 
stri: 
mov ah,02h 
mov dl,[msg1 +cl] ;< this line give me an error of illegal indexing mode 
int 21h 

add cl,02 
cmp dl,12 
jbe stri 

mov ah,4ch 
int 21h 

ccode ends 
end main 
+0

적절한 조치는 16 행에서 얻은 내용을보고 인텔의 소프트웨어 개발자 매뉴얼을 참조하십시오. 힌트 :'[msg1 + cl]'에서'cl'의 사용에 대해 불평하고있다. – Michael

답변

0

의 문자를 루프하기 위해 레지스터를 사용하려면 msg을 입력 한 다음 SI, DI 또는 BX와 같은 인덱싱 레지스터를 사용하십시오.

add cl,2 때 문자열을 올바르게 표시하지 않습니다!

12와 비교하면 느낌표 문자가 포함되지 않습니다.

main: 
mov si,00 
stri: 
mov ah,02h 
mov dl,[msg1 + si] ;< this line give me an error of illegal indexing mode 
int 21h 
add si,1 
cmp si,13 
jbe stri 
+0

와우 덕분에 내 문제를 해결할 수 있습니다. – Volkswagen

+0

그는 캐릭터를 카운터가 아닌 12와 비교합니다. 문자열에 그러한 문자가 없기 때문에 코드는 메모리에서 어딘가에 12를 찾을 때까지 반복됩니다. – Guffa

+0

출력이 SML RG라고 기대합니다! 하지만 출력을 실행하면> i와 비슷합니다. – Volkswagen

관련 문제