(примечание gid: Эта статья была сравнена с аналогичной статьёй в журнале ИНФО №5 1989, и дополнена и исправлена в соответствии с ней, поэтому она имеет вид не совсем тот, что был в журнале. Так же были исправлены ошибки, опубликованые в ИНФО №3 1990, а так же в журнале "ВТ и её П" №9 1989 (не распознавалось))

Использование только ФОКАЛа иногда препятствует эффективному решению задач на ЭВМ. Это особенно проявляется при программировании динамических графических изображений или при управлении внешними устройствами. Некоторые задачи вообще невозможно решить, оставаясь в рамках ФОКАЛа, например, создание алфавита пользователя или программирование звуковых эффектов. Однако с помощью ФОКАЛа можно создавать разнообразные программы как чисто вычислительного, так и игрового характера, используя при этом графические возможности и доступ к порту ЭВМ.

С. ГВОЗДЕВ, Г. ЭРНЕСТСОНС

Использование плавающей арифметики ФОКАЛа в БК-0010

Микро-ЭВМ «Электроника БК-0010», получившая у нас большое распространение, оснащалась до последнего времени интерпретатором с языка ФОКАЛ [1], выполненным в микросхеме К1801РЕ2-018 (или К1801РЕ2-084 в комплекте с классом КУВТ-86). С помощью Фокала можно создавать разнообразные программы как чисто вычислительного, так и игрового характера, используя графические возможности и доступ к порту БК.

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

Применение подпрограмм пользователя в рамках так называемого FOCODa (автор В.Н. Андреев, Москва) для названных задач не всегда даёт желаемый результат. Для этого предпочтительнее программировать исключительно в кодах ЭВМ, полностью отказываясь от ФОКАЛа, получая в качестве компенсации в своё распоряжение все возможности БК-0010.

Программирование в кодах позволяет не только повысить скорость исполнения программы, но и сэкономить память, тем более что этот ресурс в БК-0010 крайне ограничен.

Однако, отказываясь от ФОКАЛа приходится считаться с отсутствием в системном программном обеспечении ЭВМ арифметики чисел с плавающей запятой и библиотеки подпрограмм для вычисления стандартных функций.

Вниманию читателей предлагается простой способ доступа на уровне кодов ЭВМ к находящимся в ПЗУ ФОКАЛ-арифметике и встроенным функциям ФОКАЛа. В этом случае удаётся сэкономить память ЭВМ, затраты которой были бы значительными, если в неё вводить собственный вариант программ для работы с числами с плавающей запятой. Так объём программ в ПЗУ, реализующих ФОКАЛ-арифметику, составляет 2,7 кбайт.

Как уже отмечалось выше, программирование в кодах позволяет получить выигрыш при решении задачи относительно её реализации на Фокале. Для иллюстрации рассмотрим пример, часто встречающийся при сборе данных. Предположим, что некоторое устройство, например, измеритель температуры, подключено к порту БК-0010 и по приказу ЭВМ выдаёт на него двоичные числа, пропорциональные значению температуры. Таким приказом является установка младшего бита порта на короткое время в единицу. Пусть необходимо произвести 1000 измерений и поместить их значения в массив Т(i). Программа на ФОКАЛе, производящая указанные действия, будет выглядеть следующим образом.

10.10 X FP(1,177777); С Очистка регистра вывода
10.20 S N=1000; С Установка числа измерений
10.30 F I=1,N; X FP(2,1); X FP(1,1); S T(I)=FP(0,177777)
10.40 Q

В этой программе около 95% машинного времени уходит на интерпретацию программы. Соответствующая программа в машинных кодах работает в 40-50 раз быстрее. Кроме увеличенной скорости, мы имеем выигрыш в памяти. Дело в том, что для хранения числа в ФОКАЛе отводится 8 байтов, в то время как фактически число размещается в 4 байтах. Таким образом, выигрыш при хранении данных равняется 4 байтам на каждое число.

Отметим что выигрыш в скорости тем значительнее, достигая 2-3 порядков, чем более просты математические операции, которые используются в ФОКАЛ-программе. Однако даже для вычисления сложных функций, типа FSIN(X), программа в кодах работает в 1,5 раза быстрее.

Программу в кодах, аналогичную ФОКАЛ-программе, мы приведём ниже, после разбора арифметики чисел с плавающей запятой.

ФОКАЛ-арифметика

В связи с отсутствием в публикациях сведений о ФОКАЛ-арифметике дадим краткий обзор на эту тему. Будем считать, что читателю известна архитектура ЭВМ и элементы программирования на АССЕМБЛЕРЕ (см., например [2]).

В ФОКАЛЕ реализована арифметика вещественных чисел с плавающей запятой одинарной точности. В памяти ЭВМ числа представлены в двухсловном формате. Порядок записывается в одном байте, а мантисса занимает 3 байта. Отрицательный порядок и мантисса кодируются в дополнительном коде.

младшие разряды мантиссы

порядок

старшие разряды мантиссы

Арифметические операции с числами производятся в трёхсловном сумматоре, реализованном программно и размещённом в памяти ЭВМ в адресах 1710, 1712, 1714.

Кодирование операций осуществляется с помощью псевдокоманд, при встрече которых в тексте программы происходит прерывание по вектору 10 (прерывание по коду резервной команды) и управление передаётся на обработку этих команд.

Арифметические операции в ФОКАЛе можно условно разделить на двухместные (сложение, умножение) и одноместные (целая часть, абсолютная величина).

Первым операндом в двухместных операциях является содержимое сумматора, второй операнд выбирается из памяти ЭВМ в зависимости от метода адресации. Результат операции всегда помещается в сумматор.

Двухместная операция кодируется четырёхзначным восьмеричным числом 70XY, где X и Y - восьмеричные цифры, означающие: X - код операции, Y - метод адресации операнда (табл. 1,2). При описании арифметических операций и функций используются следующие обозначения: S - сумматор, oр - операнд.

Таблица 1

Код Х

Операция

Мнемоника

0

ор → S

FGET

1

S + ор → S

FADD

2

S - ор → S

FSUB

3

S / ор → S

FDIV

4

S * ор → S

FMUL

5

S ¬ ор → S

FPOW

6

S → ор

FPUT

 

Таблица 2

Код У

Адрес операнда

Мнемоника

0

Адрес в следующем слове

@#op

1

Адрес в R2

(R2)

2

(R2)+4, адрес в R2

+(R2)

3

Операнд в вершине стека

(SP)

4

Адрес в вершине стека

@(SP)

5

Операнд в следующих двух словах

# op

6

Не работает

 

Типы адресации достаточно очевидны и ясны из обозначений табл. 2. Однако есть нюансы относительно традиционных методов адресации в архитектуре ЭВМ. Так, использование адресации с кодом 2 (автоинкрементная адресация) имеет ту особенность, что изменение содержимого регистра R2 производится до операции, а не после, как обычно при выполнении машинных команд. При размещении операнда в стеке (адресация с кодом 3) программист сам должен следить за указателем стека.

Псевдокоманды с кодом 707Y задают одноместные операции, выполняющиеся над содержимым сумматора (табл. 3).

Таблица 3

Команда

Операция

Мнемоника

7070

Нормализация числа в S

FNOR

7071

Целая часть S → R1

FINT

7072

Sgn(S) → S

FSGN

7073

Abs(S) → S

FABS

7074

-S → S

FNEG

7075

Перевод числа, заданного символьной строкой в S

FREAD

7076

Вывод S на экран

R2 - формат вывода

FPRINT

7077

0 -> S

FZERO

При выполнении псевдокоманд содержимое регистров сохраняется, кроме тех случаев, когда изменение содержимого регистров обусловлено самой псевдокомандой. Необходимо отметить, что признаки NZVC после выполнения псевдокоманд не устанавливаются в соответствии с результатом операции.

Проиллюстрируем на примерах использование описанных операций. Программы в кодах ЭВМ приводятся в соответствии с мнемоникой, принятой в АССЕМБЛЕРе. В приводимых примерах значащими являются только столбцы с адресом памяти и содержимым слова по данному адресу. Поля с мнемоникой команд и комментарием приводятся только в целях облегчения понимания.

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

Адрес   Содержимое Мнемоника       Комментарий
002000  007000    FGET @#А        ; Операция FGET.
002002  002100                    ; Адрес операнда.
-------------------------------------------------------
002100  000002 А:                 ; Число 2.0 в формате
002102  040000                    ; с плавающей запятой.

Та же самая операция возможна с адресацией через регистр R2.

002000  012702    MOV #A,R2       ; Загружаем адрес
002002  002100                    ; переменной А в R2.
002004  007001    FGET (R2)       ; А в сумматор.

Адресация через регистр R2 особенно эффективна, когда переменные занимают смежные участки памяти ЭВМ. В этом случае удобно использовать автоматическую модификацию индексного регистра, так называемую автоиндексацию. Рассмотрим пример, в котором применяется автоиндексация. Пусть у нас есть фрагмент ФОКАЛ-программы:

10.10 S С=2.0+3.0
10.20 Т С; Q

Программа в кодах может выглядеть следующим образом:

002000  012702    MOV #<A-4>,R2   ; Адрес массива перемен-
002002  002014                    ; ных с учётом автомати-
                                  ; ческого наращивания.
002004  007002    FGET +(R2)      ; Занести в сумматор 2.0
002006  007012    FADD +(R2)      , Добавить к сумматору 3.0
002010  007062    FPUT +(R2)      ; Результат запомнить в С.
002012  005002    CLR R2          ; Подготовиться к выводу.
002014  007076    FPRINT          ; Вывести сумматор на экран
002016  000000    HALT
002020  000002 А:                 ; 2.0
002022  040000
002024  000002 В:                 ; 3.0
002026  060000
002030         С:                 ; Здесь будет результат.

В приведённом примере в переменных А и В записаны константы в формате чисел с плавающей запятой. В данном случае перевод в нужный вид был сделан вручную. Иногда такое преобразование можно поручить ЭВМ. Очевидно, что в процессе решения задач возникают ситуации, требующие преобразования чисел из одного вида в другой. Например, целые числа при программировании в кодах гораздо удобнее. Но, перед тем как обратиться к ФОКАЛ-арифметике, целое число надо преобразовать в нормальный двухсловный формат. Целое число, расположенное по адресу А, можно поместить в сумматор при помощи следующего фрагмента программы:

002000  012737    MOV #17,@#1710  ; Порядок целого числа
002002  000017                    ; равен 15.
002004  001710
002006  013737    MOV @#А,@#1712  ; Записали целое число
002010  002100                    ; в виде ненормализован-
002012  001712                    ; ной мантиссы.
002014  005037    CLR @#1714      ; Незначащие разряды в 0.
002016  001714
002020  007070    FNOR            ; Нормализовали сумматор

В дальнейшем значение сумматора можно или использовать непосредственно в вычислениях, или записать в память ЭВМ.

В практике часто приходится вводить числовые данные с клавиатуры ЭВМ. При этом в памяти ЭВМ образуется последовательность байтов, в которой находится число в символьном виде в коде КОИ-8. Для перевода числа в двоичный вид можно воспользоваться операцией FREAD. Символьная строка предварительно должна быть перекодирована, так как в ФОКАПе для некоторых символов используются коды, отличные от стандартных кодов КОИ-8. При записи числа, в частности, необходимы символы «-» (минус) и «+» (плюс) В ФОКАЛе для этих символов употребляются восьмеричные коды 202 и 201 соответственно вместо 55 и 53. Признаком конца символьной строки является код 217. В следующем примере с клавиатуры вводится число, коды клавиш «+», «-» и «ВВОД» перекодируются. Затем число переводится в плавающий формат и записывается в сумматор.

002000  012701       MOV #A,R1            ; Поместить адрес символьной
002002  002100                            ; строки в R1.
002004  104016 4¤:   ЕМТ 6                ; Ввести код с клавиатуры в R0
                     ;EMT 16              ; вывести эхо на экран
002006  120027       СМРВ R0,#'+          ; Ввели"+"?
002010  000053
002012  001003       BNE 1¤               ; Нет.
002014  112700       MOVB #201, R0        ; Да. Заменить код.
002016  000201
002020  000413       BR 2¤
002022  120027 1¤:   СМРВ R0,#'-          ; Ввели"-"?
002024  000055
002026  001003       BNE 3¤               ; Нет
002030  112700       MOVB #202,R0         ; Да.
002032  000202
002034  000405       BR 2¤
002036  120027 3¤:   СМРВ R0,#12          ; Нажали "ВВОД"?
002040  000012
002042  001002       BNE 2¤               ; Нет.
002044  112700       MOVB #217,R0         ; Код завершения строки.
002046  000217
002050  110021 2¤:   MOVB R0,(R1)+        ; Записали символ в буфер.
002052  120027       СМРВ R0,#217         ; Если закончили ввод,
002054  000217                            ; то выполнить перевод.
002056  001352       BNE 4¤               ; Иначе ввести следующий символ.
002060  012703       MOV #А, R3           ; Для перевода надо поместить
002062  002100                            ; адрес символьной строки в R3.
002064  112737       MOVB #20,@#1723      ; Обязательно заполнить.
002066  000020
002070  001723
002072  112304       MOVB (R3)+, R4       ; Обязательно поместить первый
                                           ; символ в R4.
