№12 Параметры функции (сложно) Ассемблер и процедуры Часть 1 Курсы программирования киев Бухгалтер

Автор Ivan Samoilov
№12  Параметры функции (сложно) Ассемблер и процедуры Часть 1 Курсы программирования киев Бухгалтер

поэтому давайте рассмотрим.

Как можно передать функции какие-то параметры не используя при этом регистра и получить обратно значение также не используя регистра для этого мы будем применять стек. Сейчас посмотрим как. Давайте представим, что у нас есть три числа 71 и три и.

Наша задача их где предлагаю вот такой вариант развития следующих событий мы знаем, что если положить в стык X потом положить в стык BX.

А после чего достать оттуда X достать оттуда BX то мы поменяем местами значения в Excel без такое обозначает когда положим аец потом положим BX после чего достаём X, а последним там находится BX достаём bx-1 находится на секс. Таким образом мы. Их поменяли местами. Если я сделаю следующее например 7A сюда три то соответственно в ходе выполнения этих инструкций VX будет находиться 3. А В. Б Икс будет находиться 7 поэтому так довольно интересная штука и главная хитрость в том, что мы получить доступ к любому из элементов стека например находясь. Вот здесь мы можем получить доступ к произвольному какому элементу например к семёрке. То есть к первому элементу стека как рассмотрим позже сперва идея давайте положим вставь число которое будет в будущем замена результат выполнения нашей операции после чего. Запишем в стык. Семёрку дальше. Запиши в единицу дальше запишем тройку при этом будущем будет заменено результат. А — это наши операнды например A B и C теперь вызываем нашу функцию и. После выполнения нашей функции 0 будет заменено результаты выполнения. Сперва нужно будет забрать оттуда наши параметры которые передали например заберём оттуда сперва тройку потом заберём потом заберём оттуда. Семёрку Я просто записываю pop-x чтобы мы получали. Семёрку записывали её с получали единицу записывались. Ну вот таким образом мы просто их пропускаем и вот как раз таки если мы сделаем pop-x то мы получим в тот самый результат который заменил ноль на своё значение, но всё не так просто как мы описали до этого в нашей функции теперь нам нужно учить её работать со стыком при перемещении по Skype будем использовать регистр BP его можно увидеть вот здесь вот он. Но прежде чем его использовать. Давайте сохраним его значение на всякий случай. Если вдруг будем из нашей функции вызывать ещё одну какую-то функцию. Она ведь тоже будет использовать BP поэтому сохраняем его значение текущее сохраняемые во фстэк службы п теперь. ВВП поместим то место на котором мы находим мувп и так как я знаю где мы находимся в стеке. Теперь мы можем получить доступ к любому его адресу Stack segment смещения записанное. ВВП по этому адресу нас доступно предыдущее значение регистр BP если мы сделаем плюс два то мы поднимемся на одно значение верх у нас записан адрес следующей инструкции. Сокол если мы сделаем + 4 поднимемся ещё на один элемент вверх то там как раз и будет записан наш операнд це то есть тройка соответственно можно записать себе как + 0 — это значит мы получаем последний операнд плюс два предпоследний + 4 предпоследний и плюс 6 соответственно первый операнд ну вы. Скажите зачем нам, тогда в помещать этот самый SP. Ведь мы можем работать прямо через него. А вот и нет в ходе работы нашей программы нам понадобится другие регистры. А значит нам. Сперва нужно сохранить. Давайте сохраним X B X pdx после чего нам нужно будет достать их в обратном порядке dxbx соответственно дальше лежит у нас наш регистр BP мы возвращаем на свое законное место и выполняем Red так как у нас за регистр BP лежит адрес на который можно перейти. После выполнения если посмотреть то входит выполнение этих инструкций стык возвращается в исходное положение. А значит с точки зрения. СТК — это выглядит вот так теперь можно пытаться получить доступ к одному из параметров. Давайте поместим VX нашу. Семёрку то есть операнд, а он имеет смещение ссбп + 4 + 4 vbx положен B находится в ссбп + 4 + 2. Теперь давайте добавим xvx сейчас мы уже имеем сумму. Семёрки и единицы нам осталось прочесть только тройка параметр C и прибавить его KX мы снова его читаем vbx по адресу ссбп плюс соответственно и снова добавляем KX B X всё, что нам осталось сделать теперь — это занести результат вместо нуля мы помещаем по адресу ссбп + 4 + 6 значение которая находится в регистре AX и всё теперь можно выходить из нашей функции. Как видите регистр DX на мне понравился поэтому. Давайте уберем его запись в стек то есть его сохранения попытаемся запустить нашу программу скомпилированная сперва. И откроем. ВТБ24 Теперь давайте отслеживать так как она выполняется.

0 комментариев
0

Читайте также