Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Маленький Компьютер 3 , или LC-3 , тип компьютерного языка образовательного программирования , на языке ассемблера , который представляет собой тип языка программирования низкого уровня .

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

LC-3 был разработан Йелем Н. Паттом в Техасском университете в Остине и Санджаем Дж. Пателем в Иллинойском университете в Урбане-Шампейне . Их спецификацию набора команд, общую архитектуру LC-3 и аппаратную реализацию можно найти во втором издании их учебника. [1] Курсы, основанные на LC-3 и книге Патта и Пателя, предлагаются на многих факультетах компьютерной инженерии и информатики.

Архитектурная спецификация [ править ]

LC-3 определяет размер слова в 16 бит для своих регистров и использует 16-битную адресуемую память с адресным пространством 2 16 . Файл регистров содержит восемь регистров, обозначенных номерами от R0 до R7. Все регистры являются универсальными в том смысле, что они могут свободно использоваться любой из инструкций, которые могут записывать в файл регистров, но в некоторых контекстах (например, при переводе из кода C в сборку LC-3) некоторые из регистров являются используется для специальных целей.

Команды имеют ширину 16 бит и 4-битные коды операций . Набор инструкций определяет инструкции для пятнадцати из шестнадцати возможных кодов операций, хотя некоторые инструкции имеют более одного режима работы. Выполнение отдельных инструкций регулируется конечным автоматом, реализованным с ПЗУ управления и блоком микропоследовательности.

Архитектура поддерживает использование клавиатуры и монитора для регулирования ввода и вывода; эта поддержка обеспечивается посредством абстракций ввода-вывода с отображением памяти . При моделировании к этим регистрам можно получить прямой доступ, и в архитектурной спецификации описывается их содержимое. Поддержка ввода-вывода более высокого уровня также обеспечивается за счет использования инструкции TRAP и базовой операционной системы. Операционная система предоставляет функции для чтения и вывода символов с клавиатуры, печати отдельных символов на мониторе, печати целых строк как в упакованном, так и в распакованном виде и остановки машины.

Предполагается, что все данные в LC-3 хранятся в представлении с дополнением до двух ; нет отдельной поддержки беззнаковой арифметики. Устройства ввода-вывода работают с символами ASCII . LC-3 не имеет встроенной поддержки чисел с плавающей запятой .

Аппаратная реализация, приведенная в тексте Patt and Patel, не является конвейерной или иным образом оптимизированной, но, безусловно, можно создать быструю реализацию, используя более продвинутые концепции в компьютерной архитектуре.

Набор инструкций [ править ]

Набор команд LC-3 реализует пятнадцать типов команд, с шестнадцатым кодом операции, зарезервированным для последующего использования. Архитектура - это архитектура загрузки-хранилища; значения в памяти должны быть занесены в регистровый файл, прежде чем с ними можно будет работать.

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

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

LC-3 предоставляет как условные, так и безусловные инструкции потока управления. Условные переходы основаны на арифметическом знаке (отрицательном, нулевом или положительном) последней части данных, записанных в файл регистров. Безусловные переходы могут перемещать выполнение в место, заданное значением регистра или смещением относительно ПК. Три инструкции (JSR, JSRR и TRAP) поддерживают понятие вызовов подпрограмм, сохраняя адрес кода, вызывающего подпрограмму, в регистре перед изменением значения счетчика программ. LC-3 не поддерживает прямое арифметическое сравнение двух значений. Вычисление разницы двух значений регистра требует нахождения отрицательной эквивалентности одного значения регистра, а затем прибавления отрицательного числа к положительному значению во втором регистре.Разница двух регистров будет храниться в одном из 8 регистров, доступных пользователю.

Поскольку в наборе команд LC-3 не осталось места для выделенных команд ввода-вывода с отображением портов , аппаратные реализации обычно резервируют часть карты памяти для ввода-вывода с отображением в память . [2]

Поддержка языков программирования [ править ]

Хотя он не был реализован на физическом чипе, LC-3 можно использовать для моделирования в средах Linux / Unix, Mac OS X и Windows. Инструменты моделирования включают ассемблер с поддержкой компьютеризированного вычисления смещения с помощью меток и вставки констант, строк и пустых ячеек памяти в блок кода сборки. Также существует соглашение об использовании языка C на LC-3. Образцы ассемблера, компилятора и симулятора предоставляются McGraw-Hill. [1]

C и LC-3 [ править ]

Соглашение о вызовах для функций C в LC-3 аналогично соглашению, реализованному в других системах, таких как x86 ISA. При запуске программ C архитектура поддерживает модель памяти, которая включает пространство для стека вызовов и динамическое распределение памяти . В этой модели четыре из восьми регистров общего назначения процессора берут на себя особые роли: R4 используется как базовый регистр для загрузки и хранения глобальных данных, R5 используется для указания на область текущей функции в стеке вызовов, а R6 используется. как указатель стека. Кроме того, R7 обычно зарезервирован для хранения адресов возврата из вызовов функций; инструкции JSR, JSRR и TRAP автоматически сохраняют адреса возврата в этом регистре во время их выполнения.

Когда в этой модели вызывается функция C, параметры функции помещаются в стек справа налево. Затем в стеке выделяется место для возвращаемого значения вызываемой функции, адреса инструкции в вызывающей стороне, к которой нужно вернуться, и значения R5 для вызывающей стороны. Локальные переменные вызываемой функции помещаются в стек в том порядке, в котором они были объявлены. Обратите внимание, что LC-3 не имеет собственных инструкций PUSH и POP, поэтому инструкции сложения и хранения в памяти должны использоваться отдельно для реализации стека.

LC-3b [ править ]

LC-3b ISA описывает модифицированный вариант LC-3 , который включает в себя следующие изменения:

  • Размер слова машины остается 16 бит, но теперь ее память имеет побайтовую адресацию с тем же адресным пространством.
  • Инструкции LD и ST (загрузка и сохранение данных с использованием адресации относительно ПК) были удалены.
  • Инструкции LDI и STI (косвенная загрузка и сохранение) используют адресацию на основе регистров вместо адресации относительно ПК.
  • Две инструкции, LDB и STB, были добавлены для управления отдельными байтами памяти; другие инструкции загрузки и сохранения продолжают действовать для целых слов.
  • Зарезервированный код операции был преобразован в инструкцию сдвига SHF, которая поддерживает арифметические и логические сдвиги произвольного размера в обоих направлениях.

Эти изменения делают аппаратную часть LC-3b немного более сложной, чем у LC-3. Например, LC-3b нуждается в переключателе (у LC-3 нет) и дополнительной логике в его блоке памяти, чтобы правильно обрабатывать загрузку и хранение данных различного размера.

См. Также [ править ]

  • Образовательный язык программирования
  • DLX
  • Маленький компьютер человека
  • MIX , MMIX
  • MikroSim
  • DCPU-16

Ссылки [ править ]

  1. ^ а б Патт, Йель Н .; Патель, Санджай (2003). Введение в вычислительные системы: от битов и шлюзов до C и выше . Нью-Йорк, штат Нью-Йорк: Высшее образование Макгроу-Хилла. ISBN 0-07-246750-9. Проверено 6 октября 2010 года .
  2. Юань-Чжан Ляо и Винг-Квонг Вонг. «Использование программного ядра LC-3 на плате разработки FPGA для микропроцессорных лабораторий». 2013. с. 612-613 «Интеллектуальные технологии и инженерные системы» .

Внешние ссылки [ править ]

  • HERA: Образовательная RISC-архитектура Хаверфорда