Маленький компьютер 3 - Little Computer 3

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

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

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

Архитектурная спецификация

LC-3 определяет размер слова в 16 бит для своих регистров и использует 16-битную адресуемую память с 216-Расположение адресного пространства. Файл регистров содержит восемь регистров, обозначенных номерами от 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 его нет) и дополнительной логике в его блоке памяти, чтобы правильно обрабатывать загрузку и хранение данных различных размеров.

Смотрите также

Рекомендации

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

внешняя ссылка