Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте или
создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Правка может быть отменена.
Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия |
Ваш текст |
Строка 69: |
Строка 69: |
| 3192 BN1: .DW FROMR, BRAN,BN | | 3192 BN1: .DW FROMR, BRAN,BN |
| 3193 MMO: .DW FROMR, EXIT | | 3193 MMO: .DW FROMR, EXIT |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| : >NUMBER ( ud1 c-addr1 u1 -- ud2 c-addr2 u2 ) \ 94
| |
| \ ud2 - результат преобразования символов строки, заданной c-addr1 u1,
| |
| \ в цифры, используя число в BASE, и добавлением каждой к ud1 после
| |
| \ умножения ud1 на число в BASE. Преобразование продолжается слева
| |
| \ направо до первого непреобразуемого символа, включая символы "+" и "-",
| |
| \ или до полного преобразования строки.
| |
| \ c-addr2 - адрес первого непреобразумого символа или первого символа
| |
| \ за концом строки, если строка была полностью преобразована.
| |
| \ u2 - число непреобразованных символов в строке.
| |
| \ Неоднозначная ситуация возникает, если ud2 переполняется во время
| |
| \ преобразования.
| |
| BEGIN
| |
| DUP
| |
| WHILE
| |
| >R
| |
| DUP >R
| |
| C@ BASE @ DIGIT 0= \ ud n flag
| |
| IF R> R> EXIT THEN \ ud n ( ud = udh udl )
| |
| SWAP BASE @ UM* DROP \ udl n udh*base
| |
| ROT BASE @ UM* D+ \ (n udh*base)+(udl*baseD)
| |
| R> CHAR+ R> 1-
| |
| REPEAT
| |
| ;
| |
| </pre> | | </pre> |
|
| |
|