Язык Форт и его реализации

         

Логические операции - часть 2


: <= ( A,B ---> A <= B ) SWAP < NOT ; : >= ( A,B ---> A >= B ) SWAP > NOT ; : <> ( A,B ---> A <> B ) = NOT ;

Для сравнения 16-разрядных чисел без знака имеется слово U< A,B --> A < B. Эта операция обычно используется для сравнения адресов, которые лежат в диапазоне от 0 до 65535. Буква U (от UNSIGNED — беззнаковый) в ее мнемонике говорит о том, что операнды рассматриваются как числа без знака.

Ввиду частого использования и возможности непосредственной реализации на многих существующих ЭВМ в обязательный набор слов включены одноместные операции сравнения с нулем:

0< A ---> A < 0 0= A ---> A = 0 0> A ---> A > 0

При этом слово 0= можно использовать вместо NOT как операцию логического отрицания, и в отличие от NOT оно будет правильно работать при любых представлениях логического значения ИСТИНА.

Описанные выше двухместные операции сравнения естественным образом выражаются через сравнения с нулем:

: < ( A,B ---> A < B ) - 0< ; : = ( A,B ---> A = B ) - 0= ; : > ( A,B ---> A > B ) - 0> ;

Стандартное расширение двойных чисел имеет аналогичные слова для сравнения 32-разрядных значений:

D0= AA ---> AA = 0 D< AA,BB ---> AA < BB D= AA,BB ---> AA = BB DU< AA,BB ---> AA < BB

Слова D< и DU< различаются тем, что первое рассматривает свои операнды как числа со знаком, а второе — как числа без знака. Для слов D0= и D= такое различие несущественно, их, например, можно определить так:

: D0= ( AA ---> AA = 0 ) OR 0= ; : D= ( AA,BB ---> AA = BB ) D- D0= ;

Слово OR (логическое ИЛИ) в определении слова D0= логически складывает старшую и младшую половины исходного 32-разрядного значения. Нулевой результат будет получен тогда и только тогда, когда исходное значение было нулевым. Следующее слово 0= преобразует этот результат к логическому значению в стандартном представлении. Исполнение слова D= состоит в вычислении разности его операндов в сравнении этой разности с нулем.




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