|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.01.2016, 19:22 | #1 |
Регистрация: 05.01.2016
Сообщений: 5
|
Как выйти из подпрограммы?
программирование на языке асемблер. как выйти из подпрограммы, и вернутся не туда, откуда вошел в подпрограмму, а в другое место?
Последний раз редактировалось tilbakekomst; 05.01.2016 в 19:24. |
05.01.2016, 19:41 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
выкинуть из стека адрес возврата и сделать JMP в любую нужную точку кода
|
05.01.2016, 20:11 | #3 |
Регистрация: 05.01.2016
Сообщений: 5
|
|
05.01.2016, 21:27 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
05.01.2016, 23:56 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
|
|
06.01.2016, 07:17 | #6 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Допустим так: Код:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 06.01.2016 в 07:25. |
|
06.01.2016, 10:22 | #7 | |
Регистрация: 05.01.2016
Сообщений: 5
|
[/QUOTE]
Цитата:
0801 JZ 0807 0802 -------- 0803 -------- 0804 JMP ST 0805 0806 0807 -------- 0808 JMP 0803 0809 |
|
06.01.2016, 11:48 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Так то вообще можно сделать все что угодно. Только вот стоит ли...
I'm learning to live...
|
|
06.01.2016, 12:49 | #9 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
А если не заниматься глупостями, то в дальнейшем будет меньше голова болеть.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
06.01.2016, 12:55 | #10 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Вы подумайте на досуге, чем отличается кусок кода (пусть лежащий где-то в стороне от основного кода) от кода, являющегося подпрограммой. Подсказка: код получает управление и после выполенения передаёт его в определённое место. Код в подпрограмме получает управление и после выполенения передаёт его в то место, откуда произошёл вызов подпрограммы. Грубо говоря, RET - это тот же JUMP, только не на заданный адрес, а на адрес, который находится в стеке. Вот и всё отличие. Как организовать выполнение программы, помещать ли адрес возврата в стек или не помещать - зависит от программиста, который разрабатывает алгоритм и программу. Например, достаточно CALL PP1 заменить на JMP PP1, чтобы произошла передача управления БЕЗ помещения адреса возврата в стек. Ну тогда RET в подпрограмме использовать нельзя - ведь в стеке не будет адреса, на который надо вернуться. Так понятней? Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Одномерный массив, как выйти? | Евгения Е | Общие вопросы C/C++ | 2 | 03.06.2014 22:10 |
Как выйти из полноэкранного режима??? | ser70 | Общие вопросы C/C++ | 4 | 23.04.2013 07:53 |
Как выйти из поиска по достижению конца листа? | ИгорьБ | Microsoft Office Excel | 16 | 30.03.2013 01:34 |
Как выйти с процедуры? | Andrey770 | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 04.06.2011 22:26 |
Как выйти из бесконечного цикла! | Эдуард | Общие вопросы C/C++ | 11 | 02.03.2008 19:15 |