![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.01.2016
Сообщений: 5
|
![]()
программирование на языке асемблер. как выйти из подпрограммы, и вернутся не туда, откуда вошел в подпрограмму, а в другое место?
![]() Последний раз редактировалось tilbakekomst; 05.01.2016 в 19:24. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
выкинуть из стека адрес возврата и сделать JMP в любую нужную точку кода
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 05.01.2016
Сообщений: 5
|
![]() |
![]() |
![]() |
![]() |
#4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]() Цитата:
Допустим так: Код:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder Последний раз редактировалось Smitt&Wesson; 06.01.2016 в 07:25. |
|
![]() |
![]() |
![]() |
#7 | |
Регистрация: 05.01.2016
Сообщений: 5
|
![]()
[/QUOTE]
Цитата:
0801 JZ 0807 0802 -------- 0803 -------- 0804 JMP ST 0805 0806 0807 -------- 0808 JMP 0803 0809 |
|
![]() |
![]() |
![]() |
#8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]() Так то вообще можно сделать все что угодно. Только вот стоит ли...
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
А если не заниматься глупостями, то в дальнейшем будет меньше голова болеть.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
![]() |
![]() |
![]() |
#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 |