−TRAILING: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
Строка 61: | Строка 61: | ||
2403 DTRAI2: RM0 KM8 | 2403 DTRAI2: RM0 KM8 | ||
2404 KGOTO9 | 2404 KGOTO9 | ||
</pre> | |||
Реализация из SP-Forth 4.20: | |||
<pre> | |||
\ ================================================================ | |||
\ Строки | |||
CODE -TRAILING ( c-addr u1 -- c-addr u2 ) \ 94 STRING | |||
\ Если u1 больше нуля, u2 равно u1, уменьшенному на количество пробелов в конце | |||
\ символьной строки, заданной c-addr и u1. Если u1 ноль или вся строка состоит | |||
\ из пробелов, u2 ноль. | |||
OR EAX, EAX | |||
JZ SHORT @@1 | |||
MOV EDX, EDI | |||
MOV EDI, [EBP] | |||
ADD EDI, EAX | |||
LEA EDI, -1 [EDI] | |||
MOV ECX, EAX | |||
A; B0 C, 20 C, \ MOV AL, # 20 | |||
STD | |||
REPZ SCAS BYTE | |||
JZ SHORT @@2 | |||
INC ECX | |||
@@2: MOV EAX, ECX | |||
MOV EDI, EDX | |||
CLD | |||
@@1: RET | |||
END-CODE | |||
</pre> | </pre> | ||
Текущая версия от 17:09, 10 ноября 2017
−TRAILING — стандартное слово Каллисто. Определить длину строки без завершающих пробелов.
−TRAILING ( a u1 −− a u2 ) Отсечь конечные пробелы.
Команда ADR N −TRAILING сокращает значение N на число пробелов между последним значащим символом и адресом ADR+N. Этот оператор может использоваться перед TYPE и особенно полезен при печати на старых принтерах, так как исключает холостые пробеги каретки.
Ввод слова −TRAILING[править]
В режиме NUM последовательно нажмите клавиши − Р-ГРД-Г 2 × ШГ← 7 − 7 4 БП
Для возврата в режим NUM нажмите синюю клавишу P .
−TRAILING в стандарте ANS Forth[править]
17.6.1.0170 -TRAILING "dash-trailing" STRING ( c-addr u1 -- c-addr u2 ) Если u1 больше чем нуль, u2 равно u1 минус число пробелов в конце символьной строки, определенной c-addr u1. Если u1 нуль или вся строка состоит из пробелов, u2 нулевой.
История[править]
Слово −TRAILING взято в Каллисто из Форта, в котором входит во все стандарты, включая fig-Форт, и не менялось с 1979 года. Это классическое слово, во многом определяющее образ мышления программистов на Форте.
В Форте FSP88 и FORTH ИТЭФ это слово было известно под именем -TRAIL
−TRAILING в предыдущем стандарте Forth-83 (англ.)[править]
-TRAILING addr +n1 -- addr +n2 79 "dash-trailing" The character count +n1 of a text string beginning at addr is adjusted to exclude trailing spaces. If +n1 is zero, then +n2 is also zero. If the entire string consists of spaces, then +n2 is zero.
−TRAILING в стандарте Forth-79 (англ.)[править]
-TRAILING addr n1 -- addr n2 148 "dash-trailing" Adjust the character count n1 of a text string beginning at addr to exclude trailing blanks, i.e., the characters at addr+n2 to addr+n1-1 are blanks. An error condition exists if n1 is negative.
−TRAILING в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
-TRAILING addr n1 --- addr n2 Adjusts the character count n1 of a text string beginning address to suppress the output of trailing blanks. i.e. the characters at addr+n1 to addr+n2 are blanks.
Реализация[править]
2386 ;#MinusTRAILING 2387 ; −TRAILING ( a U1 −− a U2 ) Отсечь конечные пробелы. 2388 ; Преобразует число литер U1 в строке, начинающейся с адреса a, в число U2, не включающее 2389 ; число пробелов, которые имеются в конце строки. Адрес a остаётся неизменным. 2390 ; Мы считаем, что дело происходит в области данных. 2391 LDTRAI: .DB 9 2392 .TEXT "−TRAILING" 2393 .DW LDEC 2394 DTRAI: .DW JDTRAI 2395 JDTRAI: RM3 M8 M5 KRM5 2396 1 EE 4 − KX>=09 2397 KRM8 M0 +/− KX<09 2398 − M1 2399 DTRAI1: KRM1 32 − 2400 FX=0 DTRAI2 2401 FL0 DTRAI1 2402 CX M0 2403 DTRAI2: RM0 KM8 2404 KGOTO9
Реализация из SP-Forth 4.20:
\ ================================================================ \ Строки CODE -TRAILING ( c-addr u1 -- c-addr u2 ) \ 94 STRING \ Если u1 больше нуля, u2 равно u1, уменьшенному на количество пробелов в конце \ символьной строки, заданной c-addr и u1. Если u1 ноль или вся строка состоит \ из пробелов, u2 ноль. OR EAX, EAX JZ SHORT @@1 MOV EDX, EDI MOV EDI, [EBP] ADD EDI, EAX LEA EDI, -1 [EDI] MOV ECX, EAX A; B0 C, 20 C, \ MOV AL, # 20 STD REPZ SCAS BYTE JZ SHORT @@2 INC ECX @@2: MOV EAX, ECX MOV EDI, EDX CLD @@1: RET END-CODE
Советская реализация[править]
Слово −TRAILING в ФОРТ-ЕС было примитивом. Вот его описание и определение:
-TRAILING A,N1->A,N2 ОТСЕЧЬ КОНЕЧНЫЕ ПРОБЕЛЫ 41 Экран номер 41 ( 31.03.86 -TRAILING ' ['] [COMPILE] LOAD THRU ;S --> ) CODE -TRAILIN6 ( A,N1- >A,N2) 14 LHRW12 BAL, RW1 RMASK NR, RW1 RFORTH AR, 0 RW1 LR, RW1 RW2 AR, BEGIN, RW1 0 CR, 1 =F BNH, RW1 0 BCTR, 0 (, RW1 64 CLI, ?NE UNTIL, 0 0 BCTR, 1 =H RW1 0 SR, PUTRW1 В, END-CODE
В FORTH ИТЭФ слово −TRAILING называлось −TRAIL и также было примитивом. Вот его определение:
HEAD 206Q,'-TRAI',314Q,DTRAI ; -TRAIL POP CX POP BX PUSH BX ADD BX, CX COMPA: DEC BX CMP BYTE PTR [BX], 32 ; BLANK ? JNE NO LOOP COMPA NO: PUSH CX NEXT
Ссылки[править]
- Исходный текст слова −TRAILING в Каллисто Классик 1.0
- Слово −TRAILING (dash-trailing) в стандарте ANS Forth (англ.)
- Слово −TRAILING (dash-trailing) в черновике Forth 200x (англ.)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- I/O and You в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |