Процессор управляет так называемым циклом цикла выборки-декодирования. Инструкции машинного кода довольно низкоуровневые (т. Е. Они не делают столько всего в одной команде).Например, сложение двух чисел будет иметь последовательность инструкций с семантикой, как:
- нагрузки указатель на адрес операнда 1 в регистр 1
- нагрузки значение, хранящееся по адресу, хранящихся в регистре 1 в регистр 2
- нагрузки указатель на адрес операнда 2 в регистр 1
- нагрузки значение, хранящееся по адресу в регистре 1 в регистр 3
- Добавить содержимое регистра 2 и регистр 3 и сохранить его в регистре 4
- нагрузки указатель к месту назначения в регистр 1
- Хранить содержимое регистра 4 в адрес, указанный в регистре 1
В процессоре это специальный набор быстрой памяти известен как «регистровый файл» , который содержит память, которую процессор использует для хранения данных, на которых он работает в данный момент. Файл регистра имеет несколько регистров, которые однозначно идентифицированы. Обычно инструкции работают над реестрами, особенно на архитектуре RISC; в то время как это не всегда так, это достаточно хорошая абстракция на данный момент.
Обычно процессор должен загружать или хранить данные в регистр, чтобы что-либо с ним делать. Операции, такие как арифметическая работа над регистрами, взятие операндов из двух регистров и помещение результата в третью (в пользу галереи арахиса, I имеют, использовали 6502 - не путать проблему ;-). Процессор имеет специальные инструкции по загрузке или хранению данных из регистров в основную память аппарата.
Процессор имеет специальный регистр, называемый «программным счетчиком», который хранит адрес следующей операции для выполнения. Таким образом, последовательность выполнения команды выглядит примерно так:
- Извлечь инструкцию, хранящуюся по текущему адресу в счетчике программы.
- Декодируйте инструкцию, выделяя фактическую операцию, какие регистры она использует, режим адресации (как это работает, где можно получить или хранить данные), а также некоторые другие бит и бобы.
- Выполнение инструкции.
Выполнение инструкции изменит значения в различных регистрах. Например, команда «load» копирует значение в регистр. Арифметические или логические (И, Или, Xor) будут принимать два значения и вычислять третью. Команда перехода или перехода изменит адрес на счетчике программы, чтобы процессор начал извлекать инструкции из другого места.
Процессор может иметь специальные регистры. Примером такого является счетчик программ, описанный выше. Другим типичным является регистр флагов условий. Это будет иметь несколько бит со специальными значениями. Например, он может иметь флаг, который устанавливается, если результат последней арифметической операции был равен нулю. Это полезно для условных операций. Вы можете сравнить два числа. Если они равны, устанавливается флаг «нуль». Процессор может иметь условную инструкцию, которая выполняется только в том случае, если этот флаг установлен.
В этом случае вы можете уменьшить счетчик в регистре, и если он равен нулю, устанавливается флаг условия. Условный (ветвь на ноль) может использоваться для цикла, где вы уменьшаете счетчик и выходите из цикла, если результат инструкции декремента равен нулю. На некоторых процессорах (например,семейство ARM) все инструкции условны, со специальным условием «всегда» для не условных инструкций.
Некоторые примеры типичных инструкций процессора являются:
- Увеличение или уменьшение регистра
- нагрузки или хранить содержимое регистра в память. У вас также может быть адрес для загрузки или хранения смещения по содержимому другого регистра. Это позволяет легко перебирать массив данных, увеличивая другой регистр.
- Добавление, вычитание, умножение, логические операции для вычисления значений. Они берут операнды из двух регистров и помещают результат в третью.
- Перейти к другому местоположению - это перемещает содержимое местоположения в счетчик программ и начинает извлекать инструкции из нового местоположения.
- Нажмите или поп-значения в стек.
This stackoverflow post имеет пример небольшого фрагмента скомпилированного кода C и языка ассемблера, выводимого из этого фрагмента. Он должен дать вам пример рода отношений между языком высокого уровня и выходом машинного кода, с которым он компилируется.
Лучший способ узнать это - получить ассемблер и попробовать его. Это было намного проще на более старых, более простых компьютерах, таких как 8-разрядные микрофоны 1980-х годов. В наши дни самое близкое к этому типу архитектуры - встроенные системы. Вы можете получить плату разработки для встроенного процессора, такого как Microchip PIC, довольно дешево. Поскольку у этого типа архитектуры меньше багажа, чем у современной операционной системы, для использования системных вызовов меньше i-dotting и t-cross. Это упростит загрузку языковой программы ассемблера в этом типе архитектуры; проще и проще понять простую архитектуру.
Другой вариант - получить эмулятор, такой как SPIM. Это будет эмулировать процессор и позволить вам собирать и запускать на нем программы. Преимущество такого эмулятора заключается в том, что у них также будут возможности для программ с одним степпингом (подобно отладчику) и показ содержимого файла регистра. Это может быть полезно для получения информации о том, что происходит на самом деле.
Поверьте мне, курс CS, вероятно, не помог бы с такими вещами. :( –
Большинство степеней CS имеют архитектурную бумагу, которая покрывает основы этого материала. – ConcernedOfTunbridgeWells
http://en.wikipedia.org/wiki/Integrated_circuit – vartec