Маленький компьютер 3
Эта статья в значительной степени или полностью опирается на один источник . ( март 2013 г. ) |
Little Computer 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 не имеет встроенной поддержки чисел с плавающей запятой .
Аппаратная реализация, представленная в тексте Патта и Пателя, не является конвейерной или иным образом оптимизированной, но, безусловно, можно создать быструю реализацию, используя более продвинутые концепции компьютерной архитектуры.
Набор инструкций
[ редактировать ]Набор инструкций 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 его нет) и дополнительная логика в блоке памяти для правильной обработки загрузки и хранения данных различного размера.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б Патт, Йельский университет, Н .; Патель, Санджай (2003). Введение в вычислительные системы: от битов и вентилей до C и не только . Нью-Йорк, штат Нью-Йорк: Высшее образование Макгроу-Хилла. ISBN 0-07-246750-9 . Проверено 6 октября 2010 г.
- ^ Юань-Джанг Ляо и Винг-Квонг Вонг. «Использование программного ядра LC-3 на плате разработки FPGA для микропроцессорных лабораторий». 2013. п. 612-613 из «Интеллектуальные технологии и инженерные системы» .