002074  007075       FREAD                ; Поместить число в сумматор.
002076  000000       HALT
002100         А:                         ; Буфер ввода.

Если символьная строка не требует перекодировки, то для перевода числа в плавающий формат необходимы строки программы, записанные в адресах 2060 по 2074.

Операция FREAD вводит в сумматор всегда положительное число. Если символьная строка задаёт отрицательное число, то после можно воспользоваться операцией FNEG для правильного представления числа в сумматоре.

В списке операций ФОКАЛа отсутствует операция для перевода числа из плавающей формы в символьный вид. Однако операция FPRINT позволяет вывести на экран содержимое сумматора. Регистр R2 содержит при этом требуемый формат. Восьмеричная константа 4012 соответствует формату ФОКАЛа %8.04. Если R2 равен нулю, то число будет выведено в экспоненциальной форме. При использовании FPRINT необходимо иметь в виду, что операция не сохраняет содержимое сумматора.

Завершим рассмотрение операций ФОКАЛа фрагментом программы в кодах ЭВМ, соответствующей ФОКАЛ-программе, которая приведена в начале статьи.

002000   012705        MOV #1000., R5      ; Число измерений 1000
002002   001750
002004   012702        MOV #<T-4>, R2      ; Адрес массива измерений.
002006   002050
002010   012701        MOV #177714, R1     ; Адрес порта ввода/вывода.
002012   177714
002014   005011        CLR (R1)            ; Очистить регистр вывода.
002016   052711 1¤:    BIS #1, (R1)        ; Произвести измерение
002020   000001
002022   042711        BIC #1, (R1)
002024   000001
002026   012737        MOV #17, @#1710
002030   000017
002032   001710
002034   011137        MOV (R1), @# 1712   ; Записать измерение
002036   001712                            ; в сумматор
002040   005037        CLR @#1714
002042   001714
002044   007070        FNOR                ; Перевести в плавающий формат
002046   007062        FPUT +(R2)          ; Записать в массив Т().
002050   077516        SOB R5, 1¤          ; Следующее измерение.
002052   000000        HALT
002054          T:                         ; Массив измерений Т.

Данная программа иллюстрирует ещё один источник экономии памяти при программировании в кодах. Несмотря на довольно длинную запись, программа в кодах занимает в памяти ЭВМ примерно в 2 раза меньше места, нежели чем её прототип на ФОКАЛе. В среднем, как показывает опыт программирования в кодах, данная пропорция сохраняется для достаточно длинных и содержательных программ.

Встроенные математические функции ФОКАЛа

Обращение к встроенным функциям ФОКАЛа производится как к обычным подпрограммам, в качестве регистра возврата используется счётчик команд PC (или R7), т.е.

JSR PC, <адрес функции в ПЗУ ФОКАЛа>

Адреса встроенных функций для микросхемы К1801РЕ2-018 приведены в табл. 4. Для микросхемы K1801PE2-084 адреса, естественно, другие. Полный перечень адресов для микросхемы -084 будет приведён в приложении.

Таблица 4

Адрес

Функция

Мнемоника

126550

int(S) → S

FITR

132260

cos(S) → S

FCOS

132250

sin(S) → S

FSIN

132122

кв. корень (S) → S

FSQT

132550

случ. число → S

FRAN

126554

sign(S) → S

FSGN

126540

|S| → S

FABS

134132

lg(S) → S

FLOG10

134156

ln(S) → S

FLOG

134416

exp(S) → S

FEXP

133702

tg(S) → S

FTAN

134632

arctg(S) → S

FATAN

133656

arccos(S) → S

FACOS

133402

arcsin(S) → S

FASIN

При использовании встроенных функций программист должен сам побеспокоиться о сохранении регистров ЭВМ.

Программа начальной инициализации

Опишем сейчас действия, которые надо проделать, прежде чем воспользоваться ФОКАЛ-арифметикой или встроенными функциями. Связь с программным обеспечением, находящимся в ПЗУ, осуществляется через векторы прерывания. Выше уже упоминалось, что при встрече кодов псевдокоманд происходит прерывание по резервной команде (вектор прерывания 10). При обработке псевдокоманд ФОКАЛ использует внутренние обслуживающие подпрограммы. Служебные подпрограммы выполняют такие действия, как работа со строками, ввод-вывод символьной информации, вычислительные действия, выдача сообщений об ошибках. Часть служебных подпрограмм вызывается с помощью TRAP-запросов. Вектор прерывания для TRAP-запросов содержится в ячейке 34.

