Текущая версия |
Ваш текст |
Строка 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> |