Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Организация магазина со статической цепочкой
Итак, в случае статической цепочки магазин организован, как это изображено на рис. 9.1. Таким образом, на запись текущей процедуры в магазине указывает регистр BP (Base Pointer), с которого начинается динамическая цепочка. На статическую цепочку указывает регистр LP (Link Pointer). В качестве регистров BP и LP в различных системах команд могут использоваться
универсальные, адресные или специальные регистры. Локальные переменные отсчитываются от регистра BP вверх, фактические параметры - вниз с учетом памяти, занятой точкой возврата и самим сохраненным регистром BP. Вызов подпрограмм различного статического уровня производится несколько поразному. При вызове подпрограммы того же статического уровня, что и вызывающая подпрограмма (например, рекурсивный вызов той же самой подпрограммы), выполняются следующие команды: Занесение фактических параметров в магазин JSR A Команда JSR A продвигает указатель SP, заносит PC на верхушку магазина и осуществляет переход по адресу A. После выполнения этих команд состояние магазина становится таким, как это изображено на рис. 9.2. Занесение BP, отведение локальных, сохранение регистров делает вызываемая подпрограмма (см. ниже).
При вызове локальной подпрограммы необходимо установить указатель статического уровня на текущую подпрограмму, а при выходе - восстановить его на старое значение (охватывающей текущую). Для этого исполняются следующие команды: Занесение фактических параметров в магазин MOVE BP, LP SUB Delta, LPJSR AЗдесь Delta - размер локальных вызывающей подпрограммы плюс двойная длина слова. Магазин после этого принимает состояние, изображенное на рис. 9.3. Предполагается, что регистр LP уже сохранен среди сохраняемых регистров, причем самым первым (сразу после локальных переменных). После выхода из подпрограммы в вызывающей подпрограмме выполняется команда MOVE (LP), LPкоторая восстанавливает старое значение статической цепочки. Если выход осуществлялся из подпрограммы 1-го уровня, эту команду выполнять не надо, поскольку для 1-го уровня нет статической цепочки.
При вызове подпрограммы меньшего, чем вызывающая, уровня выполняются следующие команды: Занесение фактических параметров в магазинMOVE (LP), LP /* столько раз, какова разность уровней вызывающей и вызываемой ПП */JSR AТем самым устанавливается статический уровень вызываемой подпрограммы. После выхода из подпрограммы выполняется команда MOVE -Delta(BP), LPвосстанавливающая статический уровень вызывающей подпрограммы. Тело подпрограммы начинается со следующих команд: LINK BP, -размер" локальныхMOVEM -(SP)Команда LINK BP, размер_локальных эквивалентна трем командам: MOVE BP, -(SP)MOVE SP, BPADD -размер_локальных, SPКоманда MOVEM сохраняет в магазине регистры. В результате выполнения этих команд магазин приобретает вид, изображенный нарис. 9.1. Выход из подпрограммы осуществляется следующей последовательностью команд: MOVEM (SP)+UNLK BPRTD размер_фактическихКоманда MOVEM восстанавливает регистры из магазина. Команда UNLK BP эквивалентна такой последовательности команд: MOVE BP, SPMOVE (SP), BPADD #4, SP /* 4 - размер слова */Команда RTD размер_фактических, в свою очередь, эквивалентна последовательности ADD размер" фактических+4, SPJMP -размер" фактических-4(SP)После ее выполнения магазин восстанавливается до состояния, которое было до вызова. В зависимости от наличия локальных переменных, фактических параметров и необходимости сохранения регистров каждая из этих команд может отсутствовать.
|