Шитый код: различия между версиями

46 байт добавлено ,  11 лет назад
Нет описания правки
м (робот добавил: es:Código enhebrado)
Основное представление программы при использовании шитого кода — [[массив]] вызовов [[Подпрограмма|подпрограмм]]. Реализация шитого кода, способ хранения этих вызовов может быть различной. Этот код может обрабатываться интерпретатором (за которым утвердилось название ''адресный интерпретатор''), или может быть простой последовательностью машинных инструкций вызова подпрограммы. Некоторый набор базовых подпрограмм виртуальной машины, использующей шитый код, реализуется в виде подпрограмм, написанных на обычном [[Машинный код|машинном коде]].
 
Шитый код наиболее широко известен как техника, используемая при реализации [[Forth (язык программирования)|Форта]]. Однако он также применялся при реализации языка программирования [[B (язык программирования)|B]] (предшественника [[C (язык программирования)|C]]). Он также иногда используется при реализации [[Бейсик]]а, [[COBOL]]а и других языков программирования.
 
== Особенности шитого кода ==
</pre>
 
В прямом шитом коде любое определение (например Sub) начинается машинным кодом. Интерпретатор должен запомнить в стеке возвратов прошлое значение счетчикасчётчика инструкций (это не PC, или IP, а другой, который перемещается по коду Форта), а сделать текущим свой адрес возврата. Теперь он станет новым указателем на код Форта. В ряде версий для Intel [[x86]] используется регистр SI. При чтении данных по косвенному адресу в этом регистре, его значение меняется автоматически.
 
NEXT — это последовательность, используемая вместо return. Если мы завершаем Sub1, то NEXT обращается к счетчикусчётчику инструкций Форта, изменяет его на размер кода и на следующем шаге уже исполняется первая машинная команда из Sub2. Скорость перехода получается не хуже, чем у пары команд return-call. Но переход NEXT в специализированном процессоре может быть выполнен как одна команда.
 
EXIT — восстанавливает предыдущее значение счетчика команд и переходит по соответствующему адресу.
Анонимный участник