ENCLOSE: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 30: Строка 30:
   2 =F BZ,  14 1 (, 0 14 LA, 0 RW2 CR,  ?E UNTIL,
   2 =F BZ,  14 1 (, 0 14 LA, 0 RW2 CR,  ?E UNTIL,
2 =Н  1 PUSH, RW1 14 LR,  PUSHRW1 В, END-CODE
2 =Н  1 PUSH, RW1 14 LR,  PUSHRW1 В, END-CODE
</PRE>
В FORTH ИТЭФ слово ENCLOSE называлось ENCL и также было [[примитив]]ом, вот его определение:
<PRE>
  ;        ******************
            HEAD    204Q,'ENC',314Q,ENCL                ; ENCLOSE
            POP  AX        ; разделитель
            POP  CX        ; начальный адрес
            MOV  BX, CX
  A:        CMP  BYTE PTR  [BX], AL ; обход разделителей в начале
            JNE  NOTEQ
  AAA:      INC  BX
            JMP  A
  NOTEQ:    CMP  BYTE PTR  [BX], 15Q
            JE    AAA
            CMP  BYTE PTR  [BX], 12Q
            JE    AAA
            MOV  DX, BX              ; начало лексемы
            PUSH  DX
  AA:      CMP  BYTE PTR  [BX],  0
            JE    ZZZ                  ; если нуль
            CMP  BYTE PTR  [BX], AL  ; не нуль, ищем конец лексемы
            JE    QW
            INC  BX
            JMP  AA
  EQW:      MOV  AX, BX
            SUB  BX, DX
            PUSH  BX
            SUB  AX, CX
            INC  AX
            PUSH  AX
            NEXT
  ZZZ:      CHP  BX, DX
            JNE  EQW
            INC  BX
            JMP  EQW
</PRE>
</PRE>



Версия от 10:01, 27 марта 2016

ENCLOSE (окружить) — стандартное слово Каллисто.

Ввод слова ENCLOSE

В режиме ЛАТ последовательно нажмите клавиши  ИП   4   С/П      5   1   ИП 

ENCLOSE в fig-FORTH Release 1 glossary, май 1979 (англ.)

ENCLOSE addr1 c -- addr1 n1 n2 n3
       The text scanning primitive used by WORD. From the text address
       addr1 and an ascii delimiting character c, is determined the byte
       offset to the first non-delimiter character n1, the offset to the
       first delimiter after the text n2, and the offset to the first
       character not included.
       This proceedure will not process past an ascii 'null', treating it
       as an unconditional delimiter.

Реализация

Слово ENCLOSE в ФОРТ-ЕС было примитивом. Вот его описание и определение:

ENCLOSE  * A,C->A,N1,N2,N3 ВВОД СЛОВА                           27

                     Экран номер 27
( 31.03.66    ENCLOSE  WORD )

CODE ENCLOSE ( A,C->A,N1,N2,N3) 14  LHRW12 BAL, RW1 RMASK NR,
  RW1 RFORTH AR,  14 14 SR,   0 0 SR,
 BEGIN,   0 0 (, 14  RW1 IC,   0 0 LTR,   2 =F  BZ,
     14 1 (, 0 14 LA, 0 RW2 CR, ?NE UNTIL,  14 0 BCTR,
2 =Н 14 PUT,
BEGIN,   1 14 LR,  0 0 (, 1 RW1 IC, 0 0 LTR,
  2 =F BZ,  14 1 (, 0 14 LA, 0 RW2 CR,   ?E UNTIL,
2 =Н  1 PUSH, RW1 14 LR,   PUSHRW1 В, END-CODE

В FORTH ИТЭФ слово ENCLOSE называлось ENCL и также было примитивом, вот его определение:

   ;         ******************

             HEAD    204Q,'ENC',314Q,ENCL                 ; ENCLOSE
             POP   AX         ; разделитель

             POP   CX         ; начальный адрес
             MOV   BX, CX
   A:        CMP   BYTE PTR  [BX], AL ; обход разделителей в начале
             JNE   NOTEQ
   AAA:      INC   BX
             JMP   A
   NOTEQ:    CMP   BYTE PTR  [BX], 15Q
             JE    AAA
             CMP   BYTE PTR  [BX], 12Q
             JE    AAA
             MOV   DX, BX               ; начало лексемы
             PUSH  DX
   AA:       CMP   BYTE PTR  [BX],  0
             JE    ZZZ                  ; если нуль
             CMP   BYTE PTR  [BX], AL  ; не нуль, ищем конец лексемы
             JE    QW
             INC   BX
             JMP   AA
   EQW:      MOV   AX, BX
             SUB   BX, DX
             PUSH  BX
             SUB   AX, CX
             INC   AX
             PUSH  AX
             NEXT
   ZZZ:      CHP   BX, DX
             JNE   EQW
             INC   BX
             JMP   EQW


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.