Редактирование:
USER
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Реализация == Переменные USER находятся в [[Память программ|памяти программ]], уже заранее откомпилированные вручную. Их [[поле параметров]] занимает всего один байт, что весьма экономно. Во время работы [[Каллисто]] создавать новые переменные в [[Память программ|памяти программ]] невозможно, поэтому в целях дальнейшей экономии места порождающее слово USER лишено заголовка и создающей части. Хотя в приложениях нельзя использовать имя USER, исполняющая часть слова USER может быть использована при внесении изменений в исходный текст [[Каллисто]]. Конечно, в [[Каллисто|Каллисто 1.0]] подобная работа не для начинающего разработчика — введение новых переменных USER технически возможно, но требует ручного пересчёта многих адресов. Для повышения быстродействия [[Каллисто]] исполняющая часть слова USER написана на [[ЯМК|языке МК]]. <pre> 2586 ;#USER 2587 ; USER ( −− a ) Обработчик переменных типа USER (слово без заголовка). 2588 ; Переменные USER могут быть только в памяти программ и их поле параметров занимает всего 1 байт. 2589 ; Поэтому определяющая часть слова некорректна и излишня 2590 ;LUSER: .DB 4 2591 ; .TEXT "USER" 2592 ; .DW LDEFER 2593 ;USER: .DW CALL, CON, PSCOD 2594 SUSE: RM7 2 + KPRGM 11000 + KM3 KGOTO9 ; 000 быстрее, чем ВП 3 </pre> Реализации из SP-Forth 4.20: <pre> 0 VALUE USER-CODE … CODE _USER-CODE LEA EBP, -4 [EBP] MOV [EBP], EAX POP EAX MOV EAX, [EAX] LEA EAX, [EDI] [EAX] RET END-CODE ' _USER-CODE TO USER-CODE … ' _USER-CODE >VIRT VALUE USER-CODE … : USER ( "<spaces>name" -- ) \ локальные переменные потока [T] HEADER [I] USER-CODE COMPILE, TC-USER-ALIGNED SWAP , CELL+ TC-USER-ALLOT ; : USER-CREATE ( "<spaces>name" -- ) [T] HEADER [I] USER-CODE COMPILE, TC-USER-ALIGNED SWAP , TC-USER-ALLOT ; </pre> <pre> : USER ( "<spaces>name" -- ) \ локальные переменные потока USER-CREATE 4 USER-ALLOT ; </pre> === Советская реализация === Определение слова USER в FORTH ИТЭФ использовало регистр DI процессора 8086 для указания на базовый адрес переменных USER текущей задачи. 16-битное смещение хранилось в [[поле данных]] такой переменных: <PRE> HEAD 204Q,'USE',322Q,USER, $COL ; USER DW CON,PSCOD $USE LABEL FAR ADD BX, 2 MOV AX, [BX] ADD AX, DI PUSH AX NEXT </PRE>
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице