2015-01-15 1 views
0

Я хочу знать, почему эта программа дает мне ошибку.Сборка Программирование Нелегальный индексный режим

Turbo Assembler Version 3.0 Copyright (C) 1988, 1991 Borland International

Сборка файла: 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, и перепроверять это с руководством разработчика программного обеспечения Intel. Подсказка: он жалуется на использование 'cl' в' [msg1 + cl] '. – Michael

ответ

0

Если вы хотите использовать регистр для прокрутки символов msg1, тогда используйте регистр индексирования, такой как 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

wow спасибо, что решить мою проблему – Volkswagen

+0

Обратите внимание, что он сравнивает символ с 12, а не счетчик. Поскольку в строке нет такого символа, код будет продолжать цикл до тех пор, пока не найдет 12 в памяти. – Guffa

+0

Я ожидаю, что выход SML RG! но когда я запускаю вывод, это что-то вроде> i – Volkswagen

Смежные вопросы