Вопрос № 81796: Здраствуйте!!! У меня проблема!!! Очень нежна программа!!!
Описать близкую процедуру SHIFT23, которой передается начальный адрес некоторого массива из 100 байтов и которая за один просмотр этого массива циклически сдвигает его элементы на 23 пози...
Вопрос № 81.796
Здраствуйте!!! У меня проблема!!! Очень нежна программа!!!
Описать близкую процедуру SHIFT23, которой передается начальный адрес некоторого массива из 100 байтов и которая за один просмотр этого массива циклически сдвигает его элементы на 23 позиции вперед (влево). В своей работе процедура должна использовать вспомогательный массив, отведя ему место в стеке. Выполнить это упражнение при условии, что параметр передается процедуре: а) через регистр; б) через стек.
Помагите!!!!Очень прошу!!!
Отправлен: 09.04.2007, 21:10
Вопрос задал: YaRus (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Пашка
Здравствуйте, YaRus!
Я думаю прошло то время когда тут помогали делать лабы студентам. Мой вам совет ищите старые ответы мож найдете ответ.
Ответ отправил: Пашка (статус: 1-ый класс)
Ответ отправлен: 10.04.2007, 03:41
Отвечает: Зенченко Константин Николаевич
Здравствуйте, YaRus!
Принцип такой:
в начале процедуры
сохраняем регистр BP, в нем запоминаем SP.
вариант Б) извлекаем адрес массива из стека и запоминаем его в регистре SI.
Уменьшаем SP на 23, регистр DI настраиваем на стек, в СХ заносим 23.
Строковой командой MOVSB с префиксом REP переносим в стек 23 байта.
Данные в вспомагательном массиве.
тепенрь DI-начало массива, SI-24-й байт массива, СХ-(100-23) и снова строковые команды. Данные сдвинуты.
SI-начало вспомагательного массива, DI-уже установлен, СХ-23 и снова строковые команды. Данные сдвинуты.
Из регистра ВР востанавливаем SP и из стека востанавливаем ВР.
Возвращаемся в место вызова. для варианта Б)возврат с корекцией стека
PS:стек лутше изменять на четное число
Удачи!
--------- И только наступив на грабли мы преобретаем драгоценный опыт!