THRU

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

THRU — стандартное слово Каллисто. Загрузить несколько экранов.

THRU           ( c1 c2 −− )                         Интерпретировать экраны с номерами от c1 до c2 включительно.

Ввод слова THRU

В режиме ЛАТ последовательно нажмите четыре клавиши  2   ПП   ×   3 

THRU в стандарте ANS Forth

7.6.2.2280   THRU                                                     BLOCK EXT
            ( i*x u1 u2 -- j*x )
            LOAD последовательные блоки из запоминающего устройства с номерами 
            с u1 по u2. Другое состояние стека из-за интерпретации слов с 
            помощью LOAD.

История

THRU в предыдущем стандарте Forth-83 (англ.)

         THRU         u1 u2 --                      M,83                 
              Load consecutively the blocks from u1 through u2.

THRU в стандарте Forth-79 (англ.)

THRU           n1 n2 --
    Load consecutively the blocks from n1 through n2.

Реализация

3595 ;#THRU
3596 ; THRU             ( c1 c2 −− )                         Интерпретировать экраны с номерами от c1 до c2 включительно.
3597 LTHRU:          .DB     4
3598                 .TEXT   "THRU"                  ; ( первый последний −− )
3599                 .DW     LSEMIS
3600 THRU:           .DW CALL, OVER,SUB,ONEP, XFOR,THRU2
3601 THRU1:          .DW DUP,LOAD, ONEP, XNEXT,THRU1
3602 THRU2:          .DW DROP, EXIT

Советская реализация

Описание и определение слова THRU в ФОРТ-ЕС:

THRU     + +N1,+N2-> ИНТЕРПРЕТИРОВАТЬ ЭКРАНЫ С НОМЕРАМИ        41
             ОТ +N1 ДО +N2 ВКЛЮЧИТЕЛЬНО

                    Экран номер 41
( 31.03.86  -TRAILING  ' ['] [COMPILE] LOAD THRU ;S  --> )

: THRU ( N1,N2->)  ИНТЕРПРЕТИРОВАТЬ БЛОКИ ОТ N1 ДО N2)
  1+ SWAP DO I LOAD LOOP ;

colorForth (cf2019.nasm 2019 Sep 14)

; : THRU ( f l -- )   1+ SWAP DO  I LOAD  LOOP ;
thru_:  ; ( first last -- )   \ load from the first to the last block
    add _TOS_, 0x02
    mov _SCRATCH_, _TOS_
    _DROP_                          ; TOS = first, SCRATCH = last
    mov ecx, _SCRATCH_
    sub ecx, _TOS_                  ; ecx = count
    jz .end                         ; exit if count is zero
    jc .end                         ; exit if count is negative
    shr ecx, 1                      ; divide by 2, as we skip 2 blocks each time round the loop
.back:
    _DUP_
    _DUP_   ; just to be safe...
    push ecx
    push _SCRATCH_
    call _load_
    pop _SCRATCH_
    pop ecx
    _DROP_  ; just to be safe...
    add _TOS_, 0x02
    loop .back
.end:
    _DROP_
    ret

Ссылки


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


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