Редактирование: (FIND)

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш 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>


== Ссылки ==
== Ссылки ==
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)