Язык программирования Форт



         

Глава 16. Программирование на форт-ассемблере - часть 16


Важным моментом здесь является то, что IF выполняет свою работу, основываясь на значении когда в регистре состояния Z, заданном оператором Z. Эквивалентная функция была бы выполнена "стандартным" Форт-описанием: : =IF+ELSE- ( n1 n2 -- n3) 2DUP = IF + ELSE - THEN ;

Хотя последнее описание намного короче и легче читается, в MMSFORTH на IBM PC при исполнении 100 000 раз оно требует 19 с, в то время как ассемблерная реализация занимает только 5 с. Если быстродействие важно, имеет смысл описать критические по времени слова, используя ассемблер.

Вот пример ассемблерного цикла BEGIN...UNTIL. Здесь перемножаются два числа в стеке путем последовательного их сложения.

CODE *NEW ( n1 n2 -- n3) 0 # BX MOV ( Обнуление ВХ, ВХ - счетчик) 0 # CX MOV ( Обнуление CX, CX - аккумулятор) AX POP DX POP ( Извлекаем числа из стека) BEGIN ( Начало бесконечного цикла) BХ INC ( Добавляем 1 к ВХ) DX CX ADD ( Сложение DX и CX) AX ВХ СМР ( Установка Z=1 при равенстве) Z UNTIL ( Продолжение цикла, пока не будет AX = ВХ) CX PUSH (Занесение результата в стек) NEXT END-CODE

Теперь вы понимаете, как работает *NEW. Это не самый быстрый способ умножения чисел, действие его на 10% медленнее, чем применения слова *, но это хороший пример использования циклов в ассемблере. Вы узнаете больше о применении циклов и передач управления из упражнений.

Упражнения

1. Микропроцессор Z-80, подобно 8088, характеризует номера 16- разрядных регистров 3-разрядными кодами, которые обычно представляются восьмеричным числом в середине кода команды. Коды регистров двойной длины: ВС - 0, DE - 2, HL - 4 и AF-6. Таким образом, DE POP будет соответствовать коду 11010001 или 321 в восьмеричном виде, в то время как HL POP даст 11100001 или 341 в восьмеричной форме. Опишите константы для номеров регистров. Теперь опишите слово, аналогичное 1ARGMAKE. которое может быть использовано для описания POP и PUSH. Производные слова с кодом регистра а качестве аргумента должны компилировать правильные машинные коды.


Содержание  Назад  Вперед