Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Команда CALL
Формат команды: CALL операнд Сохраняет текущий адрес в стеке и передает управление по адресу, указанному в операнде. Операндом может быть непосредственное значение адреса (или метка), регистр или ячейка памяти, содержащие адрес перехода. Часто возникает необходимость выполнения специфической операции в разных местах программы. В этом случае в каждом месте выполнения специфической операции надо продублировать последовательность команд, исполняющих эту операцию. Конечно, такое дублирование раздражает и отнимает много времени. Кроме того, оно значительно удлиняет программу. На самом деле можно избежать дублирования, если определите повторяющуюся последовательность команд как процедуру. Процедура (или, как часто говорят, подпрограмма) представляет собой совокупность команд, которая написана один раз, но может быть исполнена по мере необходимости в любом месте программы. Процесс передачи управления из основной части программы в процедуру называется вызовом, т.е. процедура вызывается. При вызове процедуры микропроцессор исполняет ее команды, а затем возвращается к тому месту, откуда был сделан вызов. Возникают два вопроса: как вызвать процедуру и как микропроцессор возвращает управление в нужное место программы? Таким образом, команды, обеспечивающие исполнение процедур, должны выполнять три функции: 1. Обеспечить сохранение содержимого указателя команд EIP. Когда процедура исполнена, находившийся в этом указателе адрес используется микропроцессором для возврата к месту вызова. Будем называть его адресом возврата; 2. Заставить микропроцессор начать исполнение процедуры; 3. Использовать сохраненное содержимое указателя команд EIP для возврата в программу и обеспечить продолжение ее исполнения с этого места. Все эти функции выполняются двумя командами: CALL (call a procedure -вызвать процедуру) и RET (return from procedure - возвратиться из процедуры). Команда CALL осуществляет функции запоминания адреса возврата и передачи управления процедуре. Она помещает в стек адрес возврата. Объем данных запоминаемого адреса зависит от типа перехода (см. команду JMP). Если в качестве адреса перехода указано только смещение, считается, что адрес расположен в том же сегменте, что и команда CALL. При этом выполняется ближний вызов процедуры, т.е. в том же сегменте кода. Процессор помещает значение регистра EIP, соответствующее команде следующей за командой CALL, в стек и загружает в EIP значение операнда, осуществляя тем самым передачу управления: PUSH EIP EIP=EIP+ смещение_к_нужной_команде Если операнд CALL – регистр или переменная, то его значение рассматривается как абсолютное смещение, если операнд – ближняя метка в программе, то ассемблер указывает ее относительное смещение. Чтобы выполнить дальний CALL в реальном режиме процессор помещает в стек значения регистров CS и EIP и осуществляет дальний переход аналогично команде JMP. Date: 2015-10-19; view: 420; Нарушение авторских прав |