Novilit-v
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 21
|
||||||
1 | ||||||
Цепочечные операции31.03.2014, 23:45. Просмотров 418. Ответов 4
Метки нет Все метки)
(
Здравствуйте. В рамках одного задания возникла необходимость в цепочечных командах. После некоторой работы было установлено, что даже простейшая задача - копирование одной строки в другую - работает как-то странно. итак:
Кликните здесь для просмотра всего текста
Ожидалось, что при вводе, к примеру, "12345" первые 5 символов второй строки будут заменены на "12345". Таким образом, будет выведено: пустая строка (из esi символы удалены), "123455678" - строка с перезаписанными символами. Однако - результат на скриншоте. В esi на самом деле пусто, а вот в edi первые 5 символов просто исчезли. При этом "cld", поставленный в комментарий, на работу никак не влияет - первый результат с ним, второй без него. Подскажите, как исправить ситуацию. P. S. Студия.
0
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
31.03.2014, 23:45 |
Ответы с готовыми решениями:
4
Строка: Используя цепочечные операции, ввести с клавиатуры строку и вывести его длину. Цепочечные команды Цепочечные команды Цепочечные команды Цепочечные команды |
Mikl___
![]() 13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
|
|
01.04.2014, 03:56 | 2 |
попробуй заменить mov esi,stro на lea esi,stro
0
|
Novilit-v
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 21
|
||||||
01.04.2014, 18:35 [ТС] | 3 | |||||
Так, часть проблемы решил - просто внезапно понял, какой же я дурак. movcb работает нормально - и копирует, и прибавляет указатель, но вот о возврате к исходному его значению он не заботится. Возвращаем адрес вручную, получаем видимую строку результата. В текущем варианте:
Кликните здесь для просмотра всего текста
При вводе "12345" выводит верные "123455678". Однако разницы между кодом с cld и без него по-прежнему нет, хотя по-смыслу - должна быть, хотя бы в виде ошибки памяти. Теперь хотелось бы научиться выводить "12345"->"123454321". Спасибо тем, кто откликнулся и откликнется в будущем.
0
|
Mikl___
![]() 13304 / 6377 / 629
Регистрация: 11.11.2010
Сообщений: 11,536
|
|
02.04.2014, 03:49 | 4 |
Novilit-v,
при старте приложения DF=0 поэтому разницы и не будет, но вот если в тексте программы используется команда STD не забудь перед выходом из программы сделать CLD ![]()
0
|
Novilit-v
0 / 0 / 0
Регистрация: 14.10.2013
Сообщений: 21
|
||||||
04.04.2014, 23:17 [ТС] | 5 | |||||
Ошибки версии 2.0.
Есть код: Кликните здесь для просмотра всего текста
По замыслу он должен создавать строку с обратным порядком символов по отношению к данной, пробегая изначальную строку из начала в конец и результирующую - из конца в начало, без учёта (пока) символов конца строк. Однако вывод, создаваемый в конце, показывает "5\0***\054i\0" при вводе "12345" вместо "\054321ghi". При "54321" ->"1\0***\012i\0". Как исправить? И как это вообще работает при таком, казалось бы, простом коде? Результаты ввода/вывода:
0
|
04.04.2014, 23:17 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
04.04.2014, 23:17 |
Цепочечные команды Цепочечные команды: поменять местами крайние символы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |