Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Учебная модель fN8: система командПроцессорПроцессор содержит ряд программно-доступных объектов, расположенных вне адресных пространств:
Кроме того, в окне обозревателя процессора отображается состояние двух внутренних регистров процессора: регистра команд – CR[15:0], отображающий код текущей команды и регистр данных – DR[7:0], предназначенный для второго операнда бинарной операции. Система командСистема команд fN8 включает в себя следующие операции: арифметические и логические бинарные операции над аккумулятором (Acc) и ячейкой памяти или регистром с размещением результата в Acc, унарные арифметические (INC, DEC) и логические (инверсия), команды управления битами, команды пересылки, ввода/вывода, передачи управления (включая вызовы подпрограмм), управление прерываниями и другие. Адресация в командах с ячейками ОЗУ – прямая и непосредственная. В регистровых командах – прямая, косвенная и несколько вариантов автоиндексной адресации. Адресация в командах ввода/вывода – только прямая. Кроме того, возможна адресация отдельных битов в любой ячейке сегмента данных ОЗУ или в любом РВУ. Любой бит в этих байтах может быть установлен или сброшен, кроме того по любому из этих битов можно осуществить условный пропуск следующей команды. Все команды имеют размер 16 бит. Большинство команд при этом являются одноадресными. Таблицу команд смотрите здесь. Директивы компилятораПри написании программы на языке Ассемблер можно пользоваться следующими директивами компилятора: .c <сегмент> – выбирает текущий сегмент компиляции; .org <адрес> – изменяет текущий адрес компиляции; .db <байт, байт, ... байт> – загрузка констант размером в 1 байт в текущий сегмент начиная с текущего адреса компиляции; .dw <слово, метка, ... слово> – загрузка констант размером в 2 байта в текущий сегмент начиная с текущего адреса компиляции. В процессе компиляции возможна загрузка констант в сегмент данных. Например, приведённый ниже фрагмент позволяет загрузить в ячейки 0 .. 9 сегмента данных таблицу семисегментных кодов десятичных цифр: .c 2 .org 0 .db 0x3F, 0x06, 0x5B, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77 Использование этих директив позволяет изменить установленную по умолчанию точку старта программы – 0x10, например, на адрес 0х20 (a). Ещё проще поставить в нужном месте метку, например, Start: и объявить её точкой старта (b).
Эти же директивы позволяют автоматизировать заполнение таблицы векторов прерываний. Таблица векторов прерываний в fN8 размещается в младших адресах памяти 0х000 – 0х00F, каждый вектор занимает два байта. Вектор 0 определяет точку старта (по умолчанию - 0x010), вектора 1 .. 7 могут присваиваться подключаемым к fN8 внешним устройствам. Если поставить метки в начале всех обработчиков прерываний, то загрузка таблицы векторов прерываний может выглядеть следующим образом (для случая, когда вектора определяются последовательно): .org 2 .dw wu1, wu2, wu3, . . .где wui – метка начала обработчика прерывания по i-му вектору. © Жмакин Анатолий Петрович (Курский государственный университет). anatoly.zhmakin@gmail.com Оформление Web-страницы - Е.А.Еремин, 2022 |