Следовательно, для успешной работы с программным обеспечением, размещённом в ПЗУ ФОКАЛа, необходимо создать соответствующую рабочую среду. В принципе если программа пользователя написана без единой ошибки, то для правильной обработки псевдокоманд достаточно перед их выполнением заменить содержимое ячеек 10 и 34 на адреса связи с ФОКАЛом 125636 и 121136 соответственно. Однако в этом случае программа пользователя беззащитна перед любыми ненормальными ситуациями, происходящими при работе обслуживающих подпрограмм ФОКАЛа. Например, невозможно гарантировать, что в процессе решения задачи не возникнет попытка деления на нуль, или попытка извлечь корень из отрицательного числа, или попытка перевести из символьного в двоичный формат нечисловую информацию. В этом случае при любой ошибке управление передаётся ФОКАЛу, который в «наказание» стирает как программу пользователя, так и все данные.

Предлагаемая вспомогательная программа осуществляет корректный интерфейс между программой пользователя в кодах ЭВМ, обслуживающими подпрограммами ФОКАЛа и монитором из которого был произведён запуск программы пользователя. В любом случае вход в программу пользователя происходит из вспомогательной программы, которую мы будем называть в дальнейшем программой начальной инициализации ПИФ

Основные функции программы ПИФ:

Область памяти 1000-1777 используется программой ПИФ и рабочими ячейками ФОКАЛа. Приведём распределение адресного пространства.

1000

Стартовый адрес программы. Сохранение области векторов прерывания, заполнение рабочих ячеек ФОКАЛа, установка векторов прерывания, установка указателя стека

1060

«Ловушка» для TRAP-запросов

1120

Обработка недействительных TRAP-запросов.

1142

Выход в вызывающий монитор восстановление векторов прерывания сообщение о месте останова.

1160

Свободная область.

1200

Адреса обработки TRAP-запросов с 200 по 262.

1264

Резерв для использования TRAP с 264 по 376.

1400

П/П для сохранения и восстановления векторов прерывания, область сохранения.

1500

Рабочие ячейки ФОКАЛа.

2000

Первая команда программы пользователя.

Программа пользователя в кодах должна размещаться в памяти ЭВМ, начиная с адреса 2000. Более того, по адресу 2000 должна располагаться первая исполняемая команда программы. Однако пуск программы производится через ПИФ, т.е. с адреса 1000. Завершаться программа пользователя может традиционной командой HALT. При этом адрес останова находится в регистре R5. Естественно, результат при нажатии на клавишу «СТОП» будет точно такой же.

Выше речь уже шла об ошибочных ситуациях при исполнении операций ФОКАЛа или при вычислении стандартных функций. В этом случае ПИФ обеспечивает нормальный останов программы с выдачей дополнительно некоторого диагностического сообщения. Например, если произошла ошибка деления на нуль, то на экран выдаётся:

ПОПЫТКА ДЕЛЕНИЯ НА НУЛЬ
002450 : 104635

Для недопустимых TRAP-запросов выдаётся только вторая строка. В обоих случаях программа завершает работу таким же образом, как описано выше.

Чётные номера TRAP-запросов с кодами 264-376 свободны и могут быть использованы программистом для обращения к своим подпрограммам с помощью программного прерывания TRAP. Область памяти с адресами 1264-1376 зарезервирована для соответствующих адресов подпрограмм пользователя. Если подпрограмму, расположенную начиная с адреса SUBPR, пользователь захочет вызвать с помощью, например, запроса TRAP 264, то предварительно необходимо адрес подпрограммы поместить в слово с адресом 1264. Возврат из подпрограммы производится через регистр R5.

        MOV #SUBPR, @#1264     ; Адрес, подпрограммы
                               ; пользователя в таблицу
                               ; TRAP – запросов
. . . . . . . . . . . . . . . . . . . . . . . . .
        TRAP 264               ; Вызов подпрограммы
. . . . . . . . . . . . . . . . . . . . . . . . .
SUBPR:                         ; Начало подпрограммы,
        RTS R5                 ; Возврат.

Кроме того, программист может включать в свою программу и некоторые служебные TRAP-запросы ФОКАЛа, в частности запросы с номерами 0-177, которые выдают на экран символ, код которого соответствует номеру запроса.

Для тех, кто захочет воспользоваться средствами, описанными в данной статье, мы приводим текст ПИФ. Для экономии места даётся только образ памяти в восьмеричном виде. Пользователь должен будет ввести эту программу в память ЭВМ с помощью любого монитора, начиная с адреса 1000.

Текст программы начальной инициализации ПИФ

004767 000374 012737 125636 000010 012737 001060 000034
012767 001032 000210 000137 120056 012706 001000 012737
001152 000004 012767 001120 000164 104004 000137 002000
106466 000002 010566 000002 011605 016516 177776 106216
100402 000137 121502 103404 106116 162716 103400 013607
012706 001000 004437 110346 014501 103013 104412 016101
014211 005002 104020 000407 011605 012706 001000 004437
110346 004767 000232 004437 110362 000000 000000 000000
121572 121624 122134 122074 132064 132052 122360 001120
121520 121640 121752 001120 124134 001120 122250 001120
001120 122012 122040 125326 122056 122022 121556 125556
001120 001120 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
005000 012701 001430 012702 000040 112021 077202 000207
005001 012700 001430 000767
 

Вариант из ИНФО 89'05, как выяснилось позже - работоспособный вариант

 
004767 000374 012737 125636 000010 012737 001060 000034
012767 001032 000210 000137 120056 012706 001000 012737
001142 000004 012767 001120 000164 104004 000137 002000
106466 000002 010566 000002 011605 016516 177776 106216
100402 000137 121502 103404 106116 162716 103400 013607
012706 001000 014501 103005 104412 016101 014211 005002
104020 104412 104407 012706 001000 004767 000242 000000
000000 000000 000000 000000 000000 000000 000000 000000
121572 121624 122134 122074 132064 132052 122360 001120
121520 121640 121752 001120 124134 001120 122250 001120
001120 122012 122040 125326 122056 122022 121556 125556
001120 001120 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
000000 000000 000000 000000 000000 000000 000000 000000
005000 012701 001430 012702 000020 012021 077202 000207
005001 012700 001430 000767

В заключение отметим, что указанный подход применим и в том случае, когда используется микросхема с другим языком, например, с БЕЙСИКОМ. Правда, в этом случае можно воспользоваться только идеей. К сожалению, ни завод-изготовитель, ни разработчики языков не представляют пользователям ЭВМ достаточной информации о программе, записанной в ПЗУ. Это приводит к тому, что пользователи вынуждены проводить свои исследования, подобно этому.

ПРИЛОЖЕНИЕ

Приложение содержит все изменения, которые надо внести в текст программы ПИФ или учесть при использовании ФОКАЛа, находящегося в микросхеме К1801РЕ2-084

Таблица 5

Адрес

Функция

Мнемоника

Адрес для микросхемы "018"

126672

int(S) → S

FITR

126550

132262

cos(S) → S

FCOS

132260

132252

sin(S) → S

FSIN

132250

132124

кв.корень (S) → S

FSQT

132122

132552

случ.число → S

FRAN

132550

126666

sign(S) → S

FSGN

126554

126662

|S| → S

FABS

126540

134134

lg(S) → S

FLOG10

134132

134160

ln(S) → S

FLOG

134156

134420

exp(S) → S

FEXP

134416

133704

tg(S) → S

FTAN

133702

134634

arctg(S) → S

FATAN

134632

133660

arccos(S) → S

FAGOS

133656

133404

arcsin(S) → S

FASIN

133402

  1. Адреса встроенных функций для микросхемы К1801РЕ2-084.
  2. Значение векторов прерывания 10 и 34 должны быть равны 125760 и 121300 соответственно.
  3. В программе ПИФ должны быть изменены значения ячеек 1006, 1104 и 1140 на 125760, 121654 и 014313.
  4. В программе ПИФ изменяется таблица TRAP-запросов, расположенная начиная с адреса 1200. Для микросхемы -084 значения этой таблицы следующие:
121744 121776 122306 122246 132012 132000 122532 001120
121672 122012 122124 001120 124256 121414 122622 001120
001120 122164 122212 125450 122230 122174 121730 125700

Список литературы

  1. Писаревский А.Н., Осетинский Л.Г., Осетинский М.Г. ФОКАЛ - диалоговый язык для мини-ЭВМ. - Л. Машиностроение, 1985. - 195 с., ил.
  2. Вигдорчик Г.В., Воробьев А.Ю., Праченко В.Д. - Основы программирования на ассемблере для СМ ЭВМ. - М.: Финансы и статистика, 1983 - 256 с., ил.

 

Performed by © gid, 2012-2022.