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



         

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


В MMSFORTH для 8088 команда 4000 ~ Z JMPC передаст управление по адресу 4000, если значение флага Z не равно 0, т. е. если содержимое двух регистров идентично. Мнемоника, используемая для целей ветвления в разных Форт-ассемблерах, варьируется от версии к версии. В этом случае ~ Z JMPC эквивалентно стандартной мнемонике 8088 JNZ. ~ соответствует оператору "NOT", a Z - это оператор, который говорит: "обратите внимание на флаг Z". То есть если значение флага Z не равно О, выполните ветвление. Существует много способов реализации в Форте операций с флагами, вам следует заглянуть в документацию для вашей версии.

Большинство Форт-ассемблеров поддерживают условные переходы и циклы со структурой, почти идентичной словам IF,.. ELSE... THEN, BEGIN...UNTIL и BEGIN...WHILE...REPEAT в словаре FORTH, Фактически имена слов в контекстном словаре ассемблера могут быть теми же самыми (как в примерах MMSFORTH, приведенных ниже); возможность использовать слова с идентичными именами и со сходными, но разными функциями, является главной причиной введения различных контекстных словарей. Подобно своим эквивалентам в словаре FORTH, между словами условных переходов и циклов в ассемблере также помещаются слова, но уже имеющие мнемонику ассемблера. В ассемблере такие слова, как BEGIN...UNTIL вызывают передачи управления в процессе исполнения команд в рамках отдельного слова. Но в отличие их от эквивалентов в словаре FORTH передачи управления происходят не на базе кодов, содержащихся в стеке, а на основе значений флагов. Управляющий флаг должен быть указан в качестве аргумента перед соответствующим словом. Рассмотрим пример слова, которое складывает два числа из стека, если они равны, в противном случае - вычитает. Вы знакомы со всеми этими мнемокодами из предшествующих примеров.

CODE = IF + ELSE - ( n1 n2 - n3) BX POP AX POP ( Извлекаем числа из стека) BX AX СМР ( Сравниваем их) Z IF ( Если Z равен 1. т. е. АХ = BX...) BX AX ADD ( Складываем числа) ELSE ( В противном случае ...) BX AX SUB ( Вычитаем числа) THEN ( И в любом случае ) AX PUSH ( Заносим результат е стек) NEXT END-CODE




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