Пятница, 15.12.2017, 09:14
БК-0010.01. Повесть о настоящем компьютере
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Категории каталога
Введение в руководство [2]
Введение [0]
Организация БК-0010 [1]
Раздел 1. Организация БК-0010
Работа с МСД [1]
Раздел 2. Работа с МСД
Системные регистры [1]
Раздел 3. Системные регистры
Системное ПО [1]
Раздел 4. Системное программное обеспечение БК-0010
Прерывания. Приоритет ЦП [1]
Раздел 5. Система прерываний БК-0010. Приоритет процессора
Командные прерывания [1]
Раздел 6. Командные прерывания
ЕМТ БК-0010 [1]
Раздел 7. командные прерывания ЕМТ БК-0010
Коды и ассемблер. Мнемокод. [1]
Раздел 8. Коды и ассемблер. Мнемокод. Формат команды
Способы адресации [1]
Раздел 9. Способы адресации
Команды процессора БК-0010 [1]
Раздел 10. Система команд процессора БК-0010
Псевдокоманды. Метки. Комментарии [1]
Раздел 11. Псевдокоманды ассемблера. Метки. Комментарии
Программирование на ассемблере [1]
Раздел 12. Программирование на ассемблере. Начало. Трансляция программ. Ошибки
Отладка программ [1]
Раздел 13. Отладка программ. Позиционно-независимое программирование. Компановка
Подпрограммы ПЗУ БК-0010 [1]
Раздел 14. Подпрограммы ПЗУ БК-0010
Системная область ОЗУ БК-0010 [1]
Раздел 15. Системная область ОЗУ БК-0010. Некоторые секретные сведения об авторе и МП-клубе
Повышение быстродействия БК-0010 [1]
Раздел 16. Вопросы повышения быстродействия БК-0010
Об использовании ПЗУ [1]
Раздел 17. Полезная подпрограмма. Об использовании ПЗУ
Загадочные регистры [1]
Раздел 18. Загадочные регистры
Штурм системной области [1]
Раздел 19. Продолжаем штурм системной области
Об автозапуске программ [1]
Раздел 20. Об автозапуске программ
Коварные программы [1]
Раздел 21. Коварные программы
Еще о системной области [1]
Раздел 22. О пользе плагиата, или еще о системной области
О псевдокомандах и компановке [1]
Раздел 23. Еще раз о псевдокомандах, метках и компановке
Тук-тук, кто в стеке живет? [1]
Раздел 24. Тук-тук, кто в стеке живет?
Фокал с позиций ассемблера [1]
Раздел 25. Взгляд на фокал с позиций ассемблера
Наш опрос
Оцените мой сайт
Всего ответов: 47
 Каталог статей
Главная » Статьи » Фокал с позиций ассемблера

Взгляд на фокал с позиций ассемблера

Итак, мы освоили ассемблер. Это - специфический машинный язык, и в нем нам многого недостает. Например, математических функций, операций с плавающей точкой, и т.п. Нельзя ли восполнить этот недостаток за счет других средств? Например, в фокале все это есть, и если в вашей ЭВМ стоит ПЗУ фокал-интерпретатора, то вы можете использовать в программах на ассемблере...

...Псевдокоманды и внутренние функции фокала

Для обработки чисел с плавающей точкой в интерпретаторе используются специальные операции и функции, имеющие коды в диапазоне 007000...007377.
При обнаружении кода такой операции происходит командное прерывание по вектору 10 (аналогично прерыванию по вектору 30 при обнаружении кода ЕМТ). Чтобы прерывание было обработано интерпретатором фокала, содержимое вектора 10 должно быть равно: 125636 (10);
000100 (12).

Для работы с числами с плавающей точкой выделены специальные ячейки в системной области фокала (адреса 1710, 1712, 1714), так называемый аккумулятор, или FLAC (от английских слов "float accumulator").

В него в специальном формате записываются числа, причем во FLAC в обязательном порядке помещается один из операндов, участвующих в операции, и ее результат. Помимо FLAC, результат действия команд 007000...007377 Помещается также в 3 регистра (R1, R4, R5) в том же формате. В памяти же (вне аккумулятора) числа хранятся в виде 2 последовательных слов. Слова FLAC носят название <be>, <hord> и <lord>, формат представления чисел во FLAC (в дополнительном коде) следующий:

адрес имя  биты слова (десятичн.)
     
1710 be
(R1)
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
  порядок
    знак порядка
     
1712 hord
(R4)
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
  старшие разряды мантиссы
    знак мантиссы
     
1714 lord
(R5)
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
мл.Разряды мантиссы не используется
     

Формат представления чисел в памяти следующий:

адрес  биты слова (десятичн.)
   
младший адрес
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
мл.Разряды мантиссы   порядок
  знак порядка
   
старший адрес
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
  старшие разряды мантиссы
  знак мантиссы

При выполнении операций над числами 2-словный формат (внешний) преобразуется в 3-словный (внутренний).
Например, целое число представляется во внешнем формате следующим образом:
- число поместить в ячейку старших разрядов мантиссы;
- в ячейку порядка записать число 17.

применяемые операции
операция код  назначение (функция)
fget 7000 загрузка операнда во FLAC
fadd 7010 сложение с FLAC
fsub 7020 вычитание из FLAC
fdiv 7030 деление FLAC
fmul 7040 умножение FLAC
fpow 7050 возведение FLAC в степень
fput 7060 пересылка FLAC по указанному адресу

В операциях участвует один операнд, предварительно помещенный во FLAC, и 2-й, находящийся в памяти. Для указания его адреса приняты 7 видов адресации (код адресации входит в код операции последней цифрой, вместо 0):

вид адресации код  назначение
direct 0 следующее слово есть адрес операнда
iptr 1 адрес операнда - в R2
xptr 2 адрес операнда есть ((R2)+4)
into stack 3 операнд находится в стеке
through stack  4 адрес операнда находится в стеке
immed 5 следующие 2 слова есть операнд
pel 6 (R0) есть адрес операнда

внутренние функции для преобразования чисел во FLAC
функция код назначение
fnor 7070 нормализация числа
fint 7071  целая часть числа ( во FLAC и R1)
fsgn 7072 знак числа
fabs 7073 абсолютное значение числа
fneg 7074 изменение знака числа
fread 7075 чтение массива по адресу (R3) во FLAC (массив состоит из символов цифр в коде asc-ii, в R3 адрес его начала)
fprint 7076 вывод числа с плавающей точкой на экран (в экспоненциальной форме)
fzer 7077 обнуление FLAC
fcode 7200 выполнение операции, код которой содержится в R1

подпрограммы внешних функций фокала
функция адрес    
FSQT 123122   для обращения к подпрограмме функции достаточно поместить операнд во FLAC и вызвать нужную функцию с помощью оператора: jsr PC,@#адрес
результат будет помещен также во FLAC.

для выполнения fran необходимо предварительно обнулить ячейку 1674.

для выполнения fsqt необходимо поместить операнд также по адресу 1704 (с помощью fput).

FABS 126540
FSGN 126544
FITR 126550
FCLK 132240
FSIN 132250
FCOS 132260
FRAN 132550
FCHR 132624
FSBR 132672
FV 132734
FT 132764
FK 133014
FP 133034
FX 133222
FASIN 133402
FACOS 133656
FLOG10 134132
FEXP 134416
FATAN 134632

Приведем пример использования псевдокоманд и функций фокала в ассемблер - программе. Допустим, нужно число ,размещенное по адресу 1100, умножить на 3, прибавить число, размещенное по адресу 1200, и вывести результат на экран, сохранив его в то же время для дальнейших вычислений по адресу 1300.

Программа, размещенная по любому адресу, может иметь вид:

MOV#125636,@#10
MOV #100,@#12

.#:7000,1100,7045,17,3,7010,1200,7060,1300,7076

Воспользовавшись таблицами операций, адресации и функций, легко понять, что она делает. Нужно помнить, что фокал может использовать некоторые ячейки своей системной области (1400...1744). Следовательно, информация, размещенная по этим адресам ассемблером, может быть разрушена при обращении к интерпретатору.
Обращение к фокал - интерпретатору из программы в кодах не создает заметных преимуществ в скорости вычислений, по сравнению с фокал - программой.

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

ограничитель код  
пробел 200 все остальные символы фокал - программы хранятся в памяти в том виде, в котором они были введены с клавиатуры.
+ 201
- 202
 / 203
* 204
 ^ 205
( 206
 [ 207
< 210
 ) 211
] 212
> 213
, 214
; 215
ВК+ПС 216
= 217

Строки фокал - программы хранятся в памяти в том порядке, в котором они вводились с клавиатуры.
строка, введенная или вызванная на модификацию последней, оказывается в конце текста, текст при этом смыкается, как и при удалении строки. В начале строки помещены 2 служебных слова:
- смещение к началу следующей строки в дополнительном коде;
- номер строки: мл. Байт равен целому от произведения дробной части номера строки на 256д, ст.Байт равен целой части номера строки.
в последней строке смещение указывает на нулевой адрес, что воспринимается интерпретатором как указание на конец программы.

Для "холодного входа" в фокал из мсд (без стирания памяти) можно выполнить:
Щ 120020А26Д0П 262А177777И стоп

В ячейке 1744 системной области фокала помещено число - адрес верхней границы памяти, доступной фокал - интерпретатору.
Любые данные, помещенные "выше" этой границы, защищены от затирания текстом фокал - программы или переменными. Содержимое ячейки изменяется при исполнении операции нр/сбр (переход в режим РП) в непосредственном режиме, память переменных очищается. Этого не происходит при переходе в режим РП посредством функции fchr[140].

Фокал - интерпретатор размещает переменные в памяти, свободной от текста программ, вычисляя по имени и индексам переменной так называемую хеш-функцию. Переменные с одинаковыми (похожими) именами имеют и близкие хеш-функции, а следовательно, размещаются в памяти по одному адресу. Однако, если адрес занят, запись переменной производится на первое свободное место, а поиск ее ведется после вычисления хеш-функции методом цепочек. Для ускорения работы фокал-программы с большим количеством переменных надо давать им по возможности непохожие имена. Это особенно важно при работе с массивами.

Автор выражает благодарность А. Макееву (г.Ленинград), С.Никанорову (г.Керчь) и прочим авторам, выполнившим исследования фокал - интерпретатора, и предоставившим ему материалы, что значительно облегчило написание данного раздела.

Категория: Фокал с позиций ассемблера | Автор: ЗАЛЬЦМАН Ю.А., МП-КЛУБ, г.АЛМА-АТА
Просмотров: 1218 | Рейтинг: 4.0/1 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Используются технологии uCoz
Форма входа

Поиск
Друзья сайта
Статистика