Редактирование: NUMBER

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 7: Строка 7:
== Ввод слова NUMBER ==
== Ввод слова NUMBER ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]]
== Детали реализации ==
При обработке символьного литерала 'c' слово NUMBER считывает значение литеры из старшего байта переменной [[SAVIN]]. Туда код литеры попадает из слова [[INTERPRET]] — до того, как [[UPPER|все буквы в имени слова переведутся в заглавные]].


== История ==
== История ==
Строка 40: Строка 43:


== Реализация ==
== Реализация ==
При обработке символьного литерала 'c' слово NUMBER считывает значение литеры из старшего байта переменной [[SAVIN]]. Туда код литеры попадает из слова [[INTERPRET]] — до того, как [[UPPER|все буквы в имени слова переведутся в заглавные]].
<pre>
3211 ;#NUMBER
3212 ; NUMBER          ( a −− n )                          Преобразовать строку в целое число n, начиная с a+1.
3213 ; Преобразовать в число последовательность литер, начиная с a+1 с учётом BASE,
3214 ; Байт с адресом a может содержать число литер в строке.
3215 ; Подразумевается, что после числа всегда идёт пробел, а строчные буквы уже преобразованы в заглавные.
3216 ; При обработке 'c' литера берётся из старшего байта переменной SAVIN
3217 ; Слово присутствует ещё в Форте−79, но у нас оно возвращает одну ячейку стека, а не двойную.
3218 LNUMB:          .DB    6
3219                .TEXT  "NUMBER"                                ; ( адрес −− число )
3220                .DW    LFIND
3221 NUMB:          .DW CALL, SEXP,ZSTORE                          ; Обнулить порядок
3222                .DW TRUE,DPL,STORE                              ; DPL := −1
3223                .DW BASE,UAT, ZERO, ROT                        ; 0 значит положительное число
3224                .DW ONEP,DUP, CAT
3225                .DW DUP,LITB
3226                .DB 39                                          ; "'"
3227                .DW EQUAL, ZBRAN,NH2
3228                .DW DROP, SAVIN,CAT, SWAP, TWOP                ; Считать литеру из старшего байта SAVIN
3229                .DW DUP, CAT, LITB
3230                .DB 39                                          ; "'"
3231                .DW SUB, ZBRAN,NH21
3232                .DW DROP, BRAN,ER2
3233 NH21:          .DW ONEP,CAT, BL,EQUAL, ZBRAN,ER2
3234 NH22:          .DW ROT,ROT, DDROP, EXIT                        ; Выход, литера определена
3235 NH2:            .DW DUP, LITB
3236                .DB 35                                          ; "#"
3237                .DW EQUAL, ZBRAN,NH01
3238                .DW DROP, DEC, BRAN,NH03                        ; Десятичное число
3239 NH01:          .DW DUP, LITB
3240                .DB 36                                          ; "$"
3241                .DW EQUAL, ZBRAN,NH02
3242                .DW DROP, HEX, BRAN,NH03                        ; Шестнадцатеричное число
3243 NH02:          .DW LITB
3244                .DB 37                                          ; "%"
3245                .DW EQUAL, ZBRAN,NH04
3246                .DW TWO,BASE,STORE                              ; Двоичное число
3247 NH03:          .DW ONEP
3248 NH04:          .DW DUP,CAT, LITB
3249                .DB 45                                          ; "−"
3250                .DW EQUAL, ZBRAN,NH3
3251                .DW SWAP,ONEP, SWAP,ONEP                        ; 1 значит отрицательное число
3252 NH3:            .DW ONEM
3253 NH4:            .DW ZERO, SWAP, PNUMB
3254                .DW DUP,CAT, BL,SUB, ZBRAN,NH6
3255                .DW DUP,CAT, LITB
3256                .DB 44                                          ; ","
3257                .DW EQUAL, ZBRAN,NEXP
3258                .DW DPL,ZSTORE, PNUMB, DUP,CAT, BL,SUB, ZBRAN,NH6
3259 NEXP:          .DW DPL,AT, ZERO,MAX, SWAP                      ; Теперь числа с E, но без запятой ловятся по DPL
3260                .DW DUP,CAT, LITB
3261                .DB 69                                          ; "E"
3262                .DW EQUAL, ZBRAN,ER1
3263                .DW ONEP, DUP,CAT, LITB
3264                .DB 45                                          ; "−"
3265                .DW EQUAL, ZBRAN,NEMI, ONE, BRAN,NH0
3266 NEMI:          .DW ONEM, ZERO
3267 NH0:            .DW SWAP,ZERO,SWAP, PNUMB, CAT, BL,EQUAL, ZBRAN,ER
3268                .DW SWAP, ZBRAN,NH5, NEGATE                    ; Если был "−", изменить знак порядка
3269 NH5:            .DW SEXP,STORE, DPL,STORE, ZERO
3270 NH6:            .DW DROP, SWAP, ZBRAN,NH7, NEGATE              ; Если был "−", изменить знак числа
3271 NH7:            .DW SWAP, BASE, DUP,UAT,SAVIN,STORE, STORE, EXIT
3272 ER:            .DW DROP
3273 ER1:            .DW DDROP
3274 ER2:            .DW DDROP
3275                .DW BASE, DUP,UAT,SAVIN,STORE, STORE,ZERO,ERROR ; Восстановить систему счисления при ошибке
3276                .DW ZERO, EXIT                                  ; Возвратить 0, если выключена обработка ошибок
</pre>
=== Советская реализация ===
Описание и определение слова NUMBER в ядре ФОРТ-ЕС:
Описание и определение слова NUMBER в ядре ФОРТ-ЕС:
<PRE>
<PRE>
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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