Вопрос № 28065: Скажите пожалуйста, експерты ... - почему не работает в debug.exe ?...
Вопрос № 28.065
Скажите пожалуйста, експерты ... - почему не работает в debug.exe ?
Приложение:
Отправлен: 21.10.2005, 15:37
Вопрос задал: S1lveR (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лысков Игорь Витальевич
Здравствуйте, S1lveR!
Хоть регистры и универсальные, все же в некоторых случаях есть жесткие правила их использования.
В данном случае ты неправильно используешь в адресации регистр CX.
Вместо него можно или BX или BP. CX же используй для цикла.
P.S. В 32-битных регистрах (EAX, EBX, ...) это ограничение сняли. Их можно комбинировать как угодно.
P.S.S. Читай литературу! Там все это расписано.
Что именно не работает?
Вообще-то, адресации с помощью регистра CX в процессорах x86 нет. Надо использовать регистр BX либо 32-хразрядные регистры:
mov al, [si+cx] - так нельзя
mov al, [si+bx] - так можно
mov al, [esi+ecx] - так тоже можно
--------- Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 21.10.2005, 16:29
Отвечает: Котиев Зураб
Здравствуйте, S1lveR!
в 16-битном режиме базовыми регистрами могут быть только bx и bp а индексными si и di т.е. возможны следующие вариации
[bx+si]
[bx+di]
[bp+si]
[bp+di]
[bx+число]
[bp+число]
Ответ отправил: Котиев Зураб (статус: 6-ой класс)
Отправлен: 23.10.2005, 00:00
Отвечает: Юра Устинов
Здравствуйте, S1lveR!
Если не работает строчка mov al,[si+cx] то всё просто вы не можете использовать для адресации по базе с индексированием регистр cx. Попробуйте mov al,[si+bx] и у вас получится.
Краткая справка по адресации по базе с индексированием:
В этом методе адресации смещение операнда в памяти вычисляется как сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано. Все следующие команды — это разные формы записи одного и того же действия:
В регистр AX помещается слово из ячейки памяти со смещением, равным сумме чисел, содержащихся в BX и SI, и числа 2. Из шестнадцатибитных регистров так можно складывать только BX + SI, BX + DI, BP + SI и BP + DI, а из 32-битных — все восемь регистров общего назначения. Так же как и для прямой адресации, вместо непосредственного указания числа можно использовать имя переменной, заданной одной из директив определения данных. Так можно прочитать, например, число из двумерного массива: если задана таблица 10x10
байт, 2 — смещение ее начала от начала сегмента данных (на практике будет использоваться имя этой таблицы), BX = 20, а SI = 7, приведенные команды прочитают слово, состоящее из седьмого и восьмого байт третьей строки. Если таблица состоит не из одиночных байт, а из слов или двойных слов, удобнее использовать следующую, наиболее полную форму адресации.
--------- Спасём Россию!!!
Ответ отправил: Юра Устинов (статус: 2-ой класс)
Отправлен: 23.10.2005, 15:55