(FIND)
(FIND) — архаичное слово Каллисто.
(FIND) ( a1 a2 −− a3 c 1 | 0 ) Поиск слова a1 в словаре a2. Если найдено, вернуть nfa и байт счётчика.
Искать слово a1 в наборе слов a2. При успехе дать NFA его статьи и c - байт длины с флагами.
Ввод слова (FIND)
В режиме NUM последовательно нажмите клавиши ШГ→ Р-ГРД-Г П 7 4 K P ШГ←
(FIND) в fig-FORTH Release 1 glossary, май 1979 (англ.)
(FIND) addr1 addr2 --- pfa b tf (ok) addr1 addr2 .--- ff (bad) Searches the dictionary starting at the name field address addr2, matching to the text at addr1. Returns parameter field address, length byte of name field and boolean true for a good match. If no match is found, only a boolean false is left.
Реализация
Слово (FIND) в ФОРТ-ЕС было примитивом и устроено сложнее, чем в Каллисто и fig-Форте. Вот его описание и определение:
(FIND) * -1,AN,,,A1,T->CFA,C,TF/FF ИСКАТЬ СЛОВО T 34 В СПИСКАХ A1,,,AN ПРИ УСПЕХЕ ДАТЬ CFA ЕГО СТАТЬИ И C - БАЙТ ДЛИНЫ С ПРИЗНАКАМИ Экран номер 34 ( 31.03.86 (FIND/ ) CODE (FIND) ( -1,AN,..,,A1,Т->СFA,С,TF/FF ) RW2 POP, RW2 RMASK NR, RW2 RFORTH AR, ( ОБРАЗЕЦ) 0 0 SR, 0 0 (, 0 RW2 IC, 0 LENG1MSK N, ( ДЛИНА) 1 1 SR, 1 0 BCTR, BEGIN, RW1 PULL, ( ВХОД В ОЧЕРЕДНОЙ СПИСОК СЛОВ) 2 =F В, BEGIN, RW1 RFORTH AR, 14 0 (, 0 RW1 IC, 14 LEHGMASK N, 14 0 CR, ?E IF, 14 4 =F EX, 3 =F BE, THEN, 14 LENG1MSK N, RW1 2 (, 14 RW1 LH, 2 =H RW1 RMASK NR, ?Z UNTIL, RSTACK RTWO AR, 1 FIRST CH, ?E UNTIL, PUTRW1 B, BEGIN, RSTACK RTWO AR, 3 =H 1 FIRST CH, ?E UNTIL, 0 0 (, 0 RW1 IC, RW1 RFORTH SR, RW1 4 (, 14 RW1 LA, RW1 PUT, 0 PUSH, RW1 1 LR, PUSHRW1 B, 4 =H 1 (, 1 RW1 ), 1 (, RW2 CLC, END-CODE
В FORTH ИТЭФ слово (FIND) тоже было примитивом, вот его определение:
HEAD 206Q,'(FIND',251Q,PFIND ; PFIND ; Адрес строки NFA => PFA длина TRUE/FALSE POP AX POP CX PUSH BP ; сохранение содержимого регистров PUSH SI PUSH DI MOV SI, CX SUB BP, BP MOV DI, AX MOV DX,WORD PTR [SI] AND DX, 77577Q CLD ; DF=0 (вперед) FAST: MOV CX,WORD PTR [DI] AND CX, 77477Q CMP DX, CX JE SLOW MATCH: CMP WORD PTR [DI], 0 JS $SIG ; BPL INC DI JMP MATCH $SIG: ADD DI, 2 CMP WORD PTR [DI],0 JE FAIL MOV DI,WORD PTR [DI] JMP FAST SLOW: MOV BP,WORD PTR [DI] MOV BX, SI JMP SLOW1 $LOOP: INC BX MOV AX,WORD PTR [BX] MOV CX,WORD PTR [DI] AND CX, 77777Q CMP AX, CX JNE MATCH SLOW1! INC DI TEST WORD PTR -1[DI],100000Q JE $LOOP MOV DX, BP ADD DI, 5 HOV AX, DI POP DI ; восстановление содержимого регистров POP SI POP BP SUB AX, 2 PUSH AX AND DX, 377Q ; байт длины PUSH DX ; в стек JMP TRUE ; Установка флага "Найдено" FAIL: POP DI POP SI POP BP JMP FALSE
Ссылки
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |