Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте или
создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Правка может быть отменена.
Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия |
Ваш текст |
Строка 99: |
Строка 99: |
| </PRE> | | </PRE> |
|
| |
|
| В FORTH ИТЭФ слово (FIND) тоже было [[примитив]]ом, вот его определение:
| |
| <PRE>
| |
| 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
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |