- Компьютерная Энциклопедия
- Архитектура ЭВМ
- Компоненты ПК
- Интерфейсы
- Мини блог
- Самое читаемое
- Процессор
- Система команд процессора
- Система команд процессора
- Команды пересылки
- Пересылки общего назначения
- Пересылки из/в стек
- Пересылки двоичных слов
- Пересылки между элементами вычислительного ядра
- Команды обработки
- Арифметические команды
- Логические команды
- Сдвиги
- Проверки и передача управления
- Команды проверки
- Команды ветвления по условию
- Команда безусловной передачи управления
- Команда организации цикла
- Команда обращения к подпрограмме (вызов процедуры)
- Команды ввода — вывода (обмена с периферийными устройствами)
- Еще статьи.
- Как работает процессор?
- Как работает процессор?
- Два основных компонента процессора
- Устройство управления
- Арифметико-логическое устройство
- Хранение информации — регистры и память
- Регистры
- Память (ОЗУ)
- Команды (инструкции)
- Тактирование процессора
- Выполнение инструкций
- Поток инструкций
- Инструкции процессоров Intel
- Набор базовых команд процессора
- Компьютерная Энциклопедия
- Архитектура ЭВМ
- Компоненты ПК
- Интерфейсы
- Мини блог
- Самое читаемое
- Процессор
- Система команд процессора
- Система команд процессора
- Команды пересылки
- Пересылки общего назначения
- Пересылки из/в стек
- Пересылки двоичных слов
- Пересылки между элементами вычислительного ядра
- Команды обработки
- Арифметические команды
- Логические команды
- Сдвиги
- Проверки и передача управления
- Команды проверки
- Команды ветвления по условию
- Команда безусловной передачи управления
- Команда организации цикла
- Команда обращения к подпрограмме (вызов процедуры)
- Команды ввода — вывода (обмена с периферийными устройствами)
- Еще статьи.
Компьютерная Энциклопедия
Архитектура ЭВМ
Компоненты ПК
Интерфейсы
Мини блог
Самое читаемое
Процессор
Система команд процессора
Система команд процессора
Хотя наборы команд, реализованных в разных процессорах, различаются по количеству и перечню команд, по способам кодирования, по длине команд и по времени их выполнения, в системах команд разных процессоров есть весьма много общего. Знание этих общих свойств помогает быстрее освоить программирование нового процессора.
Разработчики процессора стремятся включить в систему команд прежде всего те действия, которые чаще требуются программистам. При этом наиболее часто требуемые действия стремятся реализовать в более коротких и быстрых командах. Перечень и свойства операций, выполняемых процессорными командами, тесно связаны со свойствами разных видов данных, которые обрабатываются на ЭВМ. Общего в разных системах команд достаточно много. Далее будем рассматривать главным образом это общее, часто упоминая, чем вызваны те или иные различия.
Для описания команд и их действия будем использовать мнемоники, принятые в языке Ассемблера. Язык Ассемблера специфичен для каждого типа процессора, так как включает в себя совокупность символических обозначений процессорных команд и способов адресации. Несмотря на специфичность, в языках Ассемблера для разных процессоров достаточно много общего, как в форме (в синтаксисе) так и в содержании отображаемых конструкциями языка понятий, поскольку и в различных процессорах также имеется много одинаковых, либо похожих свойств.
Примечание!
Для облегчения понимания кратко опишем основные правила записи команд на Ассемблере (они справедливы для многих известных автору Ассемблеров).
1) Как правило, ассемблерная строка однозначно соответствует одной процессорной команде.
2) Команда языка Ассемблера имеет следующую структуру:
Меткаl: КОП Оп1,Оп2,… ;Комментарий
Вот пример команды на языке ассемблера
L1: mov r1, #12A9h ;Загрузка регистра константой
Пояснение: Данный оператор содержит команду пересылки, которая загружает константу 12A9h в регистр процессора r1. Константа задана программистом в виде шестнадцатиричного числа.
Оператор включает в свой состав следующие поля:
- Метка — это символическое обозначение адреса. В мнемонике команды, приведенной выше, метка обозначает адрес, начиная с которого байты данной команды будут расположены в ОЗУ после загрузки программы в память. Имя метки часто используется как операнд в командах переходов. (Замечание 1: метки могут обозначать любой адрес, в том числе и тот, с которого расположен операнд. Замечание 2: конкретное значение физического адреса, соответствующего метке будет определено только после загрузки оттранслированной программы в память. При разных запусках этот физический адрес может получиться различным, если программист не принимает специальных мер по заданию определенного значения для этого адреса.).
- КОП — мнемоническое обозначение кода операции, выполняемой данной командой, например mov — переслать
- Оп1, Оп2,… — символические обозначения операндов, обычно они разделяются запятыми (хотя в некоторых Ассемблерах для разделения операндов используется пробел). Количество операндов в команде может быть различным, в большинстве современных процессоров — от 0 до 3. Если операндов больше, чем один, некоторые из них являются «источниками», а некоторые другие — «приемниками». Например, команда сложения
содержит указания на два операнда-приемника (слагаемые) — op1 и op2, а также указание на элемент данных (sum), куда команде следует поместить результат.
Количество операндов, которые программист может указать в команде, определено отдельно для каждой команды конкретного процессора его разработчиками. Для многих команд делают допустимым несколько форматов (см., например, команду целочисленного умножения imul для процессоров семейства х86).
В Ассемблерах процессоров фирмы Intel, по большей части, операнды-источники записываются левее операндов-приемников. В Ассемблерах других фирм это может быть наоборот. В качестве операнда можно использовать метку, в этом случае метка будет обозначать адрес, с которого располагается в памяти соответствующий операнд.
- Комментарий позволяет программисту записать пояснение к строке, и, как правило, игнорируется транслятором.
3) Хотя каждый процессор имеет свой Ассемблер (соответствующий его системе команд), многие мнемонические обозначения в разных Ассемблерах одинаковы для одинаковых операций. Этот факт сильно облегчает изучение следующего Ассемблера (и процессора), после того, как хотя бы один уже изучен.
4) При записи обозначений операндов используются условные обозначения выбранного программистом способа адресации. Обозначения различных способов адресации в разных ассемблерах также имеют много общего. Мы познакомимся с конкретными обозначениями при рассмотрении способов адресации.
Количество команд для разных типов ЭВМ колеблется от малых десятков до сотен. В таком множестве разобраться достаточно трудно, поэтому для рассмотрения разобьем все команды на группы (проклассифицируем). В разных книгах эта классификация тоже сделана по-разному. Выделяют от 3 до более 10 групп. (Наиболее обозримой для человека является классификация, содержащая на нижележащем уровне от 3 до 8 подклассов).
Команды пересылки
Пересылки общего назначения
Пересылки общего назначения MOV, L**, LD*, LOD* (от Load — загрузить), ST* (от Store — сохранить). Передают слово/байт данных из одной части ЭВМ в другую без изменения. Иногда в эту группу включают также и команды ввода-вывода для ЭВМ у которых область адресов внешних устройств включена в общее адресное пространство.
Пересылки из/в стек
Пересылки из/в стек: PUSH (втолкнуть), POP (вынуть). Обычно отличаются тем, что используют стековую адресацию (задаваемую неявно.
Пересылки двоичных слов
Пересылки двоичных слов, представляющих собой адреса операндов или части (компоненты) адресов. Для операций с адресами нередко в процессор вводят специальные команды. Это связано с тем, что разрядность адреса в процессоре не всегда совпадает с разрядностью АЛУ и регистров.
Пересылки между элементами вычислительного ядра
Пересылки между элементами вычислительного ядра (регистры процессора, элементы памяти) и периферийными устройствами. Хотя эти команды выполняют простую передачу двоичного слова, соответствующая группа команд (называемая командами ввода-вывода) обычно рассматривается отдельно.
Команды обработки
Арифметические команды
Минимальный набор арифметических команд очень мал. Это (например):
- сложение — ADD;
- инвертирование — COM / NOT (такая ЭВМ действительно была: PDP-8 (DEC));
- прибавление «единицы» — INC.
Все остальное можно сделать, комбинируя эти команды.
Однако в современном микропроцессоре арифметических команд обычно больше:
- SUB — вычитание;
- CMP — сравнение операндов. Эта команда выполняет вычитание операндов, по результату изменяет флаги, после чего результат теряется (команда предназначена для проверки условий);
- NEG — смена знака операнда;
- ASR, ASL, SAR, SAL — арифметические сдвиги операнда (Arithmetic Shift to Right/Left);
- INC, DEC — увеличение или уменьшение операнда на 1;
- ADC, SBC/SBB — операции с переносом C (carry-bit) — для выполнения действий с повышенной точностью, когда операнд занимает несколько слов;
- SXT, SEX, CBW, CWD, CDQ — расширение знака (преобразование в формат с повышенной разрядностью);
- MUL, DIV — умножение и деление беззнаковых и знаковых чисел.
- Набор операций с плавающей точкой, включающий обычно значительное количество команд (несколько десятков), в которые часто входят команды вычисления элементарных функций — Sin, Cos, Log, Exp и т.п.
Логические команды
Логические команды — это команды побитовой обработки.
- OR — поразрядное логическое сложение. Фактически это команда побитовой установки (т.е. записи «единицы» в заданные биты операнда). Пример:
or opr, 0Ch ;Установка в 1 битов в позициях 2 и 3 в операнде al
Если исходно в al содержался, например, операнд 1101 10012, то после выполнения команды в al будет содержаться: 1101 11 01 (отмечены установленные биты). Второй операнд — обычно константа, задавая которую, программист указывает, какие биты следует установить (он на жаргоне программистов носит название «маска»).
Можно описать действие команды OR следующим образом: команда безусловно устанавливает в «единицу» биты в тех позициях первого операнда, которые отмечены «единицами» во втором операнде (в маске), оставляя прочие биты первого операнда неизменными.
- AND — поразрядное логическое умножение. Это команда побитового сброса (записи в заданные биты «нулей»). Пример:
and bh, 0Fh ;Сброс старшей тетрады (старшего ниббла) в байтовом операнде.
Если, например, исходно в регистре bh содержался операнд 1101 10012, то после выполнения команды в регистре bh будет содержаться 0000 10012 (отмечены очищенные биты). Действие команды AND можно описать следующим образом: команда безусловно сбрасывает в 0 биты в тех позициях первого операнда, которые отмечены «нулями» в маске, оставляя прочие биты первого операнда неизменными.
- XOR — поразрядное исключающее ИЛИ, eXclusive OR (иногда на русском эту операцию называют «ЛИБО»). Эта двухоперандная команда фактически выполняет выборочное инвертирование битов. Например:
xor cl,0F0h ;Инвертирование битов старшей тетрады
Если исходно в cl содержалось 1101 10012, то после выполнения команды в cl будет содержаться 0010 10012 (отмечены проинвертированные биты). Действие команды xor можно описать так: команда инвертирует в первом операнде биты в позициях, которые отмечены в маске «единицами», оставляя прочие биты неизменными.
- TEST — проверка битовых полей. Команда чаще всего двухоперандная, выполняет поразрядное логическое умножение операндов и по результату операции изменяет состояние флагов «нуля» zf и «знака» sf, после чего результат операции теряется.
- NOT, COM — инвертирование операнда (замена значения каждого бита на противоположное). Это однооперандная команда.
Сдвиги
Операция сдвига состоит в одновременном перемещении содержимого операнда в разрядной сетке. Существует 3 разновидности операции сдвигов, которые различаются тем, что происходит с битами, выходящими за пределы разрядной сетки с одного «конца» операнда, и с освобождающимися позициями на другом его «конце».
- ROR, ROL, RCR, RCL — циклические сдвиги. При циклическом сдвиге то, что выходит за границу разрядной сетки, помещается в освобождающуюся позицию на другом конце операнда.
- ASR, ASL/SAR, SAL — арифметические сдвиги. Эта разновидность сдвига осуществляется таким образом, что результат оказывается эквивалентен умножению (при сдвиге влево) или делению (при сдвиге вправо) операнда на основание системы счисления, т.е. на 2. Сравните: если «сдвинуть» цифры в десятичном числе на разряд влево, результат будет эквивалентен исходному числу, умноженному на 10 (12 и 120 после сдвига). Более подробно особенности арифметического сдвига обсуждаются при рассмотрении системы команд процессоров х86.
- SHL, SHR — логические сдвиги. При выполнении логических сдвигов биты, «выдвигаемые» из разрядной сетки, теряются, а противоположный конец операнда заполняется «нулями».
Каждая из упомянутых разновидностей может также иметь варианты.
Например, в составе системы команд х86 различают пять видов сдвигов.
Проверки и передача управления
Эти команды позволяют реализовать конструкции:
IF . THEN . ELSE
REPEAT . UNTIL
WHILE . DO
FOR . DO
GOTO .
Для выполнения этих функций в каждом процессоре есть регистр флагов (регистр состояния), разряды которого устанавливаются или сбрасываются в зависимости от свойств результата предыдущей операции. Анализируются:
- равенство нулю;
- знак;
- перенос;
- арифметическое переполнение;
- перенос между тетрадами и др.
Команды проверки
- TEST — проверка отдельных битов (логическим умножением).
- CMP — сравнение операндов.
Кроме того, признаки устанавливаются после выполнения многих команд. Обратите внимание на то, что нет единых правил поведения признаков. (В процессорах фирмы Motorola при пересылке флаги «нуля» и «знака» изменяются, а в процессорах Intel — нет).
Команды ветвления по условию
B** / J*** от слов ( branch / jump). Их может быть 10. 30 штук. (например, BNE — переход, если не равно 0). Набор команд ветвления обсуждается при рассмотрении системы команд процессоров х86.
Адресация в командах ветвления может быть разного типа:
- а) полный адрес перехода;
- б) относительная (смещение);
- в) пропуск команды.
Но чаще всего — короткая относительная. Короткая, потому что участки, которые надо обходить, имеют не очень большую длину. Если необходимо перейти далеко, то надо комбинировать условный переход с безусловным JMP.
Команда безусловной передачи управления
JMP Адресация делается такой, чтобы можно было «прыгнуть» в любое место программной памяти («длинная» адресация).
Команда организации цикла
Позволяет организовать в программе структуры FOR . DO более простым способом, чем с помощью команд ветвления.
LOOP*
Команда обращения к подпрограмме (вызов процедуры)
JSR, JMS, CALL
Для экономии памяти, занимаемой программой, предоставляют возможность записать эту последовательность команд только в одном месте памяти и передавать управление к ней из разных мест вызывающей программы.
При обращении / возврате надо обеспечить:
- а) передачу управления в любое место памяти, поэтому «длинная» адресация;
- б) возврат в то место, откуда был вызов (т.е. место вызова должно автоматически запоминаться);
- в) запоминание промежуточных результатов, имеющихся к моменту вызова (содержимое регистров процессора, а, при рекурсивном вызове, процедуры, — надо запоминать и промежуточные результаты работы самой процедуры). Для запоминания чаще всего используется стек (участок ОЗУ или специальное ОЗУ со стековой адресацией). Часть вышеперечисленной информации запоминается автоматически при выполнении команды CALL, а сохранение оставшегося — дело программиста.
Команды ввода — вывода (обмена с периферийными устройствами)
Фактически команды ввода-вывода — это тоже команды пересылки. Основное отличие между пересылками «регистр-память» и пересылками из/в периферийное устройство ПУ состоит в том, что скорость функционирования ПУ может существенно отличаться от скорости работы процессора и поэтому ПУ далеко не всегда бывает готово к обмену.
- Устройств ввода-вывода (УВВ) много, надо как-то рбеспечить адресацию.
- Устройства ввода-вывода разные, надо как-то унифицировать правила обмена.
- Скорость работы УВВ отличается от скорости работы процессора, надо как-то синхронизировать работу процессора и УВВ.
Варианты структуры взаимодействия процессора и УВВ:
- а) УВВ имеют свою систему нумерации (адресации), и в системе команд есть отдельные команды I/O, (как в IBM PC):
•IN — команда ввода из ВНУ;
•OUT — команда вывода на ВНУ.
В этом случае в формате команды УВВ предусматривается своя система адресации.
- б) Обращение к УВВ такое же, как к памяти, часть адресов использована для ВНУ (ввод / вывод, отображенный на память).
Достоинства: можно использовать для обмена с ВНУ всю систему команд, в том числе, команды обработки, что сокращает программу.
Недостатки:
- команда ввода/вывода длиннее и дольше выполняется, чем в случае а);
- сложнее устройство декодирования адреса в ВНУ.
Еще статьи.
Страница 1 из 2
- В начало
- Назад
- 1
- 2
- Вперёд
- В конец
Источник
Как работает процессор?
Как работает процессор?
Инструмент проще, чем машина. Зачастую инструментом работают руками, а машину приводит в действие паровая сила или животное.
Компьютер тоже можно назвать машиной, только вместо паровой силы здесь электричество. Но программирование сделало компьютер таким же простым, как любой инструмент.
Процессор — это сердце/мозг любого компьютера. Его основное назначение — арифметические и логические операции, и прежде чем погрузиться в дебри процессора, нужно разобраться в его основных компонентах и принципах их работы.
Два основных компонента процессора
Устройство управления
Устройство управления (УУ) помогает процессору контролировать и выполнять инструкции. УУ сообщает компонентам, что именно нужно делать. В соответствии с инструкциями он координирует работу с другими частями компьютера, включая второй основной компонент — арифметико-логическое устройство (АЛУ). Все инструкции вначале поступают именно на устройство управления.
Существует два типа реализации УУ:
- УУ на жёсткой логике (англ. hardwired control units). Характер работы определяется внутренним электрическим строением — устройством печатной платы или кристалла. Соответственно, модификация такого УУ без физического вмешательства невозможна.
- УУ с микропрограммным управлением (англ. microprogrammable control units). Может быть запрограммирован для тех или иных целей. Программная часть сохраняется в памяти УУ.
УУ на жёсткой логике быстрее, но УУ с микропрограммным управлением обладает более гибкой функциональностью.
Арифметико-логическое устройство
Это устройство, как ни странно, выполняет все арифметические и логические операции, например сложение, вычитание, логическое ИЛИ и т. п. АЛУ состоит из логических элементов, которые и выполняют эти операции.
21 июня в 20:00, Онлайн, Беcплатно
Большинство логических элементов имеют два входа и один выход.
Ниже приведена схема полусумматора, у которой два входа и два выхода. A и B здесь являются входами, S — выходом, C — переносом (в старший разряд).
Схема арифметического полусумматора
Хранение информации — регистры и память
Как говорилось ранее, процессор выполняет поступающие на него команды. Команды в большинстве случаев работают с данными, которые могут быть промежуточными, входными или выходными. Все эти данные вместе с инструкциями сохраняются в регистрах и памяти.
Регистры
Регистр — минимальная ячейка памяти данных. Регистры состоят из триггеров (англ. latches/flip-flops). Триггеры, в свою очередь, состоят из логических элементов и могут хранить в себе 1 бит информации.
Прим. перев. Триггеры могут быть синхронные и асинхронные. Асинхронные могут менять своё состояние в любой момент, а синхронные только во время положительного/отрицательного перепада на входе синхронизации.
По функциональному назначению триггеры делятся на несколько групп:
- RS-триггер: сохраняет своё состояние при нулевых уровнях на обоих входах и изменяет его при установке единице на одном из входов (Reset/Set — Сброс/Установка).
- JK-триггер: идентичен RS-триггеру за исключением того, что при подаче единиц сразу на два входа триггер меняет своё состояние на противоположное (счётный режим).
- T-триггер: меняет своё состояние на противоположное при каждом такте на его единственном входе.
- D-триггер: запоминает состояние на входе в момент синхронизации. Асинхронные D-триггеры смысла не имеют.
Для хранения промежуточных данных ОЗУ не подходит, т. к. это замедлит работу процессора. Промежуточные данные отсылаются в регистры по шине. В них могут храниться команды, выходные данные и даже адреса ячеек памяти.
Принцип действия RS-триггера
Память (ОЗУ)
ОЗУ (оперативное запоминающее устройство, англ. RAM) — это большая группа этих самых регистров, соединённых вместе. Память у такого хранилища непостоянная и данные оттуда пропадают при отключении питания. ОЗУ принимает адрес ячейки памяти, в которую нужно поместить данные, сами данные и флаг записи/чтения, который приводит в действие триггеры.
Прим. перев. Оперативная память бывает статической и динамической — SRAM и DRAM соответственно. В статической памяти ячейками являются триггеры, а в динамической — конденсаторы. SRAM быстрее, а DRAM дешевле.
Команды (инструкции)
Команды — это фактические действия, которые компьютер должен выполнять. Они бывают нескольких типов:
- Арифметические: сложение, вычитание, умножение и т. д.
- Логические: И (логическое умножение/конъюнкция), ИЛИ (логическое суммирование/дизъюнкция), отрицание и т. д.
- Информационные: move , input , outptut , load и store .
- Команды перехода: goto , if . goto , call и return .
- Команда останова: halt .
Прим. перев. На самом деле все арифметические операции в АЛУ могут быть созданы на основе всего двух: сложение и сдвиг. Однако чем больше базовых операций поддерживает АЛУ, тем оно быстрее.
Инструкции предоставляются компьютеру на языке ассемблера или генерируются компилятором высокоуровневых языков.
В процессоре инструкции реализуются на аппаратном уровне. За один такт одноядерный процессор может выполнить одну элементарную (базовую) инструкцию.
Группу инструкций принято называть набором команд (англ. instruction set).
Тактирование процессора
Быстродействие компьютера определяется тактовой частотой его процессора. Тактовая частота — количество тактов (соответственно и исполняемых команд) за секунду.
Частота нынешних процессоров измеряется в ГГц (Гигагерцы). 1 ГГц = 10⁹ Гц — миллиард операций в секунду.
Чтобы уменьшить время выполнения программы, нужно либо оптимизировать (уменьшить) её, либо увеличить тактовую частоту. У части процессоров есть возможность увеличить частоту (разогнать процессор), однако такие действия физически влияют на процессор и нередко вызывают перегрев и выход из строя.
Выполнение инструкций
Инструкции хранятся в ОЗУ в последовательном порядке. Для гипотетического процессора инструкция состоит из кода операции и адреса памяти/регистра. Внутри управляющего устройства есть два регистра инструкций, в которые загружается код команды и адрес текущей исполняемой команды. Ещё в процессоре есть дополнительные регистры, которые хранят в себе последние 4 бита выполненных инструкций.
Ниже рассмотрен пример набора команд, который суммирует два числа:
- LOAD_A 8 . Это команда сохраняет в ОЗУ данные, скажем, . Первые 4 бита — код операции. Именно он определяет инструкцию. Эти данные помещаются в регистры инструкций УУ. Команда декодируется в инструкцию load_A — поместить данные 1000 (последние 4 бита команды) в регистр A .
- LOAD_B 2 . Ситуация, аналогичная прошлой. Здесь помещается число 2 ( 0010 ) в регистр B .
- ADD B A . Команда суммирует два числа (точнее прибавляет значение регистра B в регистр A ). УУ сообщает АЛУ, что нужно выполнить операцию суммирования и поместить результат обратно в регистр A .
- STORE_A 23 . Сохраняем значение регистра A в ячейку памяти с адресом 23 .
Вот такие операции нужны, чтобы сложить два числа.
Все данные между процессором, регистрами, памятью и I/O-устройствами (устройствами ввода-вывода) передаются по шинам. Чтобы загрузить в память только что обработанные данные, процессор помещает адрес в шину адреса и данные в шину данных. Потом нужно дать разрешение на запись на шине управления.
У процессора есть механизм сохранения инструкций в кэш. Как мы выяснили ранее, за секунду процессор может выполнить миллиарды инструкций. Поэтому если бы каждая инструкция хранилась в ОЗУ, то её изъятие оттуда занимало бы больше времени, чем её обработка. Поэтому для ускорения работы процессор хранит часть инструкций и данных в кэше.
Если данные в кэше и памяти не совпадают, то они помечаются грязными битами (англ. dirty bit).
Поток инструкций
Современные процессоры могут параллельно обрабатывать несколько команд. Пока одна инструкция находится в стадии декодирования, процессор может успеть получить другую инструкцию.
Однако такое решение подходит только для тех инструкций, которые не зависят друг от друга.
Если процессор многоядерный, это означает, что фактически в нём находятся несколько отдельных процессоров с некоторыми общими ресурсами, например кэшем.
Источник
Инструкции процессоров Intel
Как известно, программирование на Ассемблере — это написание исходных текстов, которые представляют собой набор команд (инструкций) процессора. В этом разделе публикуются подробные описания инструкций процессоров Интел и совместимых.
- AAA
- AAD
- AAM
- AAS
- ADC
- ADD
- AND
- CALL
- CBW
- CLC
- CLD
- CLI
- CMC
- CMP
- CMPSB
- CMPSW
- DEC
- DIV
- JB
- JBE
- JE
- JG
- JGE
- JL
- JLE
- JMP
- JNA
- JNB
- JNL
- INC
- LEA
- LDS
- LES
- LOOP
- MOV
- MUL
- NEG
- NOP
- NOT
- OR
- OUT
- RCL
- RCR
- RET
- SBB
- STC
- STD
- SUB
- TEST
- XCHG
- XLATB
- XOR
Я уже не раз об этом говорил, но снова повторю — вдруг кто не слышал )))
Каждый процессор имеет свой набор команд (инструкций)!
Поэтому, если вы изучите инструкции одного процессора, то это не значит, что вы легко сможете создавать программы на языке Ассемблера. Потому что язык Ассемблера одинаков для всех процессоров (ну почти одинаков). Однако инструкции, используемые в языке Ассемблера, могут быть (и так оно и есть) отличаться в зависимости от того, для какого процессора вы пишите программу.
Кроме того, команды с одинаковым именем могут по разному работать с разными процессорами.
Тем не менее, изучать то язык как-то надо. Поэтому обычно начинают с каких-то основ. Как правило, с изучения основных инструкций, которые очень похожи для большинства процессоров (и микроконтроллеров в том числе).
Набор базовых команд процессора
Именно с базовых инструкций лучше всего начать изучать Ассемблер. Такими базовыми командами (инструкциями) являются команды сложения, вычитания и других простых математических операций. А также команды перемещения значения из одного источника в другой (например, из области памяти в регистр).
Пример инструкций процессора Интел (8086): ADD (сложение), SUB (вычитание), MOV (перемещение) и т.п.
Базовым набором команд процессора Intel можно считать полный набор инструкций процессора 8086, у которого было 116 команд. У современных процессоров команд, конечно, намного больше (хотя это зависит от архитектуры — есть процессоры с сокращённым набором команд, где их всего несколько десятков).
Современные процессоры кроме основных команд имеют ещё и разные расширения, такие как набор команд MMX, которые предназначены для более быстрого выполнения определённых операций.
Вообще это тема очень объёмная и довольно сложная. Поэтому в очередной раз советую вам изучить (причём очень тщательно) какую-нибудь хорошую книгу по Ассемблеру (на этом сайте есть ссылки на такие книги).
Ну а я на этом краткий обзор закончу. Смотрите содержание раздела выше. Описания новых инструкций будут периодически добавляться по мере создания материала. Так что подписывайтесь на новости сайта, чтобы всегда быть в курсе последних событий.
Источник
Компьютерная Энциклопедия
Архитектура ЭВМ
Компоненты ПК
Интерфейсы
Мини блог
Самое читаемое
Процессор
Система команд процессора
Система команд процессора
Хотя наборы команд, реализованных в разных процессорах, различаются по количеству и перечню команд, по способам кодирования, по длине команд и по времени их выполнения, в системах команд разных процессоров есть весьма много общего. Знание этих общих свойств помогает быстрее освоить программирование нового процессора.
Разработчики процессора стремятся включить в систему команд прежде всего те действия, которые чаще требуются программистам. При этом наиболее часто требуемые действия стремятся реализовать в более коротких и быстрых командах. Перечень и свойства операций, выполняемых процессорными командами, тесно связаны со свойствами разных видов данных, которые обрабатываются на ЭВМ. Общего в разных системах команд достаточно много. Далее будем рассматривать главным образом это общее, часто упоминая, чем вызваны те или иные различия.
Для описания команд и их действия будем использовать мнемоники, принятые в языке Ассемблера. Язык Ассемблера специфичен для каждого типа процессора, так как включает в себя совокупность символических обозначений процессорных команд и способов адресации. Несмотря на специфичность, в языках Ассемблера для разных процессоров достаточно много общего, как в форме (в синтаксисе) так и в содержании отображаемых конструкциями языка понятий, поскольку и в различных процессорах также имеется много одинаковых, либо похожих свойств.
Примечание!
Для облегчения понимания кратко опишем основные правила записи команд на Ассемблере (они справедливы для многих известных автору Ассемблеров).
1) Как правило, ассемблерная строка однозначно соответствует одной процессорной команде.
2) Команда языка Ассемблера имеет следующую структуру:
Меткаl: КОП Оп1,Оп2,… ;Комментарий
Вот пример команды на языке ассемблера
L1: mov r1, #12A9h ;Загрузка регистра константой
Пояснение: Данный оператор содержит команду пересылки, которая загружает константу 12A9h в регистр процессора r1. Константа задана программистом в виде шестнадцатиричного числа.
Оператор включает в свой состав следующие поля:
- Метка — это символическое обозначение адреса. В мнемонике команды, приведенной выше, метка обозначает адрес, начиная с которого байты данной команды будут расположены в ОЗУ после загрузки программы в память. Имя метки часто используется как операнд в командах переходов. (Замечание 1: метки могут обозначать любой адрес, в том числе и тот, с которого расположен операнд. Замечание 2: конкретное значение физического адреса, соответствующего метке будет определено только после загрузки оттранслированной программы в память. При разных запусках этот физический адрес может получиться различным, если программист не принимает специальных мер по заданию определенного значения для этого адреса.).
- КОП — мнемоническое обозначение кода операции, выполняемой данной командой, например mov — переслать
- Оп1, Оп2,… — символические обозначения операндов, обычно они разделяются запятыми (хотя в некоторых Ассемблерах для разделения операндов используется пробел). Количество операндов в команде может быть различным, в большинстве современных процессоров — от 0 до 3. Если операндов больше, чем один, некоторые из них являются «источниками», а некоторые другие — «приемниками». Например, команда сложения
содержит указания на два операнда-приемника (слагаемые) — op1 и op2, а также указание на элемент данных (sum), куда команде следует поместить результат.
Количество операндов, которые программист может указать в команде, определено отдельно для каждой команды конкретного процессора его разработчиками. Для многих команд делают допустимым несколько форматов (см., например, команду целочисленного умножения imul для процессоров семейства х86).
В Ассемблерах процессоров фирмы Intel, по большей части, операнды-источники записываются левее операндов-приемников. В Ассемблерах других фирм это может быть наоборот. В качестве операнда можно использовать метку, в этом случае метка будет обозначать адрес, с которого располагается в памяти соответствующий операнд.
- Комментарий позволяет программисту записать пояснение к строке, и, как правило, игнорируется транслятором.
3) Хотя каждый процессор имеет свой Ассемблер (соответствующий его системе команд), многие мнемонические обозначения в разных Ассемблерах одинаковы для одинаковых операций. Этот факт сильно облегчает изучение следующего Ассемблера (и процессора), после того, как хотя бы один уже изучен.
4) При записи обозначений операндов используются условные обозначения выбранного программистом способа адресации. Обозначения различных способов адресации в разных ассемблерах также имеют много общего. Мы познакомимся с конкретными обозначениями при рассмотрении способов адресации.
Количество команд для разных типов ЭВМ колеблется от малых десятков до сотен. В таком множестве разобраться достаточно трудно, поэтому для рассмотрения разобьем все команды на группы (проклассифицируем). В разных книгах эта классификация тоже сделана по-разному. Выделяют от 3 до более 10 групп. (Наиболее обозримой для человека является классификация, содержащая на нижележащем уровне от 3 до 8 подклассов).
Команды пересылки
Пересылки общего назначения
Пересылки общего назначения MOV, L**, LD*, LOD* (от Load — загрузить), ST* (от Store — сохранить). Передают слово/байт данных из одной части ЭВМ в другую без изменения. Иногда в эту группу включают также и команды ввода-вывода для ЭВМ у которых область адресов внешних устройств включена в общее адресное пространство.
Пересылки из/в стек
Пересылки из/в стек: PUSH (втолкнуть), POP (вынуть). Обычно отличаются тем, что используют стековую адресацию (задаваемую неявно.
Пересылки двоичных слов
Пересылки двоичных слов, представляющих собой адреса операндов или части (компоненты) адресов. Для операций с адресами нередко в процессор вводят специальные команды. Это связано с тем, что разрядность адреса в процессоре не всегда совпадает с разрядностью АЛУ и регистров.
Пересылки между элементами вычислительного ядра
Пересылки между элементами вычислительного ядра (регистры процессора, элементы памяти) и периферийными устройствами. Хотя эти команды выполняют простую передачу двоичного слова, соответствующая группа команд (называемая командами ввода-вывода) обычно рассматривается отдельно.
Команды обработки
Арифметические команды
Минимальный набор арифметических команд очень мал. Это (например):
- сложение — ADD;
- инвертирование — COM / NOT (такая ЭВМ действительно была: PDP-8 (DEC));
- прибавление «единицы» — INC.
Все остальное можно сделать, комбинируя эти команды.
Однако в современном микропроцессоре арифметических команд обычно больше:
- SUB — вычитание;
- CMP — сравнение операндов. Эта команда выполняет вычитание операндов, по результату изменяет флаги, после чего результат теряется (команда предназначена для проверки условий);
- NEG — смена знака операнда;
- ASR, ASL, SAR, SAL — арифметические сдвиги операнда (Arithmetic Shift to Right/Left);
- INC, DEC — увеличение или уменьшение операнда на 1;
- ADC, SBC/SBB — операции с переносом C (carry-bit) — для выполнения действий с повышенной точностью, когда операнд занимает несколько слов;
- SXT, SEX, CBW, CWD, CDQ — расширение знака (преобразование в формат с повышенной разрядностью);
- MUL, DIV — умножение и деление беззнаковых и знаковых чисел.
- Набор операций с плавающей точкой, включающий обычно значительное количество команд (несколько десятков), в которые часто входят команды вычисления элементарных функций — Sin, Cos, Log, Exp и т.п.
Логические команды
Логические команды — это команды побитовой обработки.
- OR — поразрядное логическое сложение. Фактически это команда побитовой установки (т.е. записи «единицы» в заданные биты операнда). Пример:
or opr, 0Ch ;Установка в 1 битов в позициях 2 и 3 в операнде al
Если исходно в al содержался, например, операнд 1101 10012, то после выполнения команды в al будет содержаться: 1101 11 01 (отмечены установленные биты). Второй операнд — обычно константа, задавая которую, программист указывает, какие биты следует установить (он на жаргоне программистов носит название «маска»).
Можно описать действие команды OR следующим образом: команда безусловно устанавливает в «единицу» биты в тех позициях первого операнда, которые отмечены «единицами» во втором операнде (в маске), оставляя прочие биты первого операнда неизменными.
- AND — поразрядное логическое умножение. Это команда побитового сброса (записи в заданные биты «нулей»). Пример:
and bh, 0Fh ;Сброс старшей тетрады (старшего ниббла) в байтовом операнде.
Если, например, исходно в регистре bh содержался операнд 1101 10012, то после выполнения команды в регистре bh будет содержаться 0000 10012 (отмечены очищенные биты). Действие команды AND можно описать следующим образом: команда безусловно сбрасывает в 0 биты в тех позициях первого операнда, которые отмечены «нулями» в маске, оставляя прочие биты первого операнда неизменными.
- XOR — поразрядное исключающее ИЛИ, eXclusive OR (иногда на русском эту операцию называют «ЛИБО»). Эта двухоперандная команда фактически выполняет выборочное инвертирование битов. Например:
xor cl,0F0h ;Инвертирование битов старшей тетрады
Если исходно в cl содержалось 1101 10012, то после выполнения команды в cl будет содержаться 0010 10012 (отмечены проинвертированные биты). Действие команды xor можно описать так: команда инвертирует в первом операнде биты в позициях, которые отмечены в маске «единицами», оставляя прочие биты неизменными.
- TEST — проверка битовых полей. Команда чаще всего двухоперандная, выполняет поразрядное логическое умножение операндов и по результату операции изменяет состояние флагов «нуля» zf и «знака» sf, после чего результат операции теряется.
- NOT, COM — инвертирование операнда (замена значения каждого бита на противоположное). Это однооперандная команда.
Сдвиги
Операция сдвига состоит в одновременном перемещении содержимого операнда в разрядной сетке. Существует 3 разновидности операции сдвигов, которые различаются тем, что происходит с битами, выходящими за пределы разрядной сетки с одного «конца» операнда, и с освобождающимися позициями на другом его «конце».
- ROR, ROL, RCR, RCL — циклические сдвиги. При циклическом сдвиге то, что выходит за границу разрядной сетки, помещается в освобождающуюся позицию на другом конце операнда.
- ASR, ASL/SAR, SAL — арифметические сдвиги. Эта разновидность сдвига осуществляется таким образом, что результат оказывается эквивалентен умножению (при сдвиге влево) или делению (при сдвиге вправо) операнда на основание системы счисления, т.е. на 2. Сравните: если «сдвинуть» цифры в десятичном числе на разряд влево, результат будет эквивалентен исходному числу, умноженному на 10 (12 и 120 после сдвига). Более подробно особенности арифметического сдвига обсуждаются при рассмотрении системы команд процессоров х86.
- SHL, SHR — логические сдвиги. При выполнении логических сдвигов биты, «выдвигаемые» из разрядной сетки, теряются, а противоположный конец операнда заполняется «нулями».
Каждая из упомянутых разновидностей может также иметь варианты.
Например, в составе системы команд х86 различают пять видов сдвигов.
Проверки и передача управления
Эти команды позволяют реализовать конструкции:
IF . THEN . ELSE
REPEAT . UNTIL
WHILE . DO
FOR . DO
GOTO .
Для выполнения этих функций в каждом процессоре есть регистр флагов (регистр состояния), разряды которого устанавливаются или сбрасываются в зависимости от свойств результата предыдущей операции. Анализируются:
- равенство нулю;
- знак;
- перенос;
- арифметическое переполнение;
- перенос между тетрадами и др.
Команды проверки
- TEST — проверка отдельных битов (логическим умножением).
- CMP — сравнение операндов.
Кроме того, признаки устанавливаются после выполнения многих команд. Обратите внимание на то, что нет единых правил поведения признаков. (В процессорах фирмы Motorola при пересылке флаги «нуля» и «знака» изменяются, а в процессорах Intel — нет).
Команды ветвления по условию
B** / J*** от слов ( branch / jump). Их может быть 10. 30 штук. (например, BNE — переход, если не равно 0). Набор команд ветвления обсуждается при рассмотрении системы команд процессоров х86.
Адресация в командах ветвления может быть разного типа:
- а) полный адрес перехода;
- б) относительная (смещение);
- в) пропуск команды.
Но чаще всего — короткая относительная. Короткая, потому что участки, которые надо обходить, имеют не очень большую длину. Если необходимо перейти далеко, то надо комбинировать условный переход с безусловным JMP.
Команда безусловной передачи управления
JMP Адресация делается такой, чтобы можно было «прыгнуть» в любое место программной памяти («длинная» адресация).
Команда организации цикла
Позволяет организовать в программе структуры FOR . DO более простым способом, чем с помощью команд ветвления.
LOOP*
Команда обращения к подпрограмме (вызов процедуры)
JSR, JMS, CALL
Для экономии памяти, занимаемой программой, предоставляют возможность записать эту последовательность команд только в одном месте памяти и передавать управление к ней из разных мест вызывающей программы.
При обращении / возврате надо обеспечить:
- а) передачу управления в любое место памяти, поэтому «длинная» адресация;
- б) возврат в то место, откуда был вызов (т.е. место вызова должно автоматически запоминаться);
- в) запоминание промежуточных результатов, имеющихся к моменту вызова (содержимое регистров процессора, а, при рекурсивном вызове, процедуры, — надо запоминать и промежуточные результаты работы самой процедуры). Для запоминания чаще всего используется стек (участок ОЗУ или специальное ОЗУ со стековой адресацией). Часть вышеперечисленной информации запоминается автоматически при выполнении команды CALL, а сохранение оставшегося — дело программиста.
Команды ввода — вывода (обмена с периферийными устройствами)
Фактически команды ввода-вывода — это тоже команды пересылки. Основное отличие между пересылками «регистр-память» и пересылками из/в периферийное устройство ПУ состоит в том, что скорость функционирования ПУ может существенно отличаться от скорости работы процессора и поэтому ПУ далеко не всегда бывает готово к обмену.
- Устройств ввода-вывода (УВВ) много, надо как-то рбеспечить адресацию.
- Устройства ввода-вывода разные, надо как-то унифицировать правила обмена.
- Скорость работы УВВ отличается от скорости работы процессора, надо как-то синхронизировать работу процессора и УВВ.
Варианты структуры взаимодействия процессора и УВВ:
- а) УВВ имеют свою систему нумерации (адресации), и в системе команд есть отдельные команды I/O, (как в IBM PC):
•IN — команда ввода из ВНУ;
•OUT — команда вывода на ВНУ.
В этом случае в формате команды УВВ предусматривается своя система адресации.
- б) Обращение к УВВ такое же, как к памяти, часть адресов использована для ВНУ (ввод / вывод, отображенный на память).
Достоинства: можно использовать для обмена с ВНУ всю систему команд, в том числе, команды обработки, что сокращает программу.
Недостатки:
- команда ввода/вывода длиннее и дольше выполняется, чем в случае а);
- сложнее устройство декодирования адреса в ВНУ.
Еще статьи.
Страница 1 из 2
- В начало
- Назад
- 1
- 2
- Вперёд
- В конец
Источник