Система команд процессора устанавливается: Вопрос: Система команд процессора устанавливается: : Смотреть ответ

Содержание

Система команд микропроцессорного ядра MicroBlaze

Команды сдвига данных

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

Инструкции сдвига данных, относящиеся к основной подгруппе, поддерживаются всеми элементами семейства микропроцессорных ядер MicroBlaze по умолчанию. Дополнительные команды сдвига данных поддерживаются элементами этого семейства только при условии, что в процессе конфигурирования ядра MicroBlaze включена соответствующая опция.

Рис. 13. Выполнение основных операций арифметического и циклического сдвига данных

Основной набор инструкций сдвига содержит команды арифметического и циклического сдвига данных на один разряд вправо. Эти инструкции содержат два параметра. Первый параметр определяет номер регистра общего назначения, предназначенного для записи результата операции. Второй параметр указывает номер регистра, содержащего исходные данные. Форматы основных инструкций сдвига данных представлены в таблица 12.

Таблица 12. Форматы основных команд арифметического и циклического сдвига данных

Команда SRA Rd,Ra позволяет осуществить операцию арифметического сдвига вправо данных, которые содержатся в регистре с номером a, с сохранением состояния последнего (крайнего левого) разряда. Циклический сдвиг данных в регистре общего назначения с номером a на один разряд вправо, выполняемый через разряд переноса (займа) CARRY Flag регистра статуса, осуществляется с помощью команды SRC Rd,Ra. Инструкция SRL Rd,Ra предназначена для реализации операции арифметического сдвига данных, содержащихся в регистре с номером a, вправо на один разряд с записью нулевого бита в «освободившийся» (крайний левый) разряд. Результат основных сдвиговых операций, осуществляемых с помощью команд SRA, SRC и SRL, записывается в регистр общего назначения с номером d. При выполнении этих сдвиговых инструкций бит данных, «выталкиваемый» из регистра общего назначения с номером a в процессе сдвига, записывается в двадцать девятый разряд регистра статуса, который содержит значение флага переноса (займа) CARRY Flag. На рисунке 13 в наглядной форме показан процесс выполнения основных сдвиговых операций, поддерживаемых микропроцессорным ядром MicroBlaze.

Дополнительные команды сдвига позволяют осуществить операцию арифметического или циклического сдвига данных вправо или влево на несколько разрядов. При использовании этих инструкций необходимо указать три параметра.

Первые два параметра выполняют те же функции, что и в основных командах сдвига данных. Значение третьего параметра команды косвенно или явно определяет, на какое количество разрядов выполняется сдвиг.

В качестве третьего параметра дополнительных инструкций сдвига может указываться номер регистра общего назначения или непосредственно числовое значение. Если третий параметр команды представляет собой номер регистра, то последние пять разрядов (с 27-го по 31-й) содержимого этого регистра определяют, на какое количество разрядов производится сдвиг. Форматы дополнительных инструкций арифметического и циклического сдвига данных представлены в таблице 13.

Таблица 13. Форматы дополнительных команд арифметического и циклического сдвига данных

Для осуществления операции циклического сдвига данных, хранящихся в регистре с номером a, вправо на N разрядов предусмотрены команды BSRL Rd,Ra,Rb и BSRLI Rd,Ra,Imm. При использовании инструкции BSRL значение N определяют последние пять разрядов содержимого регистра с номером b.

В команде BSRLI значение N указывается непосредственно в виде константы Imm. Условные изображения, приведенные на рис. 14, поясняют выполнение дополнительных команд арифметического и циклического сдвига данных.

Рис. 14. Выполнение дополнительных команд арифметического и циклического сдвига данных

Команды BSRA Rd,Ra,Rb и BSRAI Rd,Ra,Imm предназначены для выполнения операций арифметического сдвига содержимого регистра общего назначения с номером a вправо на N разрядов. При этом в «освободившиеся» (крайние левые) разряды регистра Rd, используемого для записи результата операции, заносится значение нулевого разряда исходного регистра Ra (рис. 14). Количество разрядов N, на которое производится сдвиг, в инструкции BSRA определяется последними пятью разрядами содержимого регистра с номером b, а в команде BSRAI — значением константы Imm.

Операции циклического сдвига содержимого регистра общего назначения с номером a на N разрядов влево реализуются с помощью инструкций BSLL Rd,Ra,Rb и BSLLI Rd,Ra,Imm. Значение N при выполнении команды BSLL составляют пять последних разрядов содержимого регистра с номером b (рис. 14). В инструкции BSLLI это значение задается непосредственно в виде константы Imm.

Как видно из рис. 14, при использовании дополнительных сдвиговых команд циклический или арифметический сдвиг данных производится без участия разряда переноса (займа) CARRY Flag регистра статуса.

Команды преобразования типов данных

Команды преобразования типов данных позволяют трансформировать значения, представленные различным количеством двоичных разрядов, в 32-разрядное слово. Форматы этих инструкций приведены в таблице 14.

Таблица 14. Форматы инструкций преобразования типов данных

Команда SEXT8 Rd,Ra предназначена для выполнения операции знакового расширения однобайтового значения, которое содержится в регистре общего назначения с номером a, до 32-разрядного слова. Для осуществления операции знакового расширения 2-байтового значения, которое находится в регистре с номером a, используется инструкция SEXT16 Rd,Ra. Результат преобразования данных, выполняемого с помощью команд SEXT8 и SEXT16, записывается в регистр общего назначения с номером d. Процесс выполнения инструкций преобразования типов данных демонстрирует рисунок 15.

Рис. 15. Выполнение инструкций преобразования типов данных

Команду IMM Imm также можно отнести к группе инструкций преобразования типов данных. 16-разрядное значение Imm, указываемое в качестве единственного параметра инструкции, записывается в регистр, предназначенный для хранения временных данных. Это значение автоматически учитывается при выполнении следующей команды, относящейся к типу В, в качестве 16 старших разрядов значения, указываемого непосредственно в этой инструкции. Таким образом, инструкция IMM позволяет указывать 32-разрядные значения при использовании непосредственного способа определения операндов в команде.

Команды передачи данных

Данную группу составляют инструкции, предназначенные для организации обмена данными между памятью и регистрами общего назначения. В системе команд микропроцессорного ядра MicroBlaze предусмотрены инструкции, позволяющие передавать данные в виде слов размерностью четыре байта (32 двоичных разряда), полуслов размерностью 2 байта (16 двоичных разрядов) и побайтно (8 двоичных разрядов). При выполнении операций обращения к памяти используется косвенная адресация. Значение адреса памяти при выполнении операций чтения или записи представляется в виде суммы содержимого некоторого базового регистра общего назначения и смещения.

Номер базового регистра указывается в виде второго параметра соответствующей команды. При мнемонической форме записи команд передачи данных значение смещения определяется с помощью третьего параметра инструкции. Смещение может задаваться двумя способами. Первый способ позволяет определить значение смещения в виде содержимого одного из регистров общего назначения. При использовании второго способа значение смещения является результатом знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Поэтому в качестве третьего параметра команд передачи данных может использоваться номер регистра общего назначения или 16-разрядная константа Imm. Номер регистра общего назначения, который используется в качестве источника данных, записываемых в память, или для хранения информации, извлекаемой из памяти, указывается в виде первого параметра соответствующей команды передачи данных.

Форматы инструкций, предназначенных для загрузки данных различной длины из памяти в регистр общего назначения, приведены в таблице 15.

Таблица 15. Форматы команд передачи данных из памяти в регистр общего назначения

Инструкции LBU Rd,Ra,Rb и LBUI Rd,Ra,Imm используются для передачи байта данных из памяти в регистр общего назначения с номером d при различных способах определения значения смещения. Передаваемые данные записываются в младшие восемь разрядов регистра Rd. В остальные разряды этого регистра заносится нулевое значение. Рисунок 16 иллюстрирует выполнение операций побайтной загрузки данных.

Рис. 16. Выполнение инструкций передачи байта данных из памяти в регистр общего назначения

Команды LHU Rd,Ra,Rb и LHUI Rd,Ra,Imm выполняют загрузку полуслова данных, состоящего из 2 байт, из памяти в регистр общего назначения с номером d. Считанная информация размещается в младшие 16 разрядов регистра Rd. Неиспользуемые разряды этого регистра сбрасываются в состояние, соответствующее нулевому значению. Рисунок 17 в наглядной форме поясняет выполнение копирования полуслова данных из памяти в регистр общего назначения.

Рис. 17. Выполнение команд передачи полуслова данных из памяти в регистр общего назначения

Для передачи слова данных из памяти в регистр общего назначения предназначены команды LW Rd,Ra,Rb и LWI Rd,Ra,Imm. Процесс их выполнения показан на рисунке 18.

Рис. 18. Выполнение инструкций передачи слова данных из памяти в регистр общего назначения

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

Таблица 16. Форматы команд передачи данных из регистра общего назначения в память

Запись младшего байта данных из регистра с номером d в память по адресу, равному сумме значений содержимого регистров с номерами a и b или содержимого регистра Ra и результата знакового расширения константы Imm, осуществляется с помощью команд SB Rd,Ra,Rb и SBI Rd,Ra,Imm соответственно. Рисунке 19 поясняет выполнение операций побайтной передачи данных из регистра общего назначения в память.

Рис. 19. Выполнение команд побайтной передачи данных из регистра общегоназначения в память

Инструкции SH Rd,Ra,Rb и SHI Rd,Ra,Imm используются для передачи полуслова данных, состоящего из двух младших байт содержимого регистра общего назначения с номером d, в память. Выполнение команд записи полуслова данных из регистра общего назначения в память иллюстрирует рисунок 20.

Рис. 20. Выполнение инструкций копирования полуслова данных из регистраобщего назначения в память

Команды SW Rd,Ra,Rb и SWI Rd,Ra,Imm предназначены для сохранения в памяти содержимого регистра общего назначения с номером d. На рисунок 21 в наглядной форме показан процесс выполнения операций записи слова данных в память.

Рис. 21. Выполнение команд передачи слова данных из регистра общего назначения в память

Команды управления последовательностью выполнения операций в программе

Группа инструкций, используемых для передачи управления в программе, включает в себя:

  • команды безусловных переходов;
  • команды условных переходов;
  • команды возврата из подпрограмм и процедур обслуживания прерываний.

Система команд микропроцессорного ядра MicroBlaze содержит инструкции безусловных переходов, использующие как абсолютную, так и относительную адресацию. При абсолютной адресации исполнительный адрес, по которому осуществляется передача управления в программе, указывается в виде значения соответствующего параметра команды.

В случае применения инструкций переходов, использующих относительную адресацию, исполнительный адрес вычисляется как сумма текущего значения содержимого программного счетчика и смещения, задаваемого в виде значения соответствующего параметра команды. Для определения значения адреса перехода (при абсолютной адресации) или смещения (при относительной адресации) может применяться регистровый косвенный или непосредственный способы.

При регистровом косвенном способе значение адреса перехода или смещения содержится в регистре общего назначения, номер которого указывается в качестве соответствующего параметра команды. Непосредственный способ позволяет задавать требуемые значения адреса или смещения в виде составной части (соответствующего поля) инструкции. Как правило, при этом значение адреса или смещения представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова.

Большинство команд безусловных переходов представлено в двух вариантах: с немедленной передачей управления и с задержкой исполнения. При выполнении инструкции с немедленной передачей управления загрузка нового значения (адреса перехода) в программный счетчик осуществляется сразу же после завершения обработки этой команды.

Инструкции безусловных переходов с задержкой исполнения применяются с целью сокращения временных потерь, вызванных необходимостью перезагрузки конвейера после их выполнения. При использовании этих команд фактическая передача управления происходит только после завершения исполнения следующей инструкции, находящейся в фазе дешифрации. В конце мнемонического идентификатора таких инструкций присутствует символ D (Delay), указывающий на то, что исполнение этих команд осуществляется с дополнительной задержкой.

Микропроцессорное ядро MicroBlaze поддерживает четырнадцать разновидностей команд безусловной передачи управления в программе, форматы которых приведены в таблице 17.

Таблица 17. Форматы команд безусловной передачи управления в программе

В инструкциях безусловного перехода BR Rb и BRI Imm используется относительная адресация с регистровым косвенным и непосредственным указанием значения смещения соответственно. Команда BR передает управление по адресу, равному сумме значений текущего состояния программного счетчика и содержимого регистра общего назначения, номер которого указывается в качестве единственного параметра инструкции. При использовании команды BRI адрес перехода представляет собой сумму текущего значения программного счетчика и результата знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Рисунок 22 демонстрирует выполнение команд безусловного перехода с относительной адресацией.

Рис. 22. Выполнение инструкций безусловного перехода с относительнойадресацией

Команды BRD Rb и BRID Imm также предназначены для осуществления безусловного перехода с относительной адресацией, но передача управления осуществляется только после завершения обработки следующей (декодируемой) инструкции. Команды BRLD Rd,Rb и BRLID Rd,Imm выполняют те же операции, что и предыдущая пара инструкций, сохраняя предварительно текущее состояние программного счетчика в регистре общего назначения. Номер регистра, используемого для записи текущего состояния программного счетчика, указывается в качестве значения первого параметра этих команд. Рисунок 23 поясняет выполнение команд безусловного перехода с относительной адресацией и задержкой исполнения.

Рис. 23. Выполнение инструкций безусловного перехода с относительной адресацией и задержкой исполнения

Инструкции BRA Rb и BRAI Imm реализуют функцию безусловной передачи управления в программе с использованием абсолютной адресации, с регистровым косвенным и непосредственным указанием значения адреса перехода соответственно. В команде BRA значение адреса перехода определяется содержимым регистра общего назначения, номер которого указывается в качестве единственного параметра инструкции. Команда BRAI передает управление по адресу, который представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. Рис. 24 демонстрирует выполнение команд безусловного перехода с абсолютной адресацией.

Рис. 24. Выполнение инструкций безусловного перехода с абсолютной адресацией

Команды BRAD Rb и BRAID Imm позволяют осуществлять безусловный переход с абсолютной адресацией и задержкой исполнения, которая необходима для завершения обработки следующей инструкции (находящейся в стадии декодирования). Единственным отличием команд BRALD Rd,Rb и BRALID Rd,Imm от предыдущей пары инструкций является сохранение текущего состояния программного счетчика в регистре общего назначения, номер которого указывается в качестве значения первого параметра этих команд. На рис. 25 показана последовательность операций при выполнении команд безусловного перехода с абсолютной адресацией и задержкой исполнения.

Рис. 25. Выполнение инструкций безусловного перехода с абсолютной адресацией и задержкой исполнения

Инструкции BRK Rd,Rb и BRKI Rd,Imm предназначены для реализации в программе режима Break с передачей управления по указанному адресу. В этих командах применяется абсолютная адресация. Первым параметром в данных инструкциях является номер одного из регистров общего назначения, который используется для записи значения текущего состояния программного счетчика. Содержимое этого регистра впоследствии может использоваться в процессе вычисления адреса возврата при выполнении соответствующей инструкции. В качестве значения второго параметра команды BRK также указывается номер регистра, содержимое которого определяет адрес передачи управления. В инструкции BRKI адрес перехода представляет собой результат знакового расширения 16-разрядной константы Imm, указанной непосредственно в инструкции, до 32-разрядного слова. При исполнении рассмотренных команд флаг Break in Progress Flag (28-й разряд регистра статуса) переключается в установленное состояние. Процесс выполнения команд BRK и BRKI иллюстрирует рисунок 26.

Рис. 26. Выполнение команд BRK и BRKI

При условных переходах загрузка в программный счетчик нового адреса, по которому передается управление в программе, производится только при выполнении соответствующего условия. Если заданное условие не выполнено, то программный счетчик продолжает работу в инкрементном режиме. Проверка выполнения соответствующего условия заключается в сопоставлении с нулем значения содержимого одного из регистров общего назначения, номер которого указывается в качестве первого параметра инструкций условных переходов. Система команд микропроцессорного ядра MicroBlaze содержит инструкции, позволяющие анализировать выполнение одного из шести типов условий:

  • значение содержимого указанного регистра равно нулю;
  • значение содержимого указанного регистра не равно нулю;
  • значение содержимого указанного регистра меньше нуля;
  • значение содержимого указанного регистра меньше или равно нулю;
  • значение содержимого указанного регистра больше нуля;
  • значение содержимого указанного регистра больше или равно нулю.

В отличие от команд безусловного перехода в инструкциях условных переходов всегда используется относительная адресация с регистровым косвенным и непосредственным указанием значения смещения. Все команды условной передачи управления представлены в двух вариантах: с немедленным исполнением и с задержкой до завершения обработки следующей (декодируемой) инструкции. Форматы команд условных переходов представлены в таблице 18.

Таблица 18. Форматы команд условных переходов

Инструкции BEQ Ra,Rb и BEQI Ra,Imm инициируют передачу управления по заданному адресу при условии, что значение содержимого регистра общего назначения с номером a равно нулю. Адрес перехода формируется путем суммирования текущего значения программного счетчика и смещения, которое указывается в виде содержимого регистра Rb (в команде BEQ) или результата знакового расширения 16-разрядной константы Imm до 32-разрядного слова (в команде BEQI). При исполнении команд BNE Ra,Rb и BNEI Ra,Imm управление передается инструкции с указанным адресом только в случае, если значение содержимого регистра общего назначения с номером a неравно нулю. Инструкции BLT Ra,Rb и BLTI Ra,Imm загружают новое значение адреса в программный счетчик при условии, что значение содержимого регистра Ra меньше нуля.

С помощью команд BLE Ra,Rb и BLEI Ra,Imm осуществляется переход к выполнению инструкции с указанным адресом, если содержимое регистра Ra меньше или равно нулю.

Инструкции BGT Ra,Rb и BGTI Ra,Imm предназначены для передачи управления в программе по новому адресу при условии, что значение содержимого регистра Ra больше нуля. Команды BGE Ra,Rb и BGEI Ra,Imm позволяют выполнить переход к инструкции с требуемым адресом, если содержимое регистра Ra больше или равно нулю. Рисунок 27 поясняет выполнение команд условных переходов.

Рис. 27. Выполнение инструкций условных переходов

Инструкции BEQD Ra,Rb, BNED Ra,Rb, BLTD Ra,Rb, BLED Ra,Rb, BGTD Ra,Rb, BGED Ra,Rb, BEQID Ra,Imm, BNEID Ra,Imm, BLTID Ra,Imm, BLEID Ra,Imm, BGTID Ra,Imm, BGEID Ra,Imm выполняют те же функции, что и команды BEQ, BNE, BLT, BLE, BGT, BGE, BEQI, BNEI, BLTI, BLEI, BGTI, BGEI, рассмотренные выше. Отличие заключается в том, что передача управления производится при выполнении соответствующего условия только после завершения обработки следующей инструкции, находящейся в стадии дешифрации. Процесс выполнения команд условного перехода с задержкой исполнения показан на рисунке 28.

Рис. 28. Выполнение инструкций условного перехода с задержкой исполнения

В системе команд микропроцессорного ядра MicroBlaze представлено три инструкции возврата управления в программе:

  • команда возврата из подпрограмм;
  • команда возврата из процедур обслуживания прерываний;
  • команда выхода из режима Break.

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

Все три инструкции возврата управления используют два параметра. В качестве значения первого параметра указывается номер регистра общего назначения, в котором содержится базовый адрес передачи управления.

Вторым параметром является 16-разрядная константа, значение которой определяется непосредственно в составе инструкции. Результат знакового расширения этой константы до 32-разрядного слова используется в качестве значения смещения при относительной адресации. Форматы инструкций возврата управления приведены в таблице 19.

Таблица 19. Форматы команд возврата управления в программе

Инструкция возврата из процедуры обслуживания прерывания RTID Ra,Imm предназначена для передачи управления программе, при выполнении которой поступил запрос прерывания. Адрес возврата вычисляется как сумма содержимого регистра общего назначения с номером a и результата знакового расширения константы Imm до 32-разрядного значения. После завершения исполнения этой команды флаг Interrupt Enable Flag (30-й разряд регистра статуса) переключается в установленное состояние (высокого логического уровня), разрешая тем самым обработку последующих прерываний. Выполнение инструкции возврата из процедуры обслуживания прерывания демонстрирует рисунок 29.

Рис. 29. Выполнение инструкций возврата управления в программе

Безусловное завершение выполняемой подпрограммы и передача управления основной программе или подпрограмме, из которой производилось обращение к этой процедуре, осуществляется с помощью команды RTSD Ra,Imm. При возврате из подпрограмм выполняется та же последовательность действий, что и при возврате из процедуры обслуживания прерывания, но значения флагов регистра статуса не изменяются (рис. 29).

Команда RTBD Ra,Imm используется для выхода из режима Break с передачей управления по адресу, значение которого равно сумме содержимого регистра общего назначения с номером a и результата знакового расширения константы Imm. После ее исполнения флаг Break in Progress Flag (двадцать восьмой разряд регистра статуса) переключается в сброшенное состояние (низкого логического уровня) (рис. 29).

Группа инструкций ввода/вывода

Интерфейс ввода-вывода микропроцессорного ядра MicroBlaze, соответствующий спецификации FSL (Fast Simplex Link), поддерживает два режима передачи данных: с блокировкой и без блокировки работы процессора. Для каждого из этих режимов предусмотрены соответствующие команды ввода-вывода. При выполнении инструкций, использующих режим блокировки, работа процессора приостанавливается до завершения считывания или записи достоверных данных. Исполнение команд ввода-вывода без блокировки не останавливает функционирование процессора независимо от того, могут ли быть считаны или переданы достоверные данные через указанный канал интерфейса FSL.

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

Тип передаваемого слова данных определяет значение специального контрольного бита.

В случае передачи информационных данных значение этого бита должно быть равно нулю. Для идентификации управляющих данных используется единичное значение контрольного бита. Поэтому для передачи информационных и управляющих данных используются различные варианты инструкций ввода-вывода.

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

Система команд микропроцессорного ядра MicroBlaze включает в себя четыре инструкции, предназначенные для чтения данных различного типа, поступающих через входной интерфейс FSL. Информация о форматах этих команд содержится в таблице 20.

Таблица 20. Форматы команд чтения данных, передаваемых через интерфейс FSL

Команда GET Rd,FSLn выполняет операцию чтения информационных данных из n-го канала интерфейса FSL в регистр общего назначения с номером d, используя режим блокировки процессора. Инструкция nGET Rd,FSLn предназначена для чтения информационных данных из n-го канала интерфейса FSL в регистр Rd без блокировки. Считывание управляющих данных из n-го канала интерфейса FSL в регистр с номером d в режиме блокировки осуществляется с помощью команды cGET Rd,FSLn. Для чтения управляющих данных из n-го канала интерфейса FSL в регистр Rd без блокировки используется инструкция ncGET Rd,FSLn. Если при выполнении операций чтения значение контрольного бита не соответствует ожидаемому типу данных, то флаг FSL Error Flag (27-й разряд регистра статуса MSR) устанавливается в состояние, соответствующее высокому логическому уровню. При выполнении команд чтения без блокировки для достоверных данных флаг переноса Carry Flag (двадцать девятый разряд регистра статуса) сбрасывается в состояние низкого логического уровня. В случае чтения неверных данных флаг переноса устанавливается в состояние высокого логического уровня. Рисунок 30 поясняет выполнение инструкций чтения данных из каналов интерфейса FSL.

Рис. 30. Осуществление операций чтения данных из каналов интерфейса FSL

Для передачи данных различного типа из регистра общего назначения в выходной канал интерфейса FSL предусмотрены четыре варианта инструкций, форматы которых приведены в таблице 21.

Таблица 21. Форматы команд записи данных в выходной канал интерфейса FSL

Передача информационных данных из регистра общего назначения с номером a в n-й канал интерфейса FSL в режиме блокировки осуществляется с помощью команды PUT Ra,FSLn. Для записи информационных данных из регистра Ra в n-й канал интерфейса FSL без блокировки предназначена команда nPUT Ra,FSLn. Команда cPUT Ra,FSLn выполняет операцию передачи управляющих данных из регистра Ra в n-й канал интерфейса FSL, используя режим блокировки процессора. Инструкция ncPUT Ra,FSLn осуществляет вывод управляющих данных из регистра Ra в n-й канал интерфейса FSL без блокировки. При успешном выполнении команд передачи данных из регистра общего назначения в выходной канал интерфейса FSL флаг переноса Carry Flag сбрасывается в состояние низкого логического уровня. В противном случае флаг переноса устанавливается в состояние высокого логического уровня. Рисунок 31 поясняет выполнение команд передачи данных различного типа из регистра общего назначения в выходной канал интерфейса FSL.

Рис. 31. Выполнение инструкций передачи данных из регистра общего назначения в выходные каналы интерфейса FSL

Группа специальных команд

Инструкции, входящие в данную группу, предназначены для копирования содержимого регистров специального назначения в регистры общего назначения и наоборот. Форматы специальных команд представленыв таблице 22.

Таблица 22. Форматы специальных команд

Инструкция MTS S1,Ra позволяет загрузить содержимое выбранного регистра общего назначения Ra в регистр состояния MSR. Данные, записанные в регистр состояния с помощью команды MTS, вступают в силу через один цикл после исполнения этой инструкции.

Команда MFS Rd,Sa выполняет копирование содержимого одного из регистров специального назначения Sa в регистр общего назначения с номером d. При использовании в инструкции MFS в качестве второго параметра S1 производится копирование содержимого регистра состояния MSR. Если в качестве второго параметра указано значение S0, то в регистр общего назначения Rd записывается содержимое программного счетчика. Рисунок 32 иллюстрирует выполнение специальных инструкций.

Рис. 32. Выполнение специальных инструкций

Инструкции записи в кэш-память

Для работы с кэш-памятью в системе команд микропроцессорного ядра MicroBlaze предусмотрены две инструкции, позволяющие загружать содержимое выбранного регистра общего назначения в кэш-память данных и в кэш-память команд. Эти инструкции используют два параметра. В качестве первого параметра указывается номер регистра общего назначения, который используется для хранения адреса записи. Второй параметр определяет номер регистра общего назначения, содержимое которого копируется в кэш-память. Форматы команд, предназначенных для работы с кэш-памятью, определены в таблице 23.

Таблица 23. Форматы команд записи данных и команд в кэш+память

Инструкция WIC Ra,Rb используется для загрузки содержимого регистра общего назначения Rb в кэш-память команд. Инструкция WDC Ra,Rb выполняет операцию копирования содержимого регистра Rb в кэш-память данных. Рисунок 33 поясняет процессвыполнения этих команд.

Рис. 33. Осуществление операций записи данных и команд в кэш+память

На этом завершается описание системы команд микропроцессорного ядра MicroBlaze. Прежде чем приступить к изучению процесса разработки устройств на основе этого модуля, необходимо познакомиться с программными средствами проектирования, составной частью которых является ядро MicroBlaze.

Поэтому в следующей публикации цикла будут рассмотрены характеристики и структура пакета Embedded Development Kit (EDK), предлагаемого фирмой Xilinx в качестве основного инструмента разработки и отладки встраиваемых микропроцессорных систем на основе ПЛИС серий FPGA.

Полный набор команд процессора 8086

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

SREG: DS, ES, SS, и только как второй операнд: CS.

immediate: 5, -24, 3Fh, 10001101b, и т.п…

Эти знаки используются для отображения состояния флагов:

1 — команда устанавливает этот флаг в 1.
0 — команда устанавливает этот флаг в 0.
r — значение флага зависит от результата выполнения команды.
? — значение флага не определено (может быть 1 или 0).

Некоторые команды генерируются в абсолютно одинаковый машинный код, поэтому дизассемблер может иметь проблемы при декодировании вашего оригинального кода. Это особенно важно в командах условного перехода (см. «Управление ходом программы»).

Команда Операнды Описание  
AAA Нет операндов Коррекция ASCII-формата после сложения.
Корректирует результат в регистрах AH и AL после сложения при работе с BCD-значениями.

Она работает согласно следующему алгоритму

Если младшие (правые) четыре бита
регистра AL > 9 или флаг AF = 1, то:

  • AL = AL + 6
  • AH = AH + 1
  • AF = 1
  • CF = 1
иначе в любом случае:
очистить старшие четыре бита регистра AL.

Пример:

MOV AX, 15   ; AH = 00, AL = 0Fh
AAA          ; AH = 01, AL = 05
RET
 
AAD Нет операндов Коррекция ASCII-формата перед делением.
Подготавливает два BCD-значения для деления.

Алгоритм:

  • AL = (AH * 10) + AL
  • AH = 0

Пример:

MOV AX, 0105h   ; AH = 01, AL = 05
AAD             ; AH = 00, AL = 0Fh (15)
RET
 
AAM Нет операндов Коррекция ASCII-формата после умножения.
Корректирует результат умножения двух BCD-значений.

Алгоритм:

  • AH = AL / 10
  • AL = остаток

Пример:

MOV AL, 15   ; AL = 0Fh
AAM          ; AH = 01, AL = 05
RET
 
AAS Нет операндов Коррекция ASCII-формата после вычитания.
Корректирует результат в регистрах AH и AL после вычитания при работе с BCD-значениями.

Алгоритм:

если младшие четыре бита
регистра AL > 9 или AF = 1, то:

  • AL = AL — 6
  • AH = AH — 1
  • AF = 1
  • CF = 1
иначе в любом случае:
очистить старшие четыре бита регистра AL.

Пример:

MOV AX, 02FFh  ; AH = 02, AL = 0FFh
AAS            ; AH = 01, AL = 09
RET
 
ADC REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Сложение с переносом.

Алгоритм:

operand1 = operand1 + operand2 + CF

Пример:

STC        ; установить CF = 1
MOV AL, 5  ; AL = 5
ADC AL, 1  ; AL = 7
RET
 
ADD REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Сложение.

Алгоритм:

operand1 = operand1 + operand2

Пример:

MOV AL, 5   ; AL = 5
ADD AL, -3  ; AL = 2
RET
 
AND REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Логическое И между всеми битами двух операндов. Результат записывается в 1-й операнд.

Действуют следующие правила:

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

Пример:

MOV AL, 'a'        ; AL = 01100001b
AND AL, 11011111b  ; AL = 01000001b  ('A')
RET
 
CALL имя процедуры
метк
4-х байтовый адрес
Передает управление процедуре, заносит в стек адрес следующей команды (из IP). 4-х байтовый адрес может быть введен в следующей форме: 1234h:5678h, первое значение — сегмент, второе значение — смещение (в случае дальнего вызова регистр CS также заносится в стек).

Пример:

#make_COM#
ORG 100h  ; для СОМ-файла.

CALL p1

ADD AX, 1

RET         ; вернуться в операционную систему.

p1 PROC     ; объявление процедуры.
    MOV AX, 1234h
    RET     ; возвращение в программу.
p1 ENDP
C Z S O P A
не изменяются
 
CBW Нет операндов Преобразует байт в слово.

Алгоритм:

Если старший бит AL = 1, то:
иначе
Пример:

MOV AX, 0   ; AH = 0, AL = 0
MOV AL, -5  ; AX = 000FBh (251)
CBW         ; AX = 0FFFBh (-5)
RET
C Z S O P A
не изменяются
 
CLC Нет операндов Очищает флаг переноса (CF).

Алгоритм:

CF = 0

 

CLD Нет операндов Очищает флаг направления (DF). Clear Direction flag. Значения регистров SI и DI будут увеличиваться командами: CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB, STOSW.

Алгоритм:

DF = 0

 

CLI Нет операндов Очищает флаг прерывания (IF). Это отключает аппаратные прерывания.

Алгоритм:

IF = 0

 

CMC Нет операндов Переключает флаг переноса, т.е. инвертирует значение CF.

Алгоритм:

если CF = 1 то CF = 0
если CF = 0 то CF = 1

 

CMP REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Сравнение.

Алгоритм:

operand1 — operand2

результат никуда не записывается, флаги устанавливаются (OF, SF, ZF, AF, PF, CF) в соответствии с результатом.

Пример:

MOV AL, 5
MOV BL, 5
CMP AL, BL  ; AL = 5, ZF = 1 (значит равно!)
RET
 
CMPSB Нет операндов Сравнивает байты: ES:[DI] из DS:[SI].

Алгоритм:

  • DS:[SI] — ES:[DI]
  • установить флаги в соответствии с результатом:
    OF, SF, ZF, AF, PF, CF
  • если DF = 0 то иначе
Пример:
см. cmpsb.asm в каталоге Samples.

 

CMPSW Нет операндов Сравнивает слова: ES:[DI] из DS:[SI].

Алгоритм:

  • DS:[SI] — ES:[DI]
  • установить флаги в соответствии с результатом:
    OF, SF, ZF, AF, PF, CF
  • если DF = 0 то иначе
Пример:
см. cmpsw.asm в каталоге Samples.

 

CWD Нет операндов Преобразует слово в двойное слово.

Алгоритм:

если старший бит AX = 1, то:
иначе
Пример:

MOV DX, 0   ; DX = 0
MOV AX, 0   ; AX = 0
MOV AX, -5  ; DX AX = 00000h:0FFFBh
CWD         ; DX AX = 0FFFFh:0FFFBh
RET
C Z S O P A
не изменяются
 
DAA Нет операндов Десятичная коррекция после сложения.
Корректирует результат сложения двух упакованных BCD-значений.

Алгоритм:

если младшие четыре бита AL > 9 или AF = 1, то:
если AL > 9Fh или CF = 1, то:
Пример:

MOV AL, 0Fh  ; AL = 0Fh (15)
DAA          ; AL = 15h
RET
 
DAS Нет операндов Десятичная коррекция после вычитания.
Корректирует результат вычитания двух упакованных BCD-значений.

Алгоритм:

если младшие четыре бита AL > 9 или AF = 1, то:
если AL > 9Fh или CF = 1, то:
Пример:

MOV AL, 0FFh  ; AL = 0FFh (-1)
DAS           ; AL = 99h, CF = 1
RET
 
DEC REG
memory
Декремент.

Алгоритм:

operand = operand — 1


Пример:

MOV AL, 255  ; AL = 0FFh (255 или -1)
DEC AL       ; AL = 0FEh (254 или -2)
RET
CF — не изменяется!  
DIV REG
memory
Беззнаковое деление.

Алгоритм:

если операнд — это байт:
AL = AX / операнд
AH = остаток (модуль)
если операнд — это слово:
AX = (DX AX) / операнд
DX = остаток (модуль)
Пример:
MOV AX, 203   ; AX = 00CBh
MOV BL, 4
DIV BL        ; AL = 50 (32h), AH = 3
RET
 
HLT Нет операндов Останов системы.

Пример:

MOV AX, 5
HLT
 
IDIV REG
memory
Знаковое деление.

Алгоритм:

если операнд — это байт:
AL = AX / операнд
AH = остаток (модуль)
если операнд — это слово:
AX = (DX AX) / операнд
DX = остаток (модуль)
Пример:
MOV AX, -203 ; AX = 0FF35h
MOV BL, 4
IDIV BL      ; AL = -50 (0CEh), AH = -3 (0FDh)
RET
 
IMUL REG
memory
Знаковое умножение.

Алгоритм:

если операнд — это байт:
AX = AL * операнд.
если операнд — это слово:
(DX AX) = AX * операнд.
Пример:
MOV AL, -2
MOV BL, -4
IMUL BL      ; AX = 8
RET
CF=OF=0 если результат вписывается в операнд IMUL.  
IN AL, im.byte
AL, DX
AX, im.byte
AX, DX
Помещает данные из порта в AL или AX.
Второй операнд — это номер порта. Если требуется доступ к порту с номером более 255, то нужно использовать регистр DX.
Пример:
IN AX, 4  ; получить состояние светофора.
IN AL, 7  ; получить состояние шагового дигателя.
C Z S O P A
не изменяются
 
INC REG
memory
Инкремент.

Алгоритм:

operand = operand + 1

Пример:

MOV AL, 4
INC AL       ; AL = 5
RET
CF — не изменяется!  
INT immediate byte Выполняет прерывание программы и передает управление функции, указанной в immediate byte (0..255).

Алгоритм:

    Поместить в стек:
    • флаговый регистр
    • CS
    • IP
  • IF = 0
  • Передать управление процедуре прерывания

Пример:

MOV AH, 0Eh  ; телетайп.
MOV AL, 'A'
INT 10h      ; Прерывание BIOS.
RET
C Z S O P A I
не изменяются 0
 
INTO Нет операндов Приводит к прерыванию при возникновении переполнения (флаг OF = 1) и выполняет команду IRET 4.

Алгоритм:

если OF = 1 то INT 4

Пример:

; -5 - 127 = -132 (за пределами диапазона -128..127)
; результат вычитания (SUB) неправильный (124),
; поэтому OF = 1:
MOV AL, -5
SUB AL, 127   ; AL = 7Ch (124)
INTO          ; ошибка процесса.
RET
 
IRET Нет операндов Возврат из обработки прерывания.

Алгоритм:

    Выгрузить из стека:
    • IP
    • CS
    • регистр флагов
C Z S O P A
выгруженные
 

JA метка Короткий переход по «выше» или «не ниже или равно». Используется после проверки беззнаковых данных для передачи управления по другому адресу.

Алгоритм:

    если (CF = 0) и (ZF = 0) то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 250
   CMP AL, 5
   JA label1
   PRINT 'AL не больше 5'
   JMP exit
label1:
   PRINT 'AL больше 5'
exit:
   RET
C Z S O P A
не изменяются
 
JAE метка Короткий переход, если первый операнд «больше или равен» второму операнду. (в результате выполнения команды CMP). Беззнаковый.

Алгоритм:

    если CF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 5
   CMP AL, 5
   JAE label1
   PRINT 'AL не больше 5'
   JMP exit
label1:
   PRINT 'AL больше или равен 5'
exit:
   RET
C Z S O P A
не изменяются
 
JB метка Короткий переход, если первый операнд «меньше» второго операнда (в результате выполнения команды CMP). Беззнаковый.

Algorithm:

    если CF = 1 то выполниь переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 1
   CMP AL, 5
   JB  label1
   PRINT 'AL не меньше 5'
   JMP exit
label1:
   PRINT 'AL меньше 5'
exit:
   RET
C Z S O P A
не изменяются
 
JBE метка Короткий переход, если первый операнд «меньше» или «равен» второму операнду (в результате выполнения команды CMP). Беззнаковый.

Алгоритм:

    если CF = 1 или ZF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 5
   CMP AL, 5
   JBE  label1
   PRINT 'AL не меньше 5'
   JMP exit
label1:
   PRINT 'AL меньше или равен 5'
exit:
   RET
C Z S O P A
не изменяются
 
JC метка Короткий переход если флаг переноса установлен в 1.

Алгоритм:

    если CF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 255
   ADD AL, 1
   JC  label1
   PRINT 'нет переноса.'
   JMP exit
label1:
   PRINT 'имеем перенос.'
exit:
   RET
C Z S O P A
не изменяются
 
JCXZ метка Короткий переход, если регистр СХ равен 0.

Algorithm:

    если CX = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV CX, 0
   JCXZ label1
   PRINT 'CX не равен нулю.'
   JMP exit
label1:
   PRINT 'CX равен нулю.'
exit:
   RET
C Z S O P A
не изменяются
 
JE метка Короткий переход, если первый операнд равен второму операнду (в результате выполнения команды CMP). Знаковый/Беззнаковый.

Алгоритм:

    если ZF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 5
   CMP AL, 5
   JE  label1
   PRINT 'AL не равен 5.'
   JMP exit
label1:
   PRINT 'AL равен 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JG метка Короткий переход, если первый операнд больше второго операнда (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если (ZF = 0) и (SF = OF) то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 5
   CMP AL, -5
   JG  label1
   PRINT 'AL не больше -5.'
   JMP exit
label1:
   PRINT 'AL больше -5.'
exit:
   RET
C Z S O P A
не изменяются
 
JGE метка Короткий переход, если первый операнд больше или равен второму операнду (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если SF = OF то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, -5
   JGE  label1
   PRINT 'AL < -5'
   JMP exit
label1:
   PRINT 'AL >= -5'
exit:
   RET
C Z S O P A
не изменяются
 
JL метка Короткий переход, если первый операнд меньше второго операнда (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если SF <> OF то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, -2
   CMP AL, 5
   JL  label1
   PRINT 'AL >= 5.'
   JMP exit
label1:
   PRINT 'AL < 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JLE метка Короткий переход, если первый операнд меньше или равен второму операнду (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если SF <> OF или ZF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, -2
   CMP AL, 5
   JLE label1
   PRINT 'AL > 5.'
   JMP exit
label1:
   PRINT 'AL <= 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JMP метка
4-х байтовый адрес
Безусловный переход. Передает управление другому участку программы. 4-х байтовый адрес может быть введен в такой форме: 1234h:5678h, первое значение — сегмент, второе значение — смещение.

Алгоритм:

    выполнить переход в любом случае
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 5
   JMP label1    ; "перешагнуть" через две строки!
   PRINT 'Нет перехода!'
   MOV AL, 0
label1:
   PRINT 'Добрались сюда!'
   RET
C Z S O P A
не изменяются
 
JNA метка Короткий переход, если первый операнд не больше второго операнда (в результате выполнения команды CMP). Беззнаковый.

Алгоритм:

    если CF = 1 или ZF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, 5
   JNA label1
   PRINT 'AL больше 5.'
   JMP exit
label1:
   PRINT 'AL не больше 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JNAE метка Короткий переход, если первый операнд не больше и не равен второму операнду (в результате выполнения команды CMP). Беззнаковый.

Алгоритм:

    если CF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, 5
   JNAE label1
   PRINT 'AL >= 5.'
   JMP exit
label1:
   PRINT 'AL < 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JNB метка Короткий переход, если первый операнд не меньше второго операнда (в результате выполнения команды CMP). Беззнаковый.

Алгоритм:

    если CF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 7
   CMP AL, 5
   JNB label1
   PRINT 'AL < 5.'
   JMP exit
label1:
   PRINT 'AL >= 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JNBE метка Короткий переход, если первый операнд не меньше и не равен второму операнду (в результате выполнения команды CMP). Беззнаковый.

Алгоритм:

    если (CF = 0) и (ZF = 0) то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 7
   CMP AL, 5
   JNBE label1
   PRINT 'AL <= 5.'
   JMP exit
label1:
   PRINT 'AL > 5.'
exit:
   RET
C Z S O P A
не изменяются
 
JNC метка Короткий переход, если флаг переноса установлен в ноль.

Алгоритм:

    если CF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   ADD AL, 3
   JNC  label1
   PRINT 'имеем перенос.'
   JMP exit
label1:
   PRINT 'нет переноса.'
exit:
   RET
C Z S O P A
не изменяются
 
JNE метка Короткий переход, если первый операнд не равен второму операнду (в результате выполнения команды CMP). Знаковый/Беззнаковый.

Алгоритм:

    если ZF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, 3
   JNE  label1
   PRINT 'AL = 3.'
   JMP exit
label1:
   PRINT 'Al <> 3.'
exit:
   RET
C Z S O P A
не изменяются
 
JNG метка Короткий переход, если первый операнд не больше второго операнда (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если (ZF = 1) и (SF <> OF) то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, 3
   JNG  label1
   PRINT 'AL > 3.'
   JMP exit
label1:
   PRINT 'Al <= 3.'
exit:
   RET
C Z S O P A
не изменяются
 
JNGE метка Короткий переход, если первый операнд не больше и не равен второму операнду (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если SF <> OF то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, 3
   JNGE  label1
   PRINT 'AL >= 3.'
   JMP exit
label1:
   PRINT 'Al < 3.'
exit:
   RET
C Z S O P A
не изменяются
 
JNL метка Короткий переход, если первый операнд не меньше второго операнда (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если SF = OF то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, -3
   JNL label1
   PRINT 'AL < -3.'
   JMP exit
label1:
   PRINT 'Al >= -3.'
exit:
   RET
C Z S O P A
не изменяются
 
JNLE метка Короткий переход, если первый операнд не меньше и не равен второму операнду (в результате выполнения команды CMP). Знаковый.

Алгоритм:

    если (SF = OF) и (ZF = 0) то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 2
   CMP AL, -3
   JNLE label1
   PRINT 'AL <= -3.'
   JMP exit
label1:
   PRINT 'Al > -3.'
exit:
   RET
C Z S O P A
не изменяются
 
JNO метка Короткий переход, если нет переполнения.

Алгоритм:

    если OF = 0 то выполнить переход
Пример:

; -5 - 2 = -7 (в пределах -128..127)
; результат команды SUB (вычитание) правильный,
; поэтому OF = 0:

include 'emu8086.inc'
#make_COM#
ORG 100h
  MOV AL, -5
  SUB AL, 2   ; AL = 0F9h (-7)
JNO  label1
  PRINT 'переполнение!'
JMP exit
label1:
  PRINT 'нет переполнения.'
exit:
  RET
C Z S O P A
не изменяется
 
JNP метка Короткий переход, если нет паритета, или паритет нечетный. Проверяются только младшие 8 битов результата. Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если PF = 0 то выполнить переход
Example:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 00000111b   ; AL = 7
   OR  AL, 0           ; только установка флагов.
   JNP label1
   PRINT 'паритет четный.'
   JMP exit
label1:
   PRINT 'паритет нечетный.'
exit:
   RET
C Z S O P A
не изменяются
 
JNS метка Короткий переход, если нет знака (если положительный). Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если SF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 00000111b   ; AL = 7
   OR  AL, 0           ; только установка флагов.
   JNS label1
   PRINT 'есть знак.'
   JMP exit
label1:
   PRINT 'нет знака.'
exit:
   RET
C Z S O P A
не изменяются
 
JNZ метка Короткий переход, если «не ноль». Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если ZF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 00000111b   ; AL = 7
   OR  AL, 0           ; только установка флагов
   JNZ label1
   PRINT 'ноль.'
   JMP exit
label1:
   PRINT 'не ноль.'
exit:
   RET
C Z S O P A
не изменяются
 
JO метка Короткий переход по переполнению.

Алгоритм:

    если OF = 1 то выполнить переход
Пример:

; -5 - 127 = -132 (вне диапазона -128..127)
; результат вычитания неправильный (124),
; поэтому OF = 1:

include 'emu8086.inc'
#make_COM#
org 100h
  MOV AL, -5
  SUB AL, 127   ; AL = 7Ch (124)
JO  label1
  PRINT 'нет переполнения.'
JMP exit
label1:
  PRINT 'переполнение!'
exit:
  RET
C Z S O P A
не изменяются
 
JP метка Короткий переход, если есть паритет или паритет четный. Проверяются только младшие 8 битов результата. Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если PF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 00000101b   ; AL = 5
   OR  AL, 0           ; только установка флагов.
   JP label1
   PRINT 'паритет нечетный.'
   JMP exit
label1:
   PRINT 'паритет четный.'
exit:
   RET
C Z S O P A
не изменяются
 
JPE метка Короткий переход, если есть паритет или паритет четный. Проверяются только младшие 8 битов результата. Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если PF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 00000101b   ; AL = 5
   OR  AL, 0           ; только установка флагов.
   JPE label1
   PRINT 'паритет нечетный.'
   JMP exit
label1:
   PRINT 'паритет четный.'
exit:
   RET
C Z S O P A
не изменяются
 
JPO метка Короткий переход, если нет паритета, или паритет нечетный. Проверяются только младшие 8 битов результата. Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если PF = 0 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 00000111b   ; AL = 7
   OR  AL, 0           ; только установка флагов.
   JPO label1
   PRINT 'паритет четный.'
   JMP exit
label1:
   PRINT 'паритет нечетный.'
exit:
   RET
C Z S O P A
не изменяются
 
JS метка Переход по знаку (если отрицательный). Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если SF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 10000000b   ; AL = -128
   OR  AL, 0           ; только установка флагов.
   JS label1
   PRINT 'нет знака.'
   JMP exit
label1:
   PRINT 'есть знак.'
exit:
   RET
C Z S O P A
не изменяются
 
JZ метка Короткий переход по «нулю». Устанавливается командами CMP, SUB, ADD, TEST, AND, OR, XOR.

Алгоритм:

    если ZF = 1 то выполнить переход
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AL, 5
   CMP AL, 5
   JZ  label1
   PRINT 'AL не равно 5.'
   JMP exit
label1:
   PRINT 'AL равно 5.'
exit:
   RET
C Z S O P A
не изменяются
 
LAHF Нет операндов Загрузка младших 8 байтов регистра флагов в регистр АН.

Алгоритм:

    AH = флаговому регистру
Биты AH:  7    6   5    4   3    2   1    0
        [SF] [ZF] [0] [AF] [0] [PF] [1] [CF]
биты 1, 3, 5 зарезервированы.

C Z S O P A
не изменяются
 

LDS REG, memory Загружает в необходимые регистры четыре байта памяти (двойное слово), содержащей относительный адрес и сегментный адрес. Сегментный адрес помещается в регистр DS, а относительный адрес (смещение) — в любой из общих или индексных регистров или в регистровый указатель.

Алгоритм:

  • REG = первое слово
  • DS = второе слово

Пример:

#make_COM#
ORG 100h

LDS AX, m

RET

m  DW  1234h
   DW  5678h

END

В AX записано значение 1234h, в DS записано значение 5678h.

C Z S O P A
не изменяются
 

LEA REG, memory Загрузка исполнительного адреса.
Команда LEA загружает в регистр, указанный в команде в качестве первого операнда, относительный адрес второго операнда (не значение операнда!). В качестве первого операнда следует указывать регистр общего назначения (не сегментный), в качестве второго — ячейку памяти. Команда

LEA reg, mem

эквивалентна команде

MOV reg,offset mem

но у первой команды больше возможностей описания адреса интересующей нас ячейки. Команда не воздействует на флаги процессора.

Алгоритм:

  • REG = адрес памяти (смещение)

Обычно эту команду заменяют командой MOV, если это возможно.

Пример:

#make_COM#
ORG 100h

LEA AX, m

RET

m  DW  1234h

END

В AX записано значение: 0104h.
Команда LEA занимает 3 байта, команда RET занимает 1 байт, мы начинаем с адреса 100h, поэтому адрес ‘m’ — это 104h.

C Z S O P A
не изменяются
 

LES REG, memory Загрузка указателя с использованием регистра ES.
Считывает из памяти по указанному адресу двойное слово (32 бит), содержащее указатель (полный адрес некоторой ячейки), и загружает младшую половину указателя (т.е. относительный адрес) в указанный в команде регистр, а старшую половину указателя (т.е. сегментный адрес) в регистр ES. Таким образом, команда

LES reg, mem

эквивалентна следующей группе команд:

MOV reg, word ptr mem
MOV ES, word ptr mem+2

В качестве первого операнда команды LES указывается регистр общего назначения; в качестве второго — ячейка памяти с двухсловным содержимым. Указатель, содержащийся в этой ячейке, может быть адресом как процедуры, так и поля данных.

Алгоритм:

  • REG = первое слово
  • ES = второе слово

Пример:

#make_COM#
ORG 100h

LES AX, m

RET

m  DW  1234h
   DW  5678h

END

В AX записано значение 1234h, В ES записано значение 5678h.

C Z S O P A
не изменяются
 

LODSB Нет операндов Загружает байт из DS:[SI] в регистр AL. Изменяет SI.

Алгоритм:

  • AL = DS:[SI]
  • если DF = 0 то иначе
Пример:

#make_COM#
ORG 100h

LEA SI, a1
MOV CX, 5
MOV AH, 0Eh

m: LODSB
INT 10h
LOOP m

RET

a1 DB 'H', 'e', 'l', 'l', 'o'
C Z S O P A
не изменяются
 
LODSW Нет операндов Загрузить слово из DS:[SI] в регистр AX. Изменяет SI.

Алгоритм:

  • AX = DS:[SI]
  • если DF = 0 то иначе
Пример:

#make_COM#
ORG 100h

LEA SI, a1
MOV CX, 5

REP LODSW   ; в итоге в АХ будет значение 555h.

RET

a1 dw 111h, 222h, 333h, 444h, 555h
C Z S O P A
не изменяются
 
LOOP метка Уменьшает СХ, переходит на метку, если СХ не равен нулю.

Алгоритм:

  • CX = CX — 1
  • если CX <> 0 то
    • выполнить переход
    иначе
    • не выполнять переход, продолжить цикл
Пример:

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV CX, 5
label1:
   PRINTN 'цикл!'
   LOOP label1
   RET
C Z S O P A
не изменяются
 
LOOPE метка Уменьшить СХ, выполнить переход, если СХ «не ноль» или «равно». (ZF = 1).

Алгоритм:

  • CX = CX — 1
  • если (CX <> 0) и (ZF = 1) то
    • выполнить переход
    иначе
    • не выполнять переход, продолжить цикл
Пример:

; Цикл выполняется 5 раз или до тех пор, пока
; результат в регистре AL лежит в пределах байта.
; Результат превысит значение 255 на третьем "заходе" (100+100+100),
; поэтому цикл будет завершен.

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AX, 0
   MOV CX, 5
label1:
   PUTC '*'
   ADD AX, 100
   CMP AH, 0
   LOOPE label1
   RET
C Z S O P A
не изменяются
 
LOOPNE метка Уменьшает СХ, выполняет переход к метке если СХ не равен нулю и выполняется условие «не равно» (ZF = 0).

Алгоритм:

  • CX = CX — 1
  • если (CX <> 0) и (ZF = 0) то
    • выполнить переход
    иначе
    • не выполнять переход, продолжить цикл
Пример:

; Цикл выполняется 5 раз, или до тех пор,
; пока не будет найдено число '7'.

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV SI, 0
   MOV CX, 5
label1:
   PUTC '*'
   MOV AL, v1[SI]
   INC SI         ; следующий байт (SI=SI+1).
   CMP AL, 7
   LOOPNE label1
   RET
   v1 db 9, 8, 7, 6, 5
C Z S O P A
не изменяются
 
LOOPNZ метка Уменьшает СХ, выполняет переход к метке, если СХ не равен нулю и ZF = 0.

Алгоритм:

  • CX = CX — 1
  • если (CX <> 0) и (ZF = 0) то
    • выполнить переход
    иначе
    • не выполнять переход, продолжить цикл
Пример:

; Цикл выполняется 5 раз, или до тех пор,
; пока не будет найдено число '7'.

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV SI, 0
   MOV CX, 5
label1:
   PUTC '*'
   MOV AL, v1[SI]
   INC SI         ; следующий байт (SI=SI+1).
   CMP AL, 7
   LOOPNZ label1
   RET
   v1 db 9, 8, 7, 6, 5
C Z S O P A
не изменяются
 
LOOPZ метка Уменьшает СХ, выполняет переход к метке, если СХ не равен нулю и ZF = 1.

Алгоритм:

  • CX = CX — 1
  • если (CX <> 0) и (ZF = 1) то
    • выполнить переход
    иначе
    • не выполнять переход, продолжить цикл
Пример:

; Цикл выполняется 5 раз или до тех пор,
; пока значение в регистре AL не выходит за пределы байта.
; Результат превысит значение 255 на третьем цикле (100+100+100),
; поэтому цикл будет завершен после третьего прохода.

   include 'emu8086.inc'
   #make_COM#
   ORG 100h
   MOV AX, 0
   MOV CX, 5
label1:
   PUTC '*'
   ADD AX, 100
   CMP AH, 0
   LOOPZ label1
   RET
C Z S O P A
не изменяются
 
MOV REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate

SREG, memory
memory, SREG
REG, SREG
SREG, REG

Копирует operand2 в operand1.

Команда MOV не может:

  • записывать данные в регистры CS и IP.
  • копировать данные из одного сегментного регистра в другой сегментный регистр (сначала нужно скопировать данные в регистр общего назначения).
  • копировать непосредственное значение в сегментный регистр (сначала нужно скопировать данные в регистр общего назначения).

Алгоритм:

operand1 = operand2
Пример:

#make_COM#
ORG 100h
MOV AX, 0B800h    ; установить AX = B800h (память VGA).
MOV DS, AX        ; копировать значение из AX в DS.
MOV CL, 'A'       ; CL = 41h (ASCII-код).
MOV CH, 01011111b ; CL = атрибуты цвета.
MOV BX, 15Eh      ; BX = позиция на экране.
MOV [BX], CX      ; w.[0B800h:015Eh] = CX.
RET               ; вернуться в операционную систему.
C Z S O P A
не изменяются
 
MOVSB Нет операндов Копирует байт из DS:[SI] в ES:[DI]. Изменяет регистры SI и DI.

Алгоритм:

  • ES:[DI] = DS:[SI]
  • если DF = 0 то иначе
Пример:

#make_COM#
ORG 100h

LEA SI, a1
LEA DI, a2
MOV CX, 5
REP MOVSB

RET

a1 DB 1,2,3,4,5
a2 DB 5 DUP(0)
C Z S O P A
не изменяются
 
MOVSW Нет операндов Копирует слово из DS:[SI] в ES:[DI]. Изменяет регистры SI и DI.

Алгоритм:

  • ES:[DI] = DS:[SI]
  • если DF = 0 то иначе
Пример:

#make_COM#
ORG 100h

LEA SI, a1
LEA DI, a2
MOV CX, 5
REP MOVSW

RET

a1 DW 1,2,3,4,5
a2 DW 5 DUP(0)
C Z S O P A
не изменяются
 
MUL REG
memory
Беззнаковое умножение.

Алгоритм:

если операнд — byte:
AX = AL * операнд.
если операнд — word:
(DX AX) = AX * операнд.
Пример:
MOV AL, 200   ; AL = 0C8h
MOV BL, 4
MUL BL        ; AX = 0320h (800)
RET
CF=OF=0 если старшая секция результата — ноль.  
NEG REG
memory
Отрицание. Делает операнд отрицательным (дополнение до двух).

Алгоритм:

  • Инвертировать все биты операнда
  • Прибавить единицу к инвертированному операнду
Пример:

MOV AL, 5   ; AL = 05h
NEG AL      ; AL = 0FBh (-5)
NEG AL      ; AL = 05h (5)
RET
 
NOP Нет операндов Нет операции. Обычно используется для небольшой задержки программы.

Алгоритм:

  • Ничего не делать
Пример:

; ничего не делать три раза:
NOP
NOP
NOP
RET
C Z S O P A
не изменяются
 
NOT REG
memory
Инвертирует каждый бит операнда.

Алгоритм:

  • если бит равен 1, переключить его в 0.
  • если бит равен 0, переключить его в 1.
Пример:

MOV AL, 00011011b
NOT AL   ; AL = 11100100b
RET
C Z S O P A
не изменяются
 
OR REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Логическое ИЛИ между всеми битами двух операндов. Результат записывается в первый операнд.

Выполняются следующие правила:

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

Пример:

MOV AL, 'A'       ; AL = 01000001b
OR AL, 00100000b  ; AL = 01100001b  ('a')
RET
 
OUT im.byte, AL
im.byte, AX
DX, AL
DX, AX
Выводит данные из регистра AL или AX в порт.
Первый операнд — номер порта. Если требуется доступ к порту, номер которого превышает 255, то должен быть использован регистр DX.

Пример:

MOV AX, 0FFFh ; Включить все
OUT 4, AX     ; светофоры.

MOV AL, 100b  ; Включть третий магнит
OUT 7, AL     ; шагового двигателя.
C Z S O P A
не изменяются
 
POP REG
SREG
memory
Получает 16-битовое значение из стека.

Алгоритм:

  • операнд = SS:[SP] (вершина стека)
  • SP = SP + 2

Пример:

MOV AX, 1234h
PUSH AX
POP  DX     ; DX = 1234h
RET
C Z S O P A
не изменяются
 
POPA Нет операндов Выгружает все регистры общего назначения DI, SI, BP, SP, BX, DX, CX, AX из стека.
(Значение SP игнорируется, оно выгружается, но не записывается в регистр SP).

Примечание: эта команда работает только на процессорах 80186 и выше!

Алгоритм:

  • POP DI
  • POP SI
  • POP BP
  • POP xx (значение SP игнорируется)
  • POP BX
  • POP DX
  • POP CX
  • POP AX
C Z S O P A
не изменяются
 

POPF Нет операндов Получает регистр флагов из стека.

Алгоритм:

  • флаги = SS:[SP] (вершина стека)
  • SP = SP + 2
C Z S O P A
выгружаются из стека
 

PUSH REG
SREG
memory
immediate
Записывает 16-битовое значение в стек.

Примечание: PUSH immediate работает только на процессорах 80186 и выше!

Алгоритм:

  • SP = SP — 2
  • SS:[SP] (вершина стека) = операнд

Пример:

MOV AX, 1234h
PUSH AX
POP  DX     ; DX = 1234h
RET
C Z S O P A
не изменяются
 
PUSHA Нет операндов Помещает в стек все регистры общего назначения: AX, CX, DX, BX, SP, BP, SI, DI.
Использует оригинальное значение регистра SP (перед выполнением PUSHA).

Примечание: эта команда работает только на процессорах 80186 и выше!

Алгоритм:

  • PUSH AX
  • PUSH CX
  • PUSH DX
  • PUSH BX
  • PUSH SP
  • PUSH BP
  • PUSH SI
  • PUSH DI
C Z S O P A
не изменяются
 

PUSHF Нет операндов Записывает регистр флагов в стек.

Алгоритм:

  • SP = SP — 2
  • SS:[SP] (вершина стека) = флаги
C Z S O P A
не изменяются
 

RCL memory, immediate
REG, immediate

memory, CL
REG, CL

Циклический сдвиг (ротация) влево через перенос. Количество ротаций устанавливается во втором операнде.
Если immediate больше единицы, ассемблер генерирует несколько команд RCL xx, 1, потому что 8086 имеет машинный код только для этой команды (тот же принцип работы используют все команды сдвига/ротации).

Алгоритм:

    самый левый бит записать во флаг CF, сдвинуть все биты влево, значение флага CF записать в самый правый бит (бит 0).

Пример:

STC               ; установить перенос (CF=1).
MOV AL, 1Ch       ; AL = 00011100b
RCL AL, 1         ; AL = 00111001b,  CF=0.
RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
RCR memory, immediate
REG, immediate

memory, CL
REG, CL

Циклический сдвиг (ротация) вправо через перенос. Количество ротаций устанавливается во втором операнде.

Алгоритм:

    самый правый бит (бит 0) записать во флаг CF, сдвинуть все биты вправо, значение флага CF записать в самый левый бит.

Пример:

STC               ; установить перенос (CF=1).
MOV AL, 1Ch       ; AL = 00011100b
RCR AL, 1         ; AL = 10001110b,  CF=0.
RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
REP нужная команда
Повторяет следующие команды MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW. Количество повторов указано в СХ.

Алгоритм:

check_cx:

если CX <> 0 то

  • выполнить нужную команду
  • CX = CX — 1
  • вернуться к метке check_cx
иначе
  • выйти из REP-цикла
 
REPE нужная команда
Повторяет следующие команды CMPSB, CMPSW, SCASB, SCASW, пока ZF = 1, но не более CX раз.

Алгоритм:

check_cx:

если CX <> 0 то

  • выполнить нужную команду
  • CX = CX — 1
  • если ZF = 1 то:
    • вернуться к метке check_cx
    иначе
    • выйти из REPE-цикла
иначе
  • выйти из REPE-цикла
Пример:
см. cmpsb.asm в каталоге Samples.

 

REPNE нужная команда
Повторяет следующие команды CMPSB, CMPSW, SCASB, SCASW, пока ZF = 0, но не более CX раз.

Алгоритм:

check_cx:

если CX <> 0 то

  • выполнить нужную команду
  • CX = CX — 1
  • если ZF = 0 то:
    • вернуться к метке check_cx
    иначе
    • выйти из REPNE-цикла
иначе
  • выйти из REPNE-цикла
 
REPNZ нужная команда
Повторяет следующие команды CMPSB, CMPSW, SCASB, SCASW, пока ZF = 0, но не более CX раз.

Алгоритм:

check_cx:

если CX <> 0 то

  • выполнить нужную команду
  • CX = CX — 1
  • если ZF = 0 то:
    • вернуться к метке check_cx
    иначе
    • выйти из REPNZ-цикла
иначе
  • выйти из REPNZ-цикла
 
REPZ нужная команда
Повторяет следующие команды CMPSB, CMPSW, SCASB, SCASW, пока ZF = 1, но не более CX раз.

Алгоритм:

check_cx:

если CX <> 0 то

  • выполнить нужную команду
  • CX = CX — 1
  • если ZF = 1 то:
    • вернуться к метке check_cx
    иначе
    • выйти из REPZ-цикла
иначе
  • выйти из REPZ-цикла
 
RET Нет операндов
или четное immediate
Возврат из ближней процедуры.

Алгоритм:

  • Получить из стека:
  • если имеется операнд immediate: SP = SP + операнд
Пример:

#make_COM#
ORG 100h  ; для COM-файла.

CALL p1

ADD AX, 1

RET         ; вернуться в операционную систему.

p1 PROC     ; объявление процедуры.
    MOV AX, 1234h
    RET     ; вернуться в программу.
p1 ENDP
C Z S O P A
не изменяются
 
RETF Нет операндов
или четное immediate
Возврат из дальней процедуры.

Алгоритм:

  • Получить из стека:
  • если имеется операнд immediate: SP = SP + операнд
C Z S O P A
не изменяются
 

ROL memory, immediate
REG, immediate

memory, CL
REG, CL

Циклический сдвиг (ротация) влево. Количество ротаций устанавливается во втором операнде.

Алгоритм:

    самый левый бит записать во флаг CF, сдвинуть все биты влево, в самый правый бит записать флаг CF.
Пример:

MOV AL, 1Ch       ; AL = 00011100b
ROL AL, 1         ; AL = 00111000b,  CF=0.
RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
ROR memory, immediate
REG, immediate

memory, CL
REG, CL

Циклический сдвиг (ротация) вправо. Количество ротаций устанавливается во втором операнде.

Алгоритм:

    самый правый бит записать во флаг CF, сдвинуть все биты вправо, в самый левый бит записать флаг CF.
Пример:

MOV AL, 1Ch       ; AL = 00011100b
ROR AL, 1         ; AL = 00001110b,  CF=0.
RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
SAHF Нет операндов Записать данные из регистра АН в младшие 8 битов регистра флагов.

Алгоритм:

    регистр флагов = AH
Биты АН:   7    6   5    4   3    2   1    0
         [SF] [ZF] [0] [AF] [0] [PF] [1] [CF]
биты 1, 3, 5 зарезервированы.

 

SAL memory, immediate
REG, immediate

memory, CL
REG, CL

Арифметический сдвиг влево. Количество сдвигов записывается во второй операнд.

Алгоритм:

  • самый левый бит записать в CF, сдвинуть все биты влево,
  • в самый правый бит записать ноль.
Пример:

MOV AL, 0E0h      ; AL = 11100000b
SAL AL, 1         ; AL = 11000000b,  CF=1.
RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
SAR memory, immediate
REG, immediate

memory, CL
REG, CL

Арифметический сдвиг вправо. Количество сдвигов записывается во второй операнд.

Алгоритм:

  • самый правый бит записать в CF, сдвинуть все биты вправо,
  • в самый правый бит записать ноль.
  • Бит знака, который вставляется в самую левую позицию, имеет то же значение, что и перед сдвигом.
Пример:

MOV AL, 0E0h      ; AL = 11100000b
SAR AL, 1         ; AL = 11110000b,  CF=0.

MOV BL, 4Ch       ; BL = 01001100b
SAR BL, 1         ; BL = 00100110b,  CF=0.

RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
SBB REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Вычитание с заемом.

Алгоритм:

operand1 = operand1 — operand2 — CF

Пример:

STC
MOV AL, 5
SBB AL, 3    ; AL = 5 - 3 - 1 = 1

RET
 
SCASB Нет операндов Сравнивает байты (ищет байт в строке): AL из ES:[DI].

Алгоритм:

  • ES:[DI] — AL
  • установить флаги в зависимости от результата:
    OF, SF, ZF, AF, PF, CF
  • если DF = 0 то иначе
 

SCASW Нет операндов Сравнивает слова: AX из ES:[DI].

Алгоритм:

  • ES:[DI] — AX
  • установить флаги в зависимости от результата:
    OF, SF, ZF, AF, PF, CF
  • если DF = 0 то иначе
 

SHL memory, immediate
REG, immediate

memory, CL
REG, CL

Сдвиг влево. Количество сдвигов указывается во втором операнде. Знаковый бит рассматривается как обычный бит данных.

Algorithm:

  • Записать самый левый бит в CF, сдвинуть все биты влево.
  • В самый правый бит записать ноль.
Пример:

MOV AL, 11100000b
SHL AL, 1         ; AL = 11000000b,  CF=1.

RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
SHR memory, immediate
REG, immediate

memory, CL
REG, CL

Сдвиг вправо. Количество сдвигов указывается во втором операнде. Знаковый бит рассматривается как обычный бит данных.

Algorithm:

  • Записать самый правый бит в CF, сдвинуть все биты вправо.
  • В самый левый бит записать ноль.
Пример:

MOV AL, 00000111b
SHR AL, 1         ; AL = 00000011b,  CF=1.

RET
OF=0 если первый операнд сохраняет первоначальный знак (+ или -).  
STC Нет операндов Устанавливает флаг переноса (CF).

Алгоритм:

CF = 1

 

STD Нет операндов Устанавливает флаг направления (DF). Значения регистров SI и DI уменьшаются командами: CMPSB, CMPSW, LODSB, LODSW, MOVSB, MOVSW, STOSB, STOSW.

Алгоритм:

DF = 1

 

STI Нет операндов Устанавливает флаг прерываний. Это включает аппаратные прерывания.

Алгоритм:

IF = 1

 

STOSB Нет операндов Записывает байт из AL в ES:[DI]. Изменяет SI.

Алгоритм:

  • ES:[DI] = AL
  • если DF = 0 то иначе
Пример:

#make_COM#
ORG 100h

LEA DI, a1
MOV AL, 12h
MOV CX, 5

REP STOSB

RET

a1 DB 5 dup(0)
C Z S O P A
не изменяются
 
STOSW Нет операндов Записывает слово из AX в ES:[DI]. Изменяет SI.

Алгоритм:

  • ES:[DI] = AX
  • если DF = 0 то иначе
Пример:

#make_COM#
ORG 100h

LEA DI, a1
MOV AX, 1234h
MOV CX, 5

REP STOSW

RET

a1 DW 5 dup(0)
C Z S O P A
не изменяются
 
SUB REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Вычитание.

Алгоритм:

operand1 = operand1 — operand2

Пример:

MOV AL, 5
SUB AL, 1         ; AL = 4

RET
 
TEST REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Логическое И между всеми битами двух операндов. Не изменяет результирующий операнд, а влияет только на флаги. Задействованы следующие флаги: ZF, SF, PF.

Выполняются следующие правила:

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

Пример:

MOV AL, 00000101b
TEST AL, 1         ; ZF = 0.
TEST AL, 10b       ; ZF = 1.
RET
 
XCHG REG, memory
memory, REG
REG, REG
Перестановка двух операндов.

Алгоритм:

operand1 < — > operand2

Пример:

MOV AL, 5
MOV AH, 2
XCHG AL, AH   ; AL = 2, AH = 5
XCHG AL, AH   ; AL = 5, AH = 2
RET
C Z S O P A
не изменяются
 
XLATB Нет операндов Транслирует байт из таблицы.
Копирует байт из памяти по адресу DS:[BX + беззнаковый AL] в регистр AL.

Алгоритм:

AL = DS:[BX + беззнаковый AL]

Пример:

#make_COM#
ORG 100h
LEA BX, dat
MOV AL, 2
XLATB     ; AL = 33h

RET

dat DB 11h, 22h, 33h, 44h, 55h
C Z S O P A
не изменяются
 
XOR REG, memory
memory, REG
REG, REG
memory, immediate
REG, immediate
Логическое XOR (Исключающее ИЛИ)между всеми битами двух операндов. Результат записывается в первый операнд.

Выполняются следующие правила:

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

Пример:

MOV AL, 00000111b
XOR AL, 00000010b    ; AL = 00000101b
RET

Intel Core i71065G7 Processor 8M Cache up to 3.90 GHz Спецификации продукции

Дата выпуска

Дата выпуска продукта.

Литография

Литография указывает на полупроводниковую технологию, используемую для производства интегрированных наборов микросхем и отчет показывается в нанометре (нм), что указывает на размер функций, встроенных в полупроводник.

Условия использования

Условия использования представляют собой условия окружающей среды и эксплуатации, вытекающие из контекста использования системы.
Информацию об условиях использования конкретного SKU см. в отчете PRQ.
Информацию о текущих условиях использования см. в разделе Intel UC (сайт CNDA)*.

Количество ядер

Количество ядер — это термин аппаратного обеспечения, описывающий число независимых центральных модулей обработки в одном вычислительном компоненте (кристалл).

Количество потоков

Поток или поток выполнения — это термин программного обеспечения, обозначающий базовую упорядоченную последовательность инструкций, которые могут быть переданы или обработаны одним ядром ЦП.

Максимальная тактовая частота в режиме Turbo

Максимальная тактовая частота в режиме Turbo — это максимальная тактовая частота при нагрузке на одно ядро процессора, которую можно достичь с помощью поддерживаемых им технологий Intel® Turbo Boost и Intel® Thermal Velocity Boost. Частота измеряется в гигагерцах (ГГц) или миллиардах вычислительных циклов в секунду.

Базовая тактовая частота процессора

Базовая частота процессора — это скорость открытия/закрытия транзисторов процессора. Базовая частота процессора является рабочей точкой, где задается расчетная мощность (TDP). Частота измеряется в гигагерцах (ГГц) или миллиардах вычислительных циклов в секунду.

Кэш-память

Кэш-память процессора — это область быстродействующей памяти, расположенная в процессоре. Интеллектуальная кэш-память Intel® Smart Cache указывает на архитектуру, которая позволяет всем ядрам совместно динамически использовать доступ к кэшу последнего уровня.

Частота системной шины

Шина — это подсистема, передающая данные между компонентами компьютера или между компьютерами. В качестве примера можно назвать системную шину (FSB), по которой происходит обмен данными между процессором и блоком контроллеров памяти; интерфейс DMI, который представляет собой соединение «точка-точка» между встроенным контроллером памяти Intel и блоком контроллеров ввода/вывода Intel на системной плате; и интерфейс Quick Path Interconnect (QPI), соединяющий процессор и интегрированный контроллер памяти.

Расчетная мощность

Расчетная тепловая мощность (TDP) указывает на среднее значение производительности в ваттах, когда мощность процессора рассеивается (при работе с базовой частотой, когда все ядра задействованы) в условиях сложной нагрузки, определенной Intel. Ознакомьтесь с требованиями к системам терморегуляции, представленными в техническом описании.

Настраиваемая частота TDP (в сторону увеличения)

Настраиваемая частота TDP (в сторону увеличения) — режим работы процессора, при котором поведение и производительность процессора изменяются при увеличении величины TDP, при частоте процессора на неподвижных точках. Настраиваемая частота TDP (в сторону увеличения) определяет настраиваемую величину TDP (в сторону увеличения). Частота измеряется в гигагерцах (ГГц) или миллиардах вычислительных циклов в секунду.

Настраиваемая величина TDP (в сторону увеличения)

Настраиваемая величина TDP (в сторону увеличения) — режим работы процессора, при котором поведение и производительность изменяются при увеличении величины TDP (при частоте процессора на неподвижных точках). Этот режим обычно используется производителями систем для оптимизации мощности и производительности. Настраиваемая частота TDP (в сторону увеличения) указывает на среднее значение производительности в ваттах, когда мощность процессора рассеивается (при работе в режиме настраиваемой величины TDP (в сторону увеличения) в условиях сложной нагрузки, определяемой Intel.

Настраиваемая частота TDP (в сторону уменьшения)

Настраиваемая частота TDP (в сторону уменьшения) — режим работы процессора, при котором поведение и производительность изменяются при уменьшении величины TDP, при частоте процессора на неподвижных точках. Настраиваемая частота TDP (в сторону уменьшения) определяет настраиваемую величину TDP (в сторону уменьшения). Частота измеряется в гигагерцах (ГГц) или миллиардах вычислительных циклов в секунду.

Настраиваемая величина TDP (в сторону уменьшения)

Настраиваемая величина TDP (в сторону уменьшения) — режим работы процессора, при котором поведение и производительность изменяются при уменьшении величины TDP, при частоте процессора на неподвижных точках. Этот режим обычно используется производителями систем для оптимизации мощности и производительности. Настраиваемая частота TDP (в сторону уменьшения) указывает на среднее значение производительности в ваттах, когда мощность процессора рассеивается (при работе в режиме настраиваемой величины TDP (в сторону уменьшения) в условиях сложной нагрузки, определяемой Intel.

Доступные варианты для встраиваемых систем

Доступные варианты для встраиваемых систем указывают на продукты, обеспечивающие продленную возможность приобретения для интеллектуальных систем и встроенных решений. Спецификация продукции и условия использования представлены в отчете Production Release Qualification (PRQ). Обратитесь к представителю Intel для получения подробной информации.

Макс. объем памяти (зависит от типа памяти)

Макс. объем памяти означает максимальный объем памяти, поддерживаемый процессором.

Типы памяти

Процессоры Intel® поддерживают четыре разных типа памяти: одноканальная, двухканальная, трехканальная и Flex.

Макс. число каналов памяти

От количества каналов памяти зависит пропускная способность приложений.

Макс. пропускная способность памяти

Макс. пропускная способность памяти означает максимальную скорость, с которой данные могут быть считаны из памяти или сохранены в памяти процессором (в ГБ/с).

Поддержка памяти ECC

Поддержка памяти ECC указывает на поддержку процессором памяти с кодом коррекции ошибок. Память ECC представляет собой такой типа памяти, который поддерживает выявление и исправление распространенных типов внутренних повреждений памяти. Обратите внимание, что поддержка памяти ECC требует поддержки и процессора, и набора микросхем.

Встроенная в процессор графическая система

Графическая система процессора представляет собой интегрированную в процессор схему обработки графических данных, которая формирует работу функций видеосистемы, вычислительных процессов, мультимедиа и отображения информации. Системы HD-графики Intel®, Iris™ Graphics, Iris Plus Graphics и Iris Pro Graphics обеспечивают расширенное преобразование медиа-данных, высокие частоты кадров и возможность демонстрации видео в формате 4K Ultra HD (UHD). Для получения дополнительной информации см. страницу Технология Intel® Graphics.

Базовая частота графической системы

Базовая частота графической системы — это номинальная/гарантированная тактовая частота рендеринга графики (МГц).

Макс. динамическая частота графической системы

Макс. динамическая частота графической системы — это максимальная условная частота рендеринга (МГц), поддерживаемая HD-графикой Intel® с функцией Dynamic Frequency.

Вывод графической системы

Вывод графической системы определяет интерфейсы, доступные для взаимодействия с отображениями устройства.

Макс. разрешение (HDMI)‡

Максимальное разрешение (HDMI) — максимальное разрешение, поддерживаемое процессором через интерфейс HDMI (24 бита на пиксель с частотой 60 Гц). Системное разрешение или разрешение экрана зависит от нескольких факторов дизайна системы, а именно, фактическое разрешение в системе может быть ниже.

Макс. разрешение (DP)‡

Максимальное разрешение (DP) — максимальное разрешение, поддерживаемое процессором через интерфейс DP (24 бита на пиксель с частотой 60 Гц). Системное разрешение или разрешение экрана зависит от нескольких факторов дизайна системы, а именно, фактическое разрешение в системе может быть ниже.

Макс. разрешение (eDP — встроенный плоский экран)

Максимальное разрешение (встроенный плоский экран) — максимальное разрешение, поддерживаемое процессором для встроенного плоского экрана (24 бита на пиксель с частотой 60 Гц). Системное разрешение или разрешение экрана зависит от нескольких факторов дизайна системы; фактическое разрешение на устройстве может быть ниже.

Поддержка DirectX*

DirectX* указывает на поддержку конкретной версии коллекции прикладных программных интерфейсов Microsoft для обработки мультимедийных вычислительных задач.

Поддержка OpenGL*

OpenGL (Open Graphics Library) — это язык с поддержкой различных платформ или кроссплатформенный прикладной программный интерфейс для отображения двухмерной (2D) и трехмерной (3D) векторной графики.

Intel® Quick Sync Video

Технология Intel® Quick Sync Video обеспечивает быструю конвертацию видео для портативных медиапроигрывателей, размещения в сети, а также редактирования и создания видео.

Редакция PCI Express

Редакция PCI Express — это версия, поддерживаемая процессором. PCIe (Peripheral Component Interconnect Express) представляет собой стандарт высокоскоростной последовательной шины расширения для компьютеров для подключения к нему аппаратных устройств. Различные версии PCI Express поддерживают различные скорости передачи данных.

Поддерживаемые разъемы

Разъемом называется компонент, которые обеспечивает механические и электрические соединения между процессором и материнской платой.

T

JUNCTION

Температура на фактическом пятне контакта — это максимальная температура, допустимая на кристалле процессора.

Intel® GNA

Ускоритель GNA (Intel® Gaussian & Neural Accelerator) — это блок ускорителя со сверхнизким энергопотреблением, предназначенный для запуска звуковых и быстрых процессов искусственного интеллекта. Ускоритель Intel® GNA предназначен для запуска звуковых нейронных сетей с низким уровнем энергопотребления, наряду с интенсивной нагрузкой центрального процессора.

Технология Intel® Deep Learning Boost (Intel® DL Boost)

Новый набор встраиваемых процессорных технологий, предназначенный для ускорения глубинного обучения искусственного интеллекта. Он дополняет Intel AVX-512 новыми командами VNNI (Vector Neural Network Instruction), что значительно повышает производительность обработки данных глубинного обучения в сравнении с предыдущими поколениями.

Технология Intel® Adaptix™

Технология Intel® Adaptix™ — это набор программных инструментов, используемых для настройки систем для достижения максимальной производительности и изменения расширенных параметров, например, повышение тактовых частот и характеристик графики. Эти программные средства применяются для адаптации системами таких настроек в конкретных условиях эксплуатации с использованием алгоритмов машинного обучения и расширенных настроек управления питанием.

Поддержка памяти Intel® Optane™

Память Intel® Optane™ представляет собой новый революционный класс энергонезависимой памяти, работающей между системной памятью и устройствами хранения данных для повышения системной производительности и оперативности. В сочетании с драйвером технологии хранения Intel® Rapid она эффективно управляет несколькими уровнями систем хранения данных, предоставляя один виртуальный диск для нужд ОС, обеспечивая тем самым хранение наиболее часто используемой информации на самом быстродействующем уровне хранения данных. Для работы памяти Intel® Optane™ необходимы специальная аппаратная и программная конфигурации. Чтобы узнать о требованиях к конфигурации, посетите сайт https://www.intel.com/content/www/ru/ru/architecture-and-technology/optane-memory.html.

Технология Intel® Speed Shift

Технология Intel® Speed Shift использует аппаратно-управляемые P-состояния для обеспечения повышенной оперативности при обработке одного потока данных и кратковременных рабочих нагрузок, таких как веб-поиск, позволяя процессору быстрее выбирать нужную частоту и напряжение для поддержания оптимальной производительности и энергоэффективности.

Intel® Thermal Velocity Boost

Intel® Thermal Velocity Boost (Intel® TVB) — это функция, которая своевременно и автоматически повышает тактовую частоту одноядерных и многоядерных процессоров, имеющих поддержку технологии Intel® Turbo Boost, в зависимости от того, насколько текущая рабочая температура процессора ниже максимума и каковы доступные возможности повышения частоты. Повышение частоты и его продолжительность зависят от рабочей нагрузки, возможностей процессора и системы охлаждения.

Технология Intel® Turbo Boost

Технология Intel® Turbo Boost динамически увеличивает частоту процессора до необходимого уровня, используя разницу между номинальным и максимальным значениями параметров температуры и энергопотребления, что позволяет увеличить эффективность энергопотребления или при необходимости «разогнать» процессор.

Соответствие платформе Intel® vPro™

Платформа Intel vPro® представляет собой набор аппаратных средств и технологий, используемых для создания конечных систем бизнес-вычислений с высокой производительностью, встроенной безопасностью, современными функциями управления и стабильности платформы.
Подробнее о технологии Intel vPro®

Технология Intel® Hyper-Threading

Intel® Hyper-Threading Technology (Intel® HT Technology) обеспечивает два потока обработки для каждого физического ядра. Многопоточные приложения могут выполнять больше задач параллельно, что значительно ускоряет выполнение работы.

Технология виртуализации Intel® (VT-x)

Технология Intel® Virtualization для направленного ввода/вывода (VT-x) позволяет одной аппаратной платформе функционировать в качестве нескольких «виртуальных» платформ. Технология улучшает возможности управления, снижая время простоев и поддерживая продуктивность работы за счет выделения отдельных разделов для вычислительных операций.

Технология виртуализации Intel® для направленного ввода/вывода (VT-d)

Технология Intel® Virtualization Technology для направленного ввода/вывода дополняет поддержку виртуализации в процессорах на базе архитектуры IA-32 (VT-x) и в процессорах Itanium® (VT-i) функциями виртуализации устройств ввода/вывода. Технология Intel® Virtualization для направленного ввода/вывода помогает пользователям увеличить безопасность и надежность систем, а также повысить производительность устройств ввода/вывода в виртуальных средах.

Intel® VT-x с таблицами Extended Page Tables (EPT)

Intel® VT-x с технологией Extended Page Tables, известной также как технология Second Level Address Translation (SLAT), обеспечивает ускорение работы виртуализованных приложений с интенсивным использованием памяти. Технология Extended Page Tables на платформах с поддержкой технологии виртуализации Intel® сокращает непроизводительные затраты памяти и энергопотребления и увеличивает время автономной работы благодаря аппаратной оптимизации управления таблицей переадресации страниц.

Intel® TSX-NI

Intel® Transactional Synchronization Extensions New Instructions (Intel® TSX-NI) представляют собой набор команд, ориентированных на масштабирование производительности в многопоточных средах. Эта технология помогает более эффективно осуществлять параллельные операции с помощью улучшенного контроля блокировки ПО.

Архитектура Intel® 64

Архитектура Intel® 64 в сочетании с соответствующим программным обеспечением поддерживает работу 64-разрядных приложений на серверах, рабочих станциях, настольных ПК и ноутбуках.¹ Архитектура Intel® 64 обеспечивает повышение производительности, за счет чего вычислительные системы могут использовать более 4 ГБ виртуальной и физической памяти.

Набор команд

Набор команд содержит базовые команды и инструкции, которые микропроцессор понимает и может выполнять. Показанное значение указывает, с каким набором команд Intel совместим данный процессор.

Расширения набора команд

Расширения набора команд — это дополнительные инструкции, с помощью которых можно повысить производительность при выполнении операций с несколькими объектами данных. К ним относятся SSE (Поддержка расширений SIMD) и AVX (Векторные расширения).

Состояния простоя

Режим состояния простоя (или C-состояния) используется для энергосбережения, когда процессор бездействует. C0 означает рабочее состояние, то есть ЦПУ в данный момент выполняет полезную работу. C1 — это первое состояние бездействия, С2 — второе состояние бездействия и т.д. Чем выше численный показатель С-состояния, тем больше действий по энергосбережению выполняет программа.

Технологии термоконтроля

Технологии термоконтроля защищают корпус процессора и систему от сбоя в результате перегрева с помощью нескольких функций управления температурным режимом. Внутрикристаллический цифровой термодатчик температуры (Digital Thermal Sensor — DTS) определяет температуру ядра, а функции управления температурным режимом при необходимости снижают энергопотребление корпусом процессора, тем самым уменьшая температуру, для обеспечения работы в пределах нормальных эксплуатационных характеристик.

Программа Intel® Stable Image Platform (Intel® SIPP)

Программа Intel® SIPP (Intel® Stable Image Platform Program) подразумевает нулевые изменения основных компонентов платформ и драйверов в течение не менее чем 15 месяцев или до следующего выпуска поколения, что упрощает эффективное управление конечными вычислительными системами ИТ-персоналом.
Подробнее о программе Intel® SIPP

Новые команды Intel® AES

Команды Intel® AES-NI (Intel® AES New Instructions) представляют собой набор команд, позволяющий быстро и безопасно обеспечить шифрование и расшифровку данных. Команды AES-NI могут применяться для решения широкого спектра криптографических задач, например, в приложениях, обеспечивающих групповое шифрование, расшифровку, аутентификацию, генерацию случайных чисел и аутентифицированное шифрование.

Secure Key

Технология Intel® Secure Key представляет собой генератор случайных чисел, создающий уникальные комбинации для усиления алгоритмов шифрования.

Intel® Software Guard Extensions (Intel® SGX)

Расширения Intel® SGX (Intel® Software Guard Extensions) открывают возможности создания доверенной и усиленной аппаратной защиты при выполнении приложениями важных процедур и обработки данных. ПО Intel® SGX дает разработчикам возможность распределения кода программ и данных по защищенным центральным процессором доверенным средам выполнения, TEE (Trusted Execution Environment).

Технология Intel® Trusted Execution

Технология Intel® Trusted Execution расширяет возможности безопасного исполнения команд посредством аппаратного расширения возможностей процессоров и наборов микросхем Intel®. Эта технология обеспечивает для платформ цифрового офиса такие функции защиты, как измеряемый запуск приложений и защищенное выполнение команд. Это достигается за счет создания среды, где приложения выполняются изолированно от других приложений системы.

Функция Бит отмены выполнения

Бит отмены выполнения — это аппаратная функция безопасности, которая позволяет уменьшить уязвимость к вирусам и вредоносному коду, а также предотвратить выполнение вредоносного ПО и его распространение на сервере или в сети.

Intel® Boot Guard

Технология Intel® Device Protection с функциями Boot Guard используется для защиты систем от вирусов и вредоносных программ перед загрузкой операционных систем.

Микроконтроллер для встроенного применения – Nios. Система команд и команды, определяемые пользователем. Часть 1. Регистры и доступ к данным Текст научной статьи по специальности «Компьютерные и информационные науки»

Компоненты и технологии, № 8’2002

Микроконтроллер для встроенного применения — N105. Система команд и команды, определяемые пользователем.

Часть I. Регистры и доступ к данным

Иосиф Каршенбойм

[email protected]

Введение

Целью настоящей статьи является предварительное знакомство с системой команд микропроцессора Nios, описание ее отличий от команд стандартных микропроцессоров.

Рассматриваемый здесь микропроцессор относится к классу микропроцессоров для встроенного применения, то есть основная задача такого процессора — работа в режиме реального времени. Для этого микропроцессор должен быстро реагировать на прерывания, быстро переключаться с одной задачи на другую.

При реализации процессора в FPGA появляется дополнительная возможность — реализация команд и аппаратных сопроцессоров, определяемых и разрабатываемых пользователем.

В январе 2002 года был опубликован документ — описание процессора Nios в версии 2.0 [5]. Фирмой Altera были произведены важные дополнения к возможностям системы — введен режим мультимастера в шину Avalon и добавлены новые команды — команды, определяемые пользователем (заказные команды). Документация по системе команд процессора Nios 2.0 была любезно предоставлена автору фирмой «ЭФО».

Описание команд, приведенное в настоящей статье, охватывает, по возможности, обе версии — Nios CPU-32 и Nios CPU-16. Но, поскольку Nios CPU-32 имеет больше команд, то таблица формата команд и кодов операций команд приведены только для 32-битной версии.

Данная статья предназначается только для ознакомления с системой команд и принципом работы микропроцессора и не может претендовать на полное рабочее руководство для программиста. Детальные описания команд процессора приведены в документации [3-5].

Развитие элементной базы происходит столь стремительно, что если в 2001 году процессором среднего быстродействия считались процессоры с тактовой частотой до 50 МГц, то теперь, с появлением на рынке микросхем серии STRATIX, в эту категорию попадают изделия с частотой до 300 МГц. А это уже серьезный конкурент для многих «средних» DSP. Более того, изменения, внесенные в шину Avalon, позволяют теперь реализовать режим мультимастера, что позволяет еще более увеличить производительность всей системы с процессором Nios [7].

Краткий обзор CPU Nios

Процессор Nios, является RISC-процессором с конвейерной обработкой команд, большинство команд которого выполняется в единственном цикле синхрочастоты [1-2, 6]. Система команд Nios ориентирована на встроенные прикладные программы. Nios CPU в вариантах применения на 16 бит и 32 бит, имеет размеры слова соответственно 16 бит и 32 бит.

В Nios термин «байтное слово» относится к 8-битному слову, «слово половинной разрядности» относится к 16-битному слову, а «слово» — к 32-битному слову. Семейство программного ядра процессора Nios включает 32- и 16-битные варианты архитектуры (далее Nios CPU-32 и Nios CPU-16) (см. табл. 1).

Таблица 1. Архитектура процессора Nios

Компоненты процессора Nios CPU-32 Nios CPU-16

Разрядность шины данных 32 16

Разрядность ALU 32 16

Разрядность внутренних регистров 32 16

Разрядность шины адреса 32 16

Разрядность команды 16 16

Компоненты и технологии, № 8’2002

Для выполнения задач реального времени процессор Nios имеет развитую систему прерываний и программных исключений.

Nios CPU — это конвейерная RISC-архитектура. Конвейер команд позволяет увеличить быстродействие процессора при выполнении кода программы, не имеющего ветвлений. Если же необходимо выполнить переход на другой адрес программы, то необходимо произвести перезагрузку конвейера команд (при этом образуется «слот задержки перехода»).

То есть команда, следующая немедленно после JMP и CALL, выполняется после JMP и CALL, но перед выполнением команды перехода в новый адрес. Чтобы повысить быстродействие при коротких переходах, есть пять условно-выполняемых команд SKIP (SKPs, SKP0, SKP1, SKPRz, и SKPRnz). Каждая из этих команд позволяет выполнить при определенном условии следующую за командой SKIP команду или следующая команда пропускается. Поскольку процессор Nios имеет конвейер команд, то пропуск (невыполнение) команды выполняется за один такт синхрочастоты, в то время как перезагрузка конвейера команд при выполнении команды перехода типа JMP или CALL требует несколько циклов синхрочастоты. Поэтому применение команд SKIP для коротких переходов повышает скорость работы.

Процессор Nios имеет две команды для программной обработки исключения: TRAP и TRET. При помощи этих команд осуществляется эффективная отладка программ. Эти команды не приводят к исполнению следующей за ними команды в конвейере команд.

В процессор Nios в версии 2.0 введены дополнительные команды — команды, определяемые пользователем (заказные команды).

Nios CPU поставляется с транслятором GNUPro и отладчиком от Cygnus, что представляет собой промышленный стандарт по C/C++, с открытыми исходными материалами, компоновщиком транслятора и комплектом отладочных программ. Комплект инструментов GNUPro включает C/C ++ транслятор, макроассемблер, компоновщик, отладчик, утилиты и библиотеки.

Система команд процессора Nios ориентирована на то, чтобы эффективно поддержать программы, откомпилированные из исходных программ, написанных на C и C++. Поэтому набор команд включает в себя стандартный набор арифметических и логических операций, команды поддержки для операций над битами, извлечения байта, передачи данных, модификации потока управления, и небольшого набора условно-выполняемых команд, которые могут быть полезны в устранении условных ветвлений на короткие переходы. В процессор Nios в версии 2.0 введены команды, определяемые и разрабатываемые пользователем.

Регистры общего назначения

Регистры общего назначения имеют разрядность 32 бит в Моз СРи-32 и 16 бит в №о8 СРи-16. Размер файлового регистра может быть переконфигурирован пользователем на этапе формирования ядра процессора и периферии и содержать 128, 256 или 512 регистров. Программное обеспечение может обращаться к регистрам через двигающееся окно длиной в 32 регистра, которое перемещается с шагом в 16 регистров. Это окно может передвигаться по всему регистровому файлу и обеспечивает доступ к подмножеству регистров файла.

Окно разделено на четыре четных раздела как показано в таблице 2. Самые нижние восемь регистров (%г0-%г7) — глобальные регистры, также называемые %g0-%g7. Глобальные регистры не изменяются с движением окна, и остаются доступными как <^0-<^7. Верхние 24 регистра (%г8-%г31) в регистровом файле доступны через текущее окно.

Таблица 2. Группы регистров

In регистры %r24 — %r31 или %i0 — %i7

Local регистры %r16 — %r23 или %L0 — %L7

Out регистры %r8 — %r15 или %o0 — %o7

Global регистры %r0 — %r7 или %g0 — %g7

Восемь верхних регистров (%Ю-%17) называются «входные» («т») регистры, следующие восемь (%Ь0-%Ь7) — «локальные» регистры, остальные восемь (%о0-%о7) — «выходные»

Таблица 3. Программная модель

(«out») регистры. Когда окно регистра перемещается вниз на 16 регистров (так как это делается для команды SAVE), регистры «out» становятся регистрами «in» в новой позиции окна. Кроме того, «локальные» и «in» регистры последней позиции окна становятся недоступными (табл. 3).

Регистр K

Регистр K — 11-битовый префикс, который всегда устанавливается в 0 каждой командой, кроме PFX. Системы команд PFX устанавливают регистр K непосредственно из поля команды IMM11. Регистр K содержит значение, отличное от нуля только для команды, непосредственно следующей за PFX. Команда PFX отключает прерывания для одного цикла синхрочастоты, то же происходит и с двумя командами последовательности PFX (PFX немедленно после команды SKPx или IFx) в «атомных операциях» CPU.

Кроме того, пары команды последовательности PFX пропускаются при выполнении команды SKP — команды условного выражения типа SKIP.

Программное обеспечение непосредственно не обращается к регистру K, но использует его косвенно.

Команда MOVI, например, передает все 11 бит регистра K в биты 15-5 регистра адресата. Эта операция чтения K выдаст результат, отличный от нуля только тогда, когда предыдущая команда — PFX.

Краткий обзор регистров

Архитектура №о8 СРи имеет большой файл регистров общего назначения, несколько регистров машинного управления, счетчик программы и регистр К, используемый для выполнения префиксов команд.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 21 0

%i7 %r31 SAVED return-address

%i6 %r30 %fp-frame pointer

%i5 %r29

%i4 %r28

%i3 %r27

%i2 %r26

%i1 %r25

%i0 %r24

%L7 %r23

%L6 %r22

%L5 %r21

%L4 %r20

%L3 %r19 Base-pointer 3 for STP/LDP (or geenral-purpose local)

%L2 %r18 Base-pointer 2 for STP/LDP (or geenral-purpose local)

%L1 %r17 Base-pointer 1 for STP/LDP (or geenral-purpose local)

%L0 %r16 Base-pointer 0 for STP/LDP (or geenral-purpose local)

%o7 %r15 current return-address

%o6 %r14 %sp-Stack Pointer

%o5 %r13

%o4 %r12

%o3 %r11

%o2 %r10

%o1 %r9

%o0 %r8

%g7 %r7

r6 NO

%g5 %r5

%g4 %r4

%g3 %r3

%g2 %r2

%g1 %r1

0 0

%ctl4

WVALID

STATUS

PC

Any write (WRCTL) operation to this register sets STATUS [15] (IE)=1. Result of any read operation (RDCTL) is undefined.

Any write (WRCTL) operation to this register sets STATUS [15] (IE)=1. Result of any read operation (RDCTL) is undefined.

— reserved —

— reserved —

— reserved —

HI_LIMIT

LO_LIMIT

31 130 I 29 I 28 I 271 26 I 25 124123 122 121 |20| 19 | 18 | 171 16

14|13|12|11|10| 9

CWP

8I7I6I5I4

10

0

K REGISTER

%ctl8

%ctl7

%ctl6

%ctl5

eserved —

— reserved —

%ctl3

%ctl2

%ctl1

Saved Status

%ctl0

IE

IP RI

N

V

Z

C

15

3

2

0

e

Компоненты и технологии, № 8’2OO2

Счетчик команд

Счетчик команд — регистр РС — содержит адрес байта команды, выполняющейся в настоящее время. Так как все команды должны быть выровнены до слова половинной разрядности, значение бита младшего разряда РС всегда равно 0.

РС инкрементируется на два (РС <- РС + 2) после каждой команды, если РС не устанавливается непосредственно. Команды ВИ, В8И, СЛЬЬ и ЩР изменяют РС непосредственно. РС имеет разрядность 33 бит в №о8 СРИ-32 и 17 бит в №оє СРИ-16.

Регистры управления

Есть пять определенных регистров управления, которые адресуются независимо от регистров общего назначения. Команды RDCTL и WRCTL — единственные команды, которые могут читать или писать в регистры управления (значение %ctl0 не связано с %g0).

STATUS (%ctl0)

is I4 I2 II I0 9 8 7 6 5 4 З 2 I G

IE IPRI CWP N V Z C

Разрешение прерывания (IE)

IE — бит разрешения прерывания. Когда IE=1, все внешние прерывания и внутренние исключения разрешены. IE=0 отключает внешние прерывания и исключения.

Программные команды TRAP будут все же нормально выполняться, даже когда IE=0.

Обратите внимание, что IE может быть установлен непосредственно при записи в SET_IE (%ctl9) и CLR_IE (%ctl8) в регистр управления, и это не будет воздействовать на остальную часть регистра STATUS. Когда CPU находится в состоянии сброса, IE будет установлен в 0 (заблокированные прерывания).

Приоритет прерываний (IPRI)

IPRI содержит приоритет выполняющегося прерывания. Когда исключение обработано, значение IPRI установлено на номер исключения.

Для внешних аппаратных прерываний значение IPRI соответствует 6-битовому номеру аппаратного прерывания. Для команд TRAP поле IPRI устанавливается в соответствии со значением поля команды IMM6. Для внутренних исключений IPRI устанавливается от 6-битового номера исключения. Аппаратное прерывание не будет обработано, если его внутренний номер больше или равен IPRI или IE=0. Команда TRAP обрабатывается всегда. Когда CPU сброшен, IPRI установлен на 63 (самый низкий приоритет).

IPRI запрещает прерывания выше некоторого номера. Например, если IPRI — 3, то прерывания 0, 1 и 2 будут обработаны, но все другие (прерывания 3-63) будут заблокированы.

Текущий указатель окна (CWP)

CWP указывает на базовый адрес регистра для окна, перемещающегося в регистровом

файле общего назначения. Инкрементирование CWP перемещает окно на 16 регистров вверх. Декрементирование CWP перемещает окно вниз на 16 регистров. CWP декрементируется командами SAVE и инкрементируется командами RESTORE.

Только специализированное системное программное обеспечение, такое, как «средство для управления окном регистра» должно непосредственно записывать значения CWP через WRCTL. Обычное программное обеспечение будет изменять CWP, используя команды SAVE и RESTORE.

Когда CPU сброшен, CWP будет установлен на самое большое допустимое значение — HI_LIMIT.

После того, как произведен сброс, регистр WVALID (%ct12) установлен в 0x01C1, то есть LO_LIMIT = 1 и HI_LIMIT = 14 (см. раздел «WVALID (%ctl2)» для получения дополнительной информации).

Флажки состояния

Некоторые команды изменяют флажки состояния. Эти флажки — четыре младших бита регистра состояния (табл. 4).

Таблица 4. Флаги состояния

Флаг Бит Результат

N З Знак результата или старший бит

V 2 Арифметическое переполнение, если бит 31 из 32-битового результата отличается от знака результата, вычисленного с неограниченной точностью

Z I Результат равен нулю

C G Перенос при сложении, заем при вычитании

ISTATUS (%ctl1)

I5 I4 I2 II I0 9 8 7 6 5 4 З 2 I G

I5 I4 I2 II I0 9 8 7 6 5 4 З 2 I G

UNUSED HI.LIMIT LOW_LIMIT

или для чтения и записи. Когда CPU сброшен, LO_LIMIT устанавливается в 1, а HI_LIMIT равен самому высокому допустимому указателю окна — (размер файла регистра / 16) — 2.

CLR_IE (%ctl8)

Любая операция WRCTL с регистром CLR_IE сбрасывает бит IE в регистре STATUS (IE <- 0) и значение WRCTL игнорируется. Операция RDCTL над CLR_IE приводит к неопределенному результату.

SET_IE (%ctl9)

Любая операция WRCTL с регистром SET_IE устанавливает бит IE в регистре STATUS (IE <- 1) и значение WRCTL игнорируется. Операция RDCTL над SET_IE приводит к неопределенному результату.

Доступ к памяти

Процессор Nios — организован как little-endian. Память данных должна находиться в непрерывном порядке следования слов. Если физическое устройство памяти более узко, чем размер рабочего слова, то шина данных должна осуществить установление размеров динамическим образом, чтобы моделировать для Nios CPU данные полной разрядности. Периферийные устройства представляют свои регистры как native-word, то есть младшие разряды подключаются к младшим разрядам шины, и если их регистры меньше, чем рабочее слово, то остальные разряды дополняются нулями в старших битах. В таблице 5 показано содержимое типового поля памяти, а в таблице 6 показаны регистры, подключаемые как «native-word» к Nios CPU-32.

Таблица 5. Поле памяти программ и данных

для Nios CPU-32 с адреса 0х0100

ISTATUS — это сохраненная копия регистра STATUS. Когда исключение обработано, значение регистра STATUS будет скопировано в регистр ISTATUS. Это действие позволяет восстанавливать значение регистра STATUS перед возвращением управления прерванной программе.2 с адреса 0х0Ю0

Адрес Содержание регистров периферии

31 N N-I G

0х0100 Заполнение нулями Регистр G

0х0104 Заполнение нулями Регистр I

0х0108 Заполнение нулями Регистр 2

0х010С Заполнение нулями Регистр З

WVALID содержит два значения: HI_LIMIT и LOW_LIMIT. Когда выполняются декременты CWP по команде SAVE от значения LOW_LIMIT до LOW_LIMIT-1, происходит выход за нижний предел окна регистра и генерируется исключение #1. Когда команда RESTORE инкрементирует CWP от HI_LIMIT до HI_LIM-IT + 1, происходит переполнение окна регистра и генерируется исключение #2. Регистр WVALID имеет перестраиваемую конфигурацию и может быть доступен только для чтения

Чтение из памяти или периферийных устройств

№о8 СРи может только выполнять выровненный доступ к памяти. 32-битная операция чтения может читать только полное слово, начинающееся с адреса байта, который является множителем 4. 16-битная операция чтения может читать только слово половинной разрядности, начинающееся с адреса байта, который является множителем 2. Команды, которые читают из памяти всегда, устанавливают младший бит (для №о8 СРИ-16) или два младших бита (для №о8 СРИ-32) адреса как в 0.

Компоненты и технологии, № 8’2OO2

Команда EXT8D

31 24 23 1615 8 7 О

RA

before

RA

after

byte 3 byte 2 byte 1 byte 0

RB[1..0]

byte n

31

Рис. 2. Команда EXT8D

Компоненты

Пример кода 1. Чтение одиночного байта памяти

Contents of memory:

і 0 1 2 3

і 0x00001200 0x46 0x49 0x53 0x48

і Instructions executed on a 32-bit Nios CPU

і Let’s assume %04 contains the address x00001202

LD %g3, [%04] і %g3 gets the contents of address 0x1200,

so %g3 contains 0x48534946

EXT8D %g3, %04 і %g3 gets replaced with byte 2 from %g3,

so %g3 contains 0x00000053

Рис. 3

Команды для чтения отдельных байтов и слов половинной разрядности

Самая простая команда, которая читает данные из памяти — команда ЬБ. Типичный пример этой команды — ЬБ *%;3, [%о4]. Первый операнд регистра, %g3, является регистром адресата, куда данные будут загружены. Второй операнд регистра определяет регистр, содержащий адрес, из которого будет произведено чтение. Этот адрес будет выровнен к самому близкому слову половинной разрядности (для №о5 СРИ-16) или к слову (для №оя СРИ-32), причем значение самого младшего бита (для №о8 СРИ-16) или двух бит адреса (для №о8 СРИ-32) будут обработаны, как если бы они равнялись 0.

Весьма часто, однако, программное обеспечение должно читать данные меньшие, чем рабочее слово данных. №о8 СРИ обеспечивает команды для распаковки индивидуальных байтов (для №оє СРИ-16 и для №оє СРИ-32) и словами половинной разрядности (для №оя СРИ-32) от рабочего слова данных.оЫ.

Запись в память или периферийные устройства

Процессор №о8 может выполнять выровненную запись в память слов, имеющих разрядность байта, слова половинной разрядности или слова. Слово (для №ов СРИ-32) может быть записано в любой адрес, кратный 4, одной командой. Слово половинной разрядности может быть записано в любой адрес, кратный 2, одной командой (для №о8 СРИ-16) или двумя командами (для №ов СРИ-32). Байт может быть записан в любой адрес двумя командами.

В №о8 СРИ-32 самый младший байт регистра может быть записан только по адресу, кратному 4; следующий байт может быть записан только по адресу, кратному 4, плюс 1, и т. д.

Точно так же для №ов СРИ-16, младший байт регистра может быть записан только

по четному адресу, а старший байт может быть записан только по нечетному адресу.

Nios CPU-32 может также записать младшее слово половинной разрядности в регистр по адресу, кратному 4, а старшее слово половинной разрядности регистра — по адресу, кратному 4, плюс 2.

Команда ST пишет полное слово рабочей разрядности, взятое из любого регистра с выравниванием типа «native». Команды ST8D и ST16D (только для Nios CPU-32) пишут байт и слово половинной разрядности, соответственно, с ограничениями выравнивания, описанными выше, от регистра %r0.

Для программного обеспечения часто бывает необходимо записать специфический байт или слово половинной разрядности по произвольно расположенному адресу в памяти. Позиция в пределах исходного регистра может не соответствовать расположению в памяти, в которую будет производиться запись.

Команды FILL8 и FILL16 (только для Nios CPU-32) будут брать самый младший байт или слово половинной разрядности регистра соответственно, и копировать это в регистр %r0.

На рис. 4 показано, как записать отдельный байт в память, даже если адрес байта не приведен к native.

Пример кода 2. Запись в память одного байта

— Адрес не выровнен к ширине слова. Содержание памяти до операции:

0

0x46

l

0x49

2

0x53

3

0x48

let’s assume %04 contains the address x00001203 and that %g3 contains the value 0x000000BC

FILL8 %r0, %g3

ST8D [%04], %r0

(First operand can only be %r0) replicate low byte of %g3 across %r0 so %r0 contains 0xBCBCBCBC (Second operand can only be %r0)

Stores the 3rd byte of %r0 to address 0x1203

Содержание памяти после операции

0

0x46

l

0x49

2

0x53

3

0xBC

Рис.3,З

PFX %hi (0x1234)

ADDI %g3, %lo (0x1234)

Assume %g3 contains the value 0x00000041 Add 5 to %g3

so %g3 now contains 0x00000046 Load K with upper 11 bits of 0x1234 Add low 5 bits of 0x1234 to %g3 so the K register contained 0x091 and the immediate operand of the ADDI instruction contained 0x14, which concatenated together make 0x00001234 Now %g3 contains 0x0000127A

Рис. 5

Для преобразования 16-битной константы в значение PFX и 5-битное число ассемблер использует операторы %hi () и %lo (). Оператор %hi (x) получает от константы x 11 бит (с 5 по 15 биты), а %lo (x) — 5 бит (с 0 по 4 биты).

Помимо арифметических и логических команд есть еще несколько команд, которые используют режим прямой адресации различной разрядности без использования регистра K. В таблице 7 приведены команды, использующие 5/16-битные числа. Команды, помеченные звездочкой, — AND, ANDN, OR и XOR — могут только использовать 16-битные значения PFX. Эти команды действуют на два операнда регистра, если им не предшествовала команда PFX.

Таблица 7. Команды, использующие 5/16-битную прямую адресацию

Способы адресации

№о8 СРИ поддерживает 5 способов адресации:

• 5/16-битная прямая адресация;

• косвенная адресация полной разрядности;

• косвенная адресация частичной разрядности;

• косвенная адресация полной разрядности со смещением;

ADDI AND* ANDN* ASRI

CMPI LSLI LSRI MOVI

MOVHI OR* SUBI XOR*

Косвенная адресация полной разрядности Команды ЬБ и 8Т могут загружать и сохранять, соответственно, полное рабочее слово в или из регистра, используя другой регистр. Чтобы определить адрес, см. таблицу 8.

0x00001200

0x00001200

О

Компоненты и технологии, № 8’2002

Сначала адрес должен быть приведен к рабочему слову так, как описано выше, а регистр К должен быть обработан как смещение со знаком, разрядностью в рабочее слово.

Таблица 8. Команды, использующие косвенную адресацию полной разрядности

Команда Адресный регистр Регистр данных

LD Любой регистр Любой регистр

ST Любой регистр Любой регистр

Таблица 9. Команды, использующие косвенную адресацию частичной разрядности

Команда Адресный регистр Регистр данных Выбор байта или половины слова

ST8S Любой регистр %r0 Непосредственный

STI6S Любой регистр %r0 Непосредственный

ST8D Любой регистр %r0 Младшие биты регистра адреса

STI6D Любой регистр %r0 Младшие биты регистра адреса

Косвенная адресация частичной разрядности

Среди команд №о8 нет команд, которые читают слово частичной разрядности. (только для №о8 СРИ-32) или ЕХТ168 (только для №о8 СРИ-32).

Есть несколько команд, которые могут записывать частичное слово. Каждая из этих команд имеет статический и динамический вариант. Позиция и в пределах исходного регистра, и в рабочем слове памяти определена младшими битами регистра адресации. В случае статического варианта позиция и в пределах исходного регистра, и рабочего слова памяти определена как 1- или 2-битный непосредственный операнд в команде. Как и в случае косвенной адресации через регистр с полной разрядностью, регистр К трактуется как знаковое смещение в рабочем слове при выравнивании адреса по рабочему слову.

дексное значение со знаком, которое определяет смещение в рабочих словах от выровненного адреса (см. табл. 10).

Таблица 10. Команды, использующие косвенную адресацию полной разрядности со смещением

Все команды записи данных частичной разрядности через косвенный регистр используют %r0 в качестве источника данных. Эти команды удобно использовать вместе с командами FILL8 или FILL 16 (только для Nios CPU-32) (см. табл. 9).

Косвенная адресация полной разрядности со смещением

Команды LDP, LDS, STP и STS могут загружать или записывать полное рабочее слово в или из регистра, используя другой регистр для определения адреса и число, чтобы определить смещение в рабочих словах от этого адреса.

В отличие от команд LD и ST, которые для определения адреса памяти могут использовать любой регистр, эти команды могут использовать только специальные регистры для формирования адреса. Команды LDP и STP могут использовать только регистры %L0, %L1, %L2 или %L3 для формирования адреса. Команды LDS и STS могут только использовать указатель стека — регистр %sp (эквивалент %o6) в качестве регистра адреса. Каждая из этих команд берет непосредственное ин-

Команда Адресный регистр Регистр данных Диапазон смещения без PFX

LDP %L0, %LI, %L2, %L3 Любой регистр 0. (только для №ов СРИ-32) или ЕХТ168 (только для №о8 СРИ-32). 8Т888 и 8Т8168 (только для №ов СРИ-32) используют число, чтобы определить байт или смещение слова половинной разрядности, соответственно, от указателя стека, чтобы записать, соответственно, выровненное слово частичной разрядности из исходного регистра %г0 (см. табл. 11).

Таблица 11. Команды, использующие косвенную адресацию частичной разрядности со смещением

Коман- да Адрес- ный регистр Регистр данных Выбор байта или половины слова Диапазон

ST8S %sp %r0 непосредственный 0…I023 байт

STI6S %sp %r0 непосредственный 0…5II слов половинной разрядности

Есть команды, которые могут использовать только указатель стека — регистр %8р (эквивалент %о6) в качестве регистра адреса и могут использовать только регистр %г0 (эквивалент %^, но в ассемблере должен называться %г0) в качестве регистра данных. Эти команды удобно использовать с командами FILL8 или FILL16 (только для №о8 СРИ-32). ИИ

Литература

1. Altera™. Nios Soft Core Embedded Processor, data sheet June 2000, ver. 1.

2. Altera™. Nios_2_0_CPU_datasheet.

3. Altera™. Nios Programmer’s Reference Manual Version 1.1. March 2001.

4. Altera™. Nios 32-Bit Programmer’s Reference Manual. January 2002. Version 2.0.

5. Altera™. Nios 16-Bit Programmer’s Reference Manual. January 2002. Version 2.0.

6. Altera™. Nios_tutorial.pdf.

7. Altera™. Simultaneous Multi-Mastering with the Avalon Bus.

Окончание следует

Информационные технологии в юридической деятельности (менеджмент). Тест с ответами (2020 год)

 

 

 

 

Информационные технологии в юридической деятельности (менеджмент). Тест с ответами (2020 год)

 

 

Правильные ответы отмечены +

 

 

 

Вопрос:

Схема данных используется для

Варианты ответа:

  1. — ввода данных
  2. (+) установки связей между таблицами
  3. — редактирования структуры объекта
  4. — экспорта объектов в другие базы данных

Вопрос:

Система команд процессора устанавливается:

Варианты ответа:

  1. — программно, при загрузке соответствующего драйвера
  2. — аппаратно, при изготовлении материнской платы
  3. — любой программой при ее работе
  4. — программно, при загрузке операционной системы
  5. (+) аппаратно, при изготовлении процессора

Вопрос:

Текст объекта Word Art не может быть:

Варианты ответа:

  1. — Объемным
  2. — Фигурным
  3. — Цветным
  4. (+) зачеркнутым

Вопрос:

Утилита, предназначенная для оптимизации работы диска и повышения скорости доступа к нему:

Варианты ответа:

  1. — резервирования и восстановления файлов
  2. — проверки диска
  3. (+) дефрагментации диска
  4. — уплотнения диска

Вопрос:

Какая из записей является правильной формулой?

Варианты ответа:

  1. — =СУММ(x1, x2, x
  2. — =СУММ(A1$ B
  3. — =СРЗНАЧ(A1 # A
  4. (+) =СУММ($A$1:B

Вопрос:

Открыть существующий документ MS Word можно при помощи раздела меню:

Варианты ответа:

  1. — Формат
  2. (+) Файл
  3. — Правка
  4. — сервис

Вопрос:

К иной (ненормативной) официальной правовой информации можно отнести:

Варианты ответа:

  1. — акты официального разъяснения
  2. — ненормативные акты общего характера
  3. — правоприменительные акты
  4. (+) все перечисленные

Вопрос:

Средства Подбор параметра и Поиск решения находятся в разделе меню:

Варианты ответа:

  1. — вставка
  2. — правка
  3. (+) сервис
  4. — формат

Вопрос:

Официальная правовая информация — это:

Варианты ответа:

  1. — массив правовых актов и тесно связанных с ними справочных, нормативно — технических и научных материалов, охватывающих все сферы правовой деятельности
  2. — информация правового характера, имеющая юридическое значение, — это информация, исходящая от различных субъектов права, не имеющих властных полномочий, и направленная на создание (изменение, прекращени конкретных правоотношений
  3. (+) информация, исходящая от полномочных государственных органов, имеющая юридическое значение и направленная на регулирование общественных отношений
  4. — материалы и сведения о законодательстве и практике его осуществления (применени, не влекущие правовых последствий и обеспечивающие эффективную реализацию правовых норм

Вопрос:

Рассмотрим полное имя (путь) d:\files\prog\myprog\001\prog1.exКакое из утверждений относительно элементов этого имени может оказаться верным?

Варианты ответа:

  1. — 001 является файлом
  2. — prog является файлом
  3. — myprog является файлом
  4. (+) prog1.exe является файлом

Вопрос:

По умолчанию количество листов в книге Microsoft Excel составляет

Варианты ответа:

  1. (+) 3
  2. — 1
  3. — 4
  4. — 2

Вопрос:

Установка и удаление программ реализована в MS Windows (при стандартной конфигурации) в виде:

Варианты ответа:

  1. — элемента Главного меню
  2. (+) элемента Панели управления
  3. — элемента Панели задач
  4. — элемента меню основных приложений

Вопрос:

Если в презентацию вставлена таблица MS Excel, то в ней:

Варианты ответа:

  1. — можно редактировать только числовые данные
  2. — можно редактировать только текстовые данные
  3. (+) можно редактировать и числовые, и текстовые данные
  4. — нельзя редактировать данные — таблица вставляется как точечный рисунок

Вопрос:

Процесс устранения избыточности данных называется:

Варианты ответа:

  1. — денормализация
  2. — сжатие базы данных
  3. — декомпозиция
  4. (+) нормализация

 

Вопрос:

Какой объект нельзя вставить в слайд?

Варианты ответа:

  1. — таблицу MS Excel
  2. (+) функцию BIOS
  3. — Аудиозапись
  4. — Видеоклип

Вопрос:

Международный договор — это:

Варианты ответа:

  1. — нормативные правовые акты, принимаемые путем референдума или законодательным органом РФ и регулирующие наиболее значимые общественные отношения
  2. (+) нормативный правовой акт, регулирующий отношения Российской Федерации с иностранным государством или международной организацией
  3. — материалы и сведения о законодательстве и практике его осуществления (применени, не влекущие правовых последствий и обеспечивающие эффективную реализацию правовых норм
  4. — информация правового характера, имеющая юридическое значение, — это информация, исходящая от различных субъектов права, не имеющих властных полномочий, и направленная на создание (изменение, прекращени конкретных правоотношений

Вопрос:

Сеть класса С содержит:

Варианты ответа:

  1. — 25 компьютеров
  2. — более 16 млн компьютеров
  3. (+) более 200 компьютеров
  4. — более 65000 компьютеров

Вопрос:

Акты Президента РФ принимаются в форме:

Варианты ответа:

  1. — указов
  2. — постановлений
  3. — распоряжений
  4. (+) указов и распоряжений

Вопрос:

Стример — устройство для записи и воспроизведения цифровой информации на:

Варианты ответа:

  1. — компакт-диск
  2. (+) кассету с магнитной лентой
  3. — DVD-диск
  4. — дискету

Вопрос:

Драйверы — это:

Варианты ответа:

  1. — электронно-механические части НЖМД
  2. — компоненты операционной системы, обеспечивающие взаимодействие программ друг с другом
  3. (+) программы, обеспечивающие взаимодействие других программ с периферийными устройствами
  4. — съемные магнитные носители для постоянного хранения информации

Вопрос:

Создать поле заполнения можно из раздела меню:

Варианты ответа:

  1. — сервис
  2. — Формат
  3. (+) Вставка
  4. — Правка

Вопрос:

Назначение ОС — это:

Варианты ответа:

  1. — ввод-вывод и запуск приложений
  2. (+) повышение производительности вычислительной системы
  3. — аутентификация и авторизация пользователей

Вопрос:

Презентацию нельзя сохранить в формате:

Варианты ответа:

  1. — Html
  2. — Jpeg
  3. — Gif
  4. (+) xls

Вопрос:

В ячейку A1 электронной таблицы MS Excel не может быть вписан:

Варианты ответа:

  1. — целое число
  2. — действительное число
  3. (+) диаграмма
  4. — текст

Вопрос:

Размер бумаги, ориентация листа и размеры полей устанавливаются при помощи пунктов меню:

Варианты ответа:

  1. (+) Файл — Параметры страницы
  2. — Файл — Печать
  3. — Файл — Свойства
  4. — Сервис — Настройка

Вопрос:

Информация правового характера, имеющая юридическое значение, — это:

Варианты ответа:

  1. — материалы и сведения о законодательстве и практике его осуществления (применени, не влекущие правовых последствий и обеспечивающие эффективную реализацию правовых норм
  2. — информация, исходящая от полномочных государственных органов, имеющая юридическое значение и направленная на регулирование общественных отношений
  3. (+) информация, исходящая от различных субъектов права, не имеющих властных полномочий, и направленная на создание (изменение, прекращени конкретных правоотношений
  4. — массив правовых актов и тесно связанных с ними справочных, нормативно — технических и научных материалов, охватывающих все сферы правовой деятельности

Вопрос:

При печати на каждом листе формата A4 нельзя разместить:

Варианты ответа:

  1. — ровно 4 слайда
  2. — ровно 3 слайда
  3. (+) ровно 8 слайдов
  4. — ровно 6 слайдов

Вопрос:

Вставлять в слайд автофигуры:

Варианты ответа:

  1. (+) можно в любое место слайда
  2. — можно только в специальную область слайда — графическое полотно
  3. — можно только в область текста
  4. — можно только в область графического изображения

Вопрос:

Задать фон и обрамление текста абзаца можно в разделе меню:

Варианты ответа:

  1. — Вид
  2. — Правка
  3. — Файл
  4. (+) формат

Вопрос:

Виды координатных манипуляторов:

Варианты ответа:

  1. (+) Трекбол
  2. (+) сенсорный экран
  3. — Сканер
  4. (+) Мышь

Вопрос:

Редактор MS Word не позволяет сохранить документ в формате:

Варианты ответа:

  1. — Txt
  2. (+) avi
  3. — Html
  4. — Rtf

Вопрос:

В слайд вставлен звуковой объект. Как можно отрегулировать продолжительность звучания мелодии?

Варианты ответа:

  1. — контекстное меню — настройка действия
  2. — контекстное меню — звук
  3. — контекстное меню — изменить звуковой объект
  4. (+) контекстное меню — настройка анимации

Вопрос:

В 12-и ячейках столбца записаны значения прибыли торговой точки за каждый месяц в течение года. Какой тип диаграммы нецелесообразно использовать, для того чтобы отобразить рост прибыли за год?

Варианты ответа:

  1. — плоскую гистограмму
  2. — график
  3. — объемную гистограмму
  4. (+) круговую диаграмму

Вопрос:

Для того, чтобы выделить несколько ячеек, находящихся в разных частях листа, необходимо:

Варианты ответа:

  1. — выделять каждую ячейку двойным щелчком
  2. (+) выделять каждую ячейку щелчком мыши при нажатой клавише Ctrl
  3. — выделять каждую ячейку щелчком мыши при нажатой клавише Alt
  4. — выделять каждую ячейку щелчком правой кнопки мыши

Вопрос:

Программы, выполняемые в фоновом режиме:

Варианты ответа:

  1. — обеспечивают просмотр пользователем каких-либо данных
  2. — интегрированный офисный пакет программ
  3. — осуществляют диалоговый ввод информации
  4. (+) не требуют непосредственного диалога с пользователем

 

 

 

 

 

 

////////////////////////////

 

16-разрядный микропроцессор. Регистры флагов процессора. Программная модель 16-разрядных микропроцессоров.

Доброго времени суток уважаемый пользователь. На этой страничке мы поговорим на такие темы, как : 16-разрядный микропроцессор. Регистры флагов процессора, Программная модель 16-разрядных микропроцессоров.

Как известно в любом процессоре формально можно выделить три части: регистры, арифметико-логическое устройство (АЛУ) и систему управления. С позиции пользователя структура регистров представляет основной интерес. Регистры можно рассматривать как самую быструю оперативную память (регистровую память),  применение которой обеспечивает максимальную производительность процессора. Регистры используются для промежуточного хранения команд, данных, текущих результатов, адресов, управляющих признаков и их состояние часто может определяться программистом, который на языке Ассемблера может управлять содержимым программно доступных регистров.

Регистры флагов процессора.

МП 8086 имеют следующие группы регистров:

  • Регистры общего назначения (РОН) — 8 регистров.
  • Сегментные регистры — 4 регистра.
  • Указатель команд и флаги — 2 регистра.

Регистры общего назначения (РОН) составляют группу регистров, которые в первую очередь используются для вычислительных целей. Все эти регистры имеют ширину  16 бит, но программа может в индивидуальном порядке использовать старшую или младшую 8-битовые части каждого регистра.

Например, ширина регистра АХ составляет 16 бит; программа может ссылаться на старшие 8 бит регистра АХ, как на регистр АН, а младшие S бит — это регистр AL. То же самое справедливо и для регистров ВХ, СХ и DX.

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

Регистр АХ соответствует аккумулятору разработанных ранее микропроцессоров (8080). Регистр ВХ используется для адресации и для хранения операндов. Когда он используется как 16-битовый регистр, то может быть компонентой при определении адреса операнда.

Регистр СХ используется в качестве счетчика, в котором хранится число повторений одной команды или фрагмента программы. Регистр DX используется при работе с числами повышенной точности, а также при умножении и делении. Регистры АХ и DX вместе участвуют в 32-битовых операциях.

Существуют пять 16-битовых регистров, которые могут принимать участие в адресации операндов. Одни из них одновременно является и регистром общего назначения — это регистр ВХ или регистр базы. Другие четыре регистра — это указатель базы ВР, указатель стека SP, индекс источника S1 и индекс приемника DI. Программа может использовать регистры ВР, SI и DI как 16-битовые операнды, но их отдельные байты ей недоступны. Основное назначение этих регистров — хранение 16-битовых значений, используемых при формировании адресов операндов.

Примечание

В МП 180×86 реализуется сегментированная модель памяти, при которой адресное пространство разделяется на блоки (сегменты) и адрес ячейки памяти складывается из адреса сегмента и адреса смешения внутри сегмента.

Программная модель 16-разрядных микропроцессоров.

16 — разрядные МП реализуют режим реального адреса (R — режим) с 20 — разрядной шиной адреса и доступным адресным пространством до 1 Мбайт. В этом режиме для адресации сегмента и смещения используется по 16 разрядов.. Поэтому размер каждого сегмента составляет 216 =64 Кбайт. Минимальное адресное расстояние между сегментами составляет 16 байт (1 параграф). Относительное расположение сегментов произвольное: сегменты могут совпадать, пересекаться, следовать непосредственно друг за другом.

Сегментные регистры используются для формирования базового адреса. Микропроцессор имеет четыре сегментных регистра: CS, DS, SS и ES для доступа в памяти к сегментам команд, данных, стека и дополнительного сегмента,    соответственно.    Каждый    из    них    используется    по    своему назначению, но их использование может изменяться в соответствии с требованиями программы.

При выполнении любой программы выделяются одновременно доступные ей 4 сегмента, адреса которых располагаются в сегментных регистрах: CS — сегмент для расположения кода в программу, DS – сегмент данных и SS — сегмент стека для расположения данных с дисциплиной обслуживания LIFO (Last Input First Output- последний пришел, первый обслужен).

Микропроцессор использует сегментный регистр команд CS для определения сегмента, содержащего выполняемую программу. Выборка команды происходит из памяти по адресу, заданному парой регистров CS:IP, то есть регистр IP содержит смешение следующей выполняемой команды.

Примечание

Микропроцессор использует сегментный регистр данных DS для обычного доступа к данным, аналогично рассмотренному выше.

Сегментный регистр стека SS задает системный стек. Команды PUSH, POP, CALL, RET и IRET обрабатывают данные в стеке, находящиеся в месте, определяемом парой регистров SS:SP. Регистр SP служит указателем в стековом сегменте. Всякий раз, когда при адресации используется регистр SP, по умолчанию используется сегментный регистр стека.

Существуют специальные команды обработки строк для пересылки данных, которые автоматически используют DS и ES как сегменты источника команды происходит из памяти по адресу, заданному парой регистров CS:IP, то есть регистр IP содержит смешение следующей выполняемой команды.


Дополнительный сегментный регистр ES используется для ссылок к данным в случаях, когда требуется более одного сегмента. Обычной операцией в программе является копирование информации из одной области памяти в другую. Если эти области расположены не внутри одного поля размером 64К, то переместить данные, используя единственный сегментный регистр, невозможно. С помощью дополнительного сегментного регистра программа может одновременно определить сегменты источника и результата. Регистр DS локализует область исходных данных, а регистр ES указывает на сегмент результата.

Существуют специальные команды обработки строк для пересылки данных, которые автоматически используют DS и ES как сегменты источника и результата.

Адресуемое пространство памяти R — режима составляет 220 = 1 Мбайт, т.е. длина физического адреса составляет 20 разрядов. При формировании адреса используется следующая терминология :

  • Логический адрес — 32 разрядный указатель, содержащий 16 разрядов адрес сегмента и 16 разрядов адрес смешения.
  • базовый адрес (БА) — физический 20 — разрядный адрес сегмента, который устанавливается  путем сдвига содержания сегментного регистра влево на 4 разряда (т.е. умножения на 24 =  16 содержания сегментного регистра).
  • эффективный  адрес  (ЭА)  —   адрес  смещения  относительно  адреса сегмента (линейный  адрес относительно адреса сегмента, относительный адрес   внутри   сегмента,   смещение).   Эффективный   адрес   вычисляется   в соответствии со структурой команды, в которой могут задаваться смешение, база и др. (не пугайте с базовым адресом) (например ЭА = база + смешение) или может непосредственно находиться в регистре ( например IP, BP и др.)
  • линейный адрес (ЛА)- адрес, образуемый как сумма базового адреса .
  • физический адрес (ФА) — адрес, задаваемый на адресные шины памяти, в МП 8086 линейный адрес является физическим адресом.

Схема формирования физического адреса в R — режиме (вычисление выполняется внутри процессора блоком формирования адреса) определяется как ФА = ЛА = БА * 16 + ЭА представлена ниже.

Регистр флагов содержит информацию, которая используется побитно. Все флаги младшего байта регистра флагов устанавливаются арифметическими или логическими операциями процессора. Например, команда ADD устанавливает все флаги младшего байта в соответствии с результатом операции. За исключением флага переполнения (OF), все флаги старшего байта устанавливаются и сбрасываются специально предназначенными для vi.no командами. Флаги старшего байта отражают состояние МП 8086 и влияют на характер выполнения программы. Флаги младшего байта являются кодами условия, которые могут быть опрошены командами условного перехода для изменения порядка выполнения программы. Флаги можно разделить на флаги состояния ( показывают результат выполнения команды — это все флаги младшего байта CF, PF, AF, ZF, SF и флаг OF старшего байта) и флаги управления. Флаги состояния:

  1. флаг переноса CF (разряд 0) отмечает наличие переноса из старшего разряда при выполнении операций.
  2. флаг четности PF (разряд 2) показывает, четно или нечетно число единиц   результата. Программа   может   использовать   флаг четности для контроля результата. Флаг четности устанавливается равным 1,если результат операции имеет четное число единиц, и устанавливается равным 0, если число единиц результата нечетно.
  3. флаг дополнительного переноса AF (разряд 4) позволяет микропроцессору выполнять  команды десятичной арифметики, фиксирует перенос из 3-го в 4-й разряд и наоборот.
  4. флаг нуля ZF (разряд 6) показывает, что результат последней операции был равен 0. Программа может использовать этот флаг для определения, равны ли два числа, вычитая одно из другого.
  5. флаг знака SF (   разряд 7) показывает положительным или отрицательным был результат последней арифметической  или   логической операции. Установка бита знака отражает значение старшего бита  последнего результата. Если полученный     результат отрицателен, бит знака устанавливается равным 1. Если же результат положителен или равен 0, бит знака обнуляется.
  6. флаг переполнения OF (разряд 11) — единственный флаг в старшем байте регистра флагов, который устанавливается обычными арифметическими операциями, остальные флаги старшего байта непосредственно устанавливаются    программистом. OF —  флаг переполнения знакового разряда.

Флаги управления:

  1. флаг трассировки TF( разряд 8) помогает отлаживать программы. Этот флаг не устанавливается в результате работы    микропроцессора, а устанавливается программой с помощью специальной команды. Этот флаг называется также флагом пошаговой работы. Когда этот флаг установлен после выполнения каждой команды возникает прерывание.
  2. флаг прерываний IF ( разряд 9) управляет внешними прерываниями. Во время выполнения тех фрагментов программы пользователя, где внешние прерывания  разрешать  нежелательно, можно сбросить флаг прерываний. Пока флаг прерываний сброшен в 0, никакие  внешние  прерывания  не обрабатываются.
  3. флаг направления DF( разряд 10), набор команд Mil 8086 содержит несколько команд обработки строк, которые работают с большими блоками данных. При обработке блоков данных эти команды работают с одним байтом или словом в каждый момент времени. Индексные регистры указывают на блоки данных. После обработки байта или слова процессор изменяет индексный регистр, чтобы ссылаться на следующий элемент блока. Строковые команды используют флаг направления для определения направления продвижения по блоку данных. Если флаг направления сброшен в 0, команды обработки строк увеличивают содержимое индексного регистра, а в противном случае они уменьшают содержимое индексного регистра.

МП 80286 является усовершенствованным вариантом 16 — разрядного МП 8086 с 24 — разрядной шиной адреса, который может работать кроме рассмотренного выше режима реального адреса R в 16- разрядном мультизадачном защищенном режиме Р16 (адресуемая память 224 = 4 Гбaйт), который  не  нашел широкого применения, однако в нем  были заложены основные принципы мультизадачности.

Регистр флагов FLAGS имеет следующие дополнительные флаги. NT- разряд 14, флаг вложенности задач, используется в Р- режиме. Значение NT определяет, что выполняемая задача является вложенной в другую задачу. Значение NT определяет организацию возврата, выполняемую командой IRET: NT=0 — IRET выбирает данные из текущего стека, NT=1 — IRET выбирает данные из сегмента состояния задачи TSS. IOPL — разряды 12, 13, флаг уровня привилегий ввода/вывода (от 0 до 3), предоставляемый командам ввода/вывода в Р — режиме.

Слово состояния машины (MSW) — содержит флаги (дополнительные биты состояний), связанные с расширенными возможностями МП 80286.

Назначение флагов MSW следующее:

  • РЕ — флаг «защита разрешена» (0- режим R, 1 — режим Р16). Установка в 1 производится при выполнении последовательности команд перевода в защищенный режим (в частности по команде загрузки MSW — LMSW). Сброс в 0 возможен только при сбросе микропроцессора.
  • МР  флаг «монитора процессора» работает совместно с флагом TS, разрешает прерывание при исключительной ситуации «Сопроцессор отсутствует» (прерывание имеет место при МР=1 и TS=1).
  • ЕМ — флаг режима программной эмуляции команд сопроцессора 80287, при отсутствии сопроцессора (при ЕМ=1).
  • TS — флаг «задача переключена» (автоматически устанавливается в 1 при переключении каждой задачи).

Расширения сегментных регистров — вызвано изменением формирования адресов памяти при работе микропроцессора в режиме Р16.  При работе в режиме R назначение сегментных регистров  и их использование остается такое же как и для микропроцессора 8086/8088. В защищенном режиме (Р16 и Р32) для обращения к памяти используются недоступные программам дополнительные регистры дескрипторов (описаний) сегментов (48 разрядов для Р16 и 64 разряда дляР32).


В ОЗУ организуется таблица дескрипторов сегментов. Содержание сегментного регистра (селектора) интерпретируется как индекс (номер строки) дескрипторной таблицы, а регистр дескрипторов содержит описание сегмента текущей задачи.

Системные регистры служат для организации Р — режима. Структура системных регистров аналогична структуре расширенных сегментных регистров, т.е. 16 — разрядный регистр — селектор и 48 — разрядный регистр дескриптора. Для управления памятью используются четыре системных регистра:

  1. IDTR — регистр дескриптор ной таблицы прерываний, определяет обращение к таблице точек входа обработки прерываний.
  2. GDTR — регистр глобальной дескрипторной таблицы, которая содержит описания сегментов памяти, доступных любой выполняемой задаче (общая память задач).
  3. LDTR — регистр локальной дескрипторной таблицы, указывающей на сегменты, доступные только конкретной задаче.
  4. TR — регистр задачи, который указывает на сегмент состояния текущей задачи (селектор и соответствующий ему дескриптор сегмента TSS ).

На этом данную статью я заканчиваю, надеюсь, вы полностью разобрались с темами : 16-разрядный микропроцессор. Регистры флагов процессора, Программная модель 16-разрядных микропроцессоров.

Оптимизированная система команд для микроконтроллеров / Хабр

Немногим менее года назад была опубликована статья

«Микропроцессор «из гаража»»

и, возможно, сейчас наступил неплохой момент чтобы снова напомнить о проекте.

Пожалуй, главная новость это расширение системы команд, названное «Версия 1.1». Её отличие от предыдущей это расширенные возможности адресации. Но обо всём по порядку. Чтобы представить о чём идёт речь, взгляните на карту системы команд (картинка кликабельна):



Прежде всего именно её хотелось вынести на ваш суд. При проектировании системы команд были определены два основных требования — хорошая расширяемость и высокая плотность кода. Желтым цветом на картинке помечены зарезервированные коды операций. Как видно из картинки, выполнить требования расширяемости нам удалось. Впрочем, желтые «клетки» это не единственная возможность для расширения — некоторый резерв заложен в неиспользованных битах у многобайтовых кодов операций. Помимо этого два префикса (NOTCH и KOL) могут расширять семантику кодов операций. Как видно из картинки, количество однобайтовых префиксов может быть безболезненно увеличено. Вот эти факторы позволяют заявить о выдающихся возможностях расширения. Но это ещё не всё. В настоящее время максимальная длина инструкции ограничена пятья байтами — этот размер был выбран исходя из возможностей нашей недорогой ПЛИС. Представьте, насколько можно расширить систему команд, если назначить коды операций в диапазоне с 0xf0 по 0xff для более длинных инструкций — шесть байт, семь… длина инструкции может быть ограничена лишь здравым смыслом. Итак, я надеюсь, что сомнений в возможностях расширения системы команд не возникло ни у кого, если они всё же есть — милости прошу обсудить их в комментариях.

А что же с плотностью кода? Да, Хабр суров и не любит выдуманных данных. По субъективным оценкам, текущая плотность кода может конкурировать по плотности кода с первыми версиями процессоров с архитектурой RISC. Например, если рассматривать самые первые версии ARM и MIPS, то, похоже, что версия 1.1 превосходит их по этому параметру. Что касается x86 и современных RISC, то благодаря богатству команд этих архитектур, плотность кода на них выше. Однако, если правильно эксплуатировать заложенные возможности расширения, то по праметру «Плотность кода» можно превзойти современные популярные архитектуры.

Я уверен что многим программистам, имеющим опыт написания на ассемблере x86, беглого взгляда на таблицу с инструкциями достаточно, чтобы заявить «Я умею писать на этом ассемблере». Не знаю, насколько названия ассемблерных мненмоник защищены патентами, но они по возможности выбраны совпадающими с x86. Отдельно хотелось бы сказать об инструкциях из дапазона 0xd0-0xd7. Это четырехбайтовые инструкции, второй байт которых определяет регистры общего назначения, а третий и четвёртый служат для расширенной адресации.

Бит S/D определяет какой из аргументов (четырехбитные коды регистров во втором байте) является указателем — первый или второй регистр. Три бита зарезервированы для дальнейших расширений и должны быть установлены в 0, оставшиеся биты определяют беззнаковое число, прибавляемое к указателю при косвенной адресации. Данные операции появились для упрощения работы со структурированными данными. Почитать об этом можно, например, вот здесь — everest.l4os.ru/aliases_for_registers

Что характерно, изначально код разрабатывался как полностью позиционно независимый и в системе команд вы не найдёте ни одной инструкции перехода по абсолютному адресу — ни условного, ни безусловного. Все адреса переходов представлены как смещения относительнос счётчика команд. Зачем? Это сделано чтобы на уровне архитектуры реализовать 100% позиционно независимый машинный код. Нужна константа? Выбирайте её по смещению относительно счётчика команд. Нужна статическая переменная, адресуйте относительно счётчика команд. Впрочем, детали реализации разных режимов адресации надёжно скрыты за макрокомандами ассемблера. Ответ на вопрос, как без абсолютной адресации вызывать системные функции — далее по тексту.

Собственно, всё вышесказанное относится к системе команд. Вероятно, вы оценили её, возможно с чем-то даже согласились, но… она опоздала лет на 20. Основные области применения микропроцессоров уже поделены между архитектурами x86, arm, mips и простыми микроконтоллерами. Расширяемость и плотность кода это самые последние вещи, на которые посмотрит разработчик устройства при выборе микропроцессора. Что же даёт надежду, на то что проект окажется интересным разработчикам? Раз уж речь идёт о системе команд, то присмотритесь к однобайтовым инструкциям IDLE, TASK_ID, SEND, RECV, LOCK, FREE.

Фишка процессора в том, что внутри него спрятана небольшая часть операционной системы, управляющая задачами и само понятие задача «зашито» в микропроцессоре. Новые инструкции как раз и служат для поддержки многозадачности. Инструкция IDLE выполняет безусловный вход в планировщик. Фактически ненужная инструкция, полезная лишь для отладки самого планировщика. Инструкция TASK_ID вернёт идентификатор активной задачи и количество тактов до следующей плановой операции распределения времени. Парные инструкции LOCK и FREE служат для захвата и освобождения буфера сообщения. В данном случае, несмотря на совпадение название инструкции LOCK с инструкцией x86, она выполняет совершенно другие функции. Поскольку процессор оперирует понятием задача, то нужны средства для взаимодействия задач. С помощью инструкции LOCK задача захватывает буфер сообщения, а с помощью инструкции FREE освободжает его. Буфер сообщения это 64 регистра, обмен с которыми происходит при помощи инструкций SET_MR (запись регистра сообщений значением из РОН) и GET_MR и (чтение регистра сообщений в РОН).

Конечно же самые важные инструкции, ради которых и затевался весь проект, это инструкции SEND и RECV — инструкции передачи и приёма сообщений. Эти инструкции имеют два аргумента — номер задачи для взаимодействия и таймаут операции (задаются в регистрах). Простейший способ отдать время задачи системе или реализовать задержку, это послать сообщение самой себе или ждать сообщение от себя — планировщик просто не будет передавать управление блокированной задаче ранее истечения таймаута сообщения.

Операции SEND и RECV синхронные — чтобы произошёл процесс передачи сообщения между задачами, одна из задач должна выполнить RECV, а другая SEND. В большинстве случаев это означает что первая задача, выполнившая одну из этих инструкций, заблокируется в ожидании готовности другой задачи. Если по какой-то причине блокировка нежелательна, то устанавливается нулевой таймаут и в случае неготовности одной из сторон, вместо блокировки задача получает статус, сигнализирующий о таймауте.

В момент передачи сообщения буфер сообщения, который ранее был захвачен инструкцией LOCK, коммутируется задаче принимающей сообщения. Задача, принявшая сообщение, после работы с буфером должна его освободить. Например, вызов библиотечной функции puts мог бы выглядеть так:

LOCK             ; Захват буфера сообщения
SET_MR MR0, R2   ; установка идентификатора сообщения
SET_MR MR1, R3   ; установка аргумента сообщения
SEND             ; передача сообщения
RECV             ; ожидание ответа на сообщение
GET_MR  R0, MR0  ; чтение кода возврата
FREE             ; освобождение буфера сообщения

Этот код максимально упрощён для простоты понимания. В этом примере инструкция FREE освобождает буфер сообщений, полученный инструкцией RECV, поскольку буфер, захваченный инструкцией LOCK, делегирован задаче-приёмнику при передаче сообщения.

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

Все эксперименты проводятся вот с этим чудом — платой Марсоход2:

Спасибо за внимание. Прежде всего хотелось бы обсудить систему команд, поскольку она уже работает в железе. Что касается аппаратных расширений для многозадачности, то они ещё не готовы — информация о поддержке многозадачности предоставлена в ознакомительных целях, а фактическая реализация может не соответствовать материалу в статье.

Как проверить набор инструкций ЦП — Учебники по Linux

Цель этого руководства — показать, как проверить набор инструкций ЦП в системе Linux. Набор инструкций процессора — это, проще говоря, возможности, которыми он обладает. Например, если ваш ЦП поддерживает аппаратную виртуализацию, то это часть его набора инструкций.

Информация о наборе инструкций вашего процессора хранится в Linux на уровне операционной системы. Это означает, что он вполне доступен для обычных пользователей, нам просто нужно знать, где искать.

В этом руководстве мы увидим, как получить набор инструкций ЦП в Linux как из командной строки, так и из графического интерфейса. Это также будет включать информацию о том, является ли ЦП 32-битным или 64-битным. В связи с этим ознакомьтесь с нашим руководством о том, как проверять и контролировать загрузку ЦП, если вы хотите измерить производительность вашего ЦП.

В этом уроке вы узнаете:

  • Как проверить набор инструкций ЦП из командной строки и графического интерфейса
  • Как установить программу с графическим интерфейсом hardinfo на основные дистрибутивы Linux
Как проверить набор инструкций ЦП
Требования к программному обеспечению и соглашения командной строки Linux
Категория Требования, соглашения или используемая версия программного обеспечения
Система Любая система Linux
Программное обеспечение procinfo, lscpu, hardinfo
Прочее Привилегированный доступ к вашей системе Linux от имени пользователя root или с помощью команды sudo .
Соглашения # — требует выполнения данных команд Linux с привилегиями root либо непосредственно от имени пользователя root, либо с помощью команды sudo
$ — требует выполнения данных команд Linux от имени обычного непривилегированного пользователя

Проверка набора инструкций ЦП через командную строку




Есть несколько утилит командной строки, которые мы можем использовать для получения информации о процессоре в Linux.Следующие методы показывают наиболее полезные инструменты, которые установлены по умолчанию почти в любом дистрибутиве Linux.

Виртуальный файл /proc/cpuinfo содержит много информации о процессорах, установленных в нашей системе. Просмотрите его с помощью следующей команды.

$ кошка /proc/cpuinfo
 

Вывод этой команды будет выглядеть так:

процессор : 0
vendor_id : Подлинный Intel
семейство процессоров: 6
модель : 61
название модели: ЦП Intel(R) Core(TM) i5-5300U @ 2.30 ГГц
шаг : 4
микрокод: 0xffffffff
процессор МГц: 2294,689
размер кеша: 3072 КБ
физический идентификатор: 0
братья и сестры: 4
идентификатор ядра: 0
ядра процессора: 2
апицид : 0
начальный апицид: 0
ФПУ: да
fpu_exception : да
уровень процессора: 20
вп: да
Флаги:  FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA MCA CMOV PAT PSE36 CLFLUSH MMX FXSR SSE SSE2 SS HT SYSCALL NX PDPE1GB RDTSCP LM CONTANTE_TSC REP_GOOD NOPL XTOPOLY CPUID PNI PCLMULQDQ SSSE3 FMA CX16 PCID SSE4_1 SSE4_2 MOVEBE POPCNT AES XSAVE AVX гипервизор f16c rdrand lahf_lm abm 3dnowprefetch invpcid_single pti ssbd ibrs ibpb stibp fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt flush_l1d arch_capabilities 
ошибки: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit srbds
богомипс: 4589.37
Размер cflush: 64
cache_alignment: 64
размеры адресов: физический 39 бит, виртуальный 48 бит
управление энергопотреблением:
...
 

Информация в разделе «флаги» (выделена жирным шрифтом) содержит список возможностей нашего процессора. Все они немного загадочны и в основном предназначены для чтения машинным кодом, поэтому вам нужно будет изучить значение каждого флага, чтобы понять всю информацию в наборе инструкций вашего процессора.

Единственным недостатком этого метода является то, что он будет выводить информацию для каждого логического процессора, поэтому терминал может стать немного спамным — вы всегда можете направить на еще , чтобы очистить его.Нажмите q , чтобы выйти, как только информация начнет повторяться.

$ кошка /proc/cpuinfo | более
 

Большинство современных процессоров имеют несколько ядер, и операционная система воспринимает каждое из них как отдельный процессор. Следовательно, метод procinfo может выводить одну и ту же информацию 16 раз (при условии, что у вас 8-ядерный ЦП с многопоточностью).

Некоторая другая полезная информация, помимо набора инструкций ЦП, из виртуального файла /proc/cpuinfo выглядит следующим образом:

  • Марка и модель процессора: Intel(R) Core(TM) i5-5300U
  • Скорость процессора: 2.30 ГГц
  • Количество ядер ЦП: 2
  • Количество логических ЦП: 4
  • Размер кэша процессора: 3072 КБ
  • Включенные флаги для ЦП (набор инструкций) — сообщает нам, на какие функции способен ЦП

Еще одна полезная утилита, которую вам может показаться немного проще использовать из-за ее краткого вывода, — это команда lscpu .

$ lscpu
 

Вывод этой команды будет выглядеть следующим образом:



Архитектура: x86_64
Режим работы процессора: 32-битный, 64-битный
Порядок байтов: Little Endian
Размер адреса: 39 бит физический, 48 бит виртуальный
ЦП: 1
Список процессоров в сети: 0
Количество потоков на ядро: 1
Количество ядер на сокет: 1
Розетка(и): 1
NUMA-узлы: 1
Идентификатор поставщика: GenuineIntel
Семейство процессоров: 6
Модель: 61
Название модели: ЦП Intel(R) Core(TM) i5-5300U @ 2.30 ГГц
Шаг: 4
ЦП МГц: 2294,688
БогоMIPS: 4589,37
Поставщик гипервизора: KVM
Тип виртуализации: полная
Кэш L1d: 32 КиБ
Кэш L1i: 32 КиБ
Кэш L2: 256 КиБ
Кэш L3: 3 МБ
ЦП NUMA node0: 0
Многократное попадание уязвимости Itlb: KVM: устранение: VMX не поддерживается
Уязвимость L1tf: смягчение; Инверсия PTE
Mds уязвимости: смягчение последствий; Очистить буферы ЦП; Состояние хоста SMT u
                                 неизвестный
Уязвимость Meltdown: смягчение последствий; ПТИ
Обход хранилища спецификаций уязвимостей: уязвимость
Vulnerability Spectre v1: смягчение последствий; Барьеры usercopy/swapgs и __user
                                  очистка указателя
Уязвимость Spectre v2: смягчение; Полный общий ретполин, отключение STIBP
                                 светодиод, RSB начинка
Уязвимость Srbds: неизвестно: зависит от статуса гипервизора.
Асинхронное прерывание уязвимости Tsx: не подвержено
Флаги:  fpu vme de pse tsc msr pae mce cx8 apic sep mtr
                                 r pge mca cmov pat pse36 clflush mmx fxsr sse s
                                 se2 ht системный вызов nx rdtscp lm Constant_tsc rep_go
                                 od nopl xtopology nonstop_tsc cpuid tsc_known_f
                                 req pni pclmulqdq монитор ssse3 cx16 pcid sse4_
                                 1 sse4_2 x2apic movbe popcnt aes xsave avx rdra
                                 гипервизор lahf_lm abm 3dnowprefetch invpcid
                                 _single pti fsgsbase avx2 invpcid rdseed md_cle
                                 ар flush_l1d 
 

Мы снова выделили жирным шрифтом флаги, содержащие информацию о наборе инструкций ЦП.

Эта команда сообщает нам много той же информации, но часть ее легче интерпретировать. В частности, мы получаем более четкую разбивку по ядрам процессора. Вот как интерпретировать:

  • Сокеты: 1 (фактическое количество физических процессоров)
  • Ядер на сокет: 2 (поэтому у нас всего 2 ядра)
  • Потоков на ядро: 2 (2 потока x 2 ядра = 4 логических ЦП)

Команда lscpu также дает нам информацию о нашем гипервизоре и различных размерах кэша.

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

Проверка набора инструкций ЦП через приложение с графическим интерфейсом

Если вы предпочитаете использовать приложение с графическим интерфейсом для просмотра информации о процессоре, а не возиться с командной строкой, есть очень удобная программа под названием «hardinfo», которую можно установить в любом основном дистрибутиве Linux. Вы можете использовать соответствующую команду ниже, чтобы установить hardinfo с помощью менеджера пакетов вашей системы.

Чтобы установить hardinfo на Ubuntu, Debian и Linux Mint:

$ sudo apt установить hardinfo
 

Чтобы установить hardinfo на Fedora, CentOS, AlmaLinux и Red Hat:

$ sudo dnf установить hardinfo
 

Чтобы установить hardinfo на Arch Linux и Manjaro:

$ sudo pacman -S жесткая информация
 

После установки вы можете либо открыть его из панели запуска приложений вашей системы, либо просто выполнить команду hardinfo в терминале.

$ жесткая информация
 

Приложение показывает нам информацию обо всем оборудовании нашей системы, но, чтобы просмотреть информацию конкретно о процессоре, щелкните вкладку процессора на левой панели.

Нажмите на вкладку процессора

. Выделите свой процессор и проверьте нижнюю панель для получения подробной информации. На снимке экрана ниже мы расширили панель информации, чтобы получить более подробную информацию о наборе инструкций ЦП.




Подробный набор инструкций ЦП указан в нижней панели

Заключение

В этом руководстве мы увидели, как получить набор инструкций для наших установленных ЦП в системе Linux.Это включало два метода командной строки, а также приложение с графическим интерфейсом. Это должно рассказать вам достаточно о вашей системе, без необходимости проверять руководство или изучать характеристики вашего ПК.

Набор инструкций процессора: определение и компоненты — видео и стенограмма урока

Инструкции

Так что же такое инструкция? Давайте взглянем на инструкции и длину инструкции.

Об инструкции

Длина инструкции зависит от архитектуры.В системах x86 длина инструкции обычно составляет от 1 до 3 байтов (для кода операции) плюс количество байтов, необходимых для операндов, в зависимости от режима адресации. Что такое режим адресации ? Различные операции могут выполняться непосредственно с чистыми числами, косвенно с числами во внутренних регистрах или очень косвенно с ячейками в основной памяти. Каждый из них представляет собой отдельный режим адресации.

Кроме того, более короткие инструкции не всегда означают более быстрые инструкции.Иногда короткая инструкция скрывает множество машинных циклов. Подумайте о езде на велосипеде, который слишком мал для вас; вы можете крутить педали быстрее, но действительно ли вы быстрее добираетесь туда?

Сама инструкция состоит из битового шаблона (снова те же 1 и 0), но в ассемблере вы увидите такой синтаксис, как MOV, ADD и CMP. Они называются мнемоникой, а не кодом операции (мнемоника — это то, что облегчает запоминание другой вещи). Например, для добавления двух операндов, таких как число 42, к содержимому регистра EAX используется следующий код:

ADD EAX, 42

О длине инструкции

Инструкция имеет определенную длину, как указано в ISA.Однако рассмотрите следующую инструкцию, показанную на этом рисунке, который мы обозначили как Рисунок 1:

Рисунок 1: Образец длины инструкции

Длина инструкции зависит от того, сколько можно указать в наименьшем количестве битов. Некоторые инструкции, подобные показанной на рис. 1, могут быть указаны всего в 16 битах или двух байтах (также называемых словом). Это потому, что эти два 6-битных операнда могут указывать только то, что может быть описано 6-битами в предыдущем примере.Мы можем указать 32 разных вещи с помощью 6 бит, что часто достаточно для указания регистра. Но если нам нужно указать место в основной памяти, для указания каждого адреса может потребоваться 4 байта или больше.

Операнды и коды операций

Еще одна особенность набора инструкций связана с операциями и операндами. То есть, что там на самом деле происходит? Как мы на самом деле выполняем инструкцию и сообщаем процессору, что делать? Здесь на помощь приходит язык ассемблера.

Ниже приведены примеры операторов сборки с использованием команды MOV. Первый операнд — это пункт назначения, а второй операнд — источник. В качестве операндов вы можете указать непосредственные значения, регистры или места в основной памяти (также несколькими способами, чтобы сэкономить время при перемещении большого количества данных).

В этом примере в регистр EAX будет загружено число 9:

   mov eax, 9 

В этом примере содержимое регистра EBX будет перемещено в регистр EAX:

   mov eax, ebx 

Память

Регистры расположены внутри ЦП (центрального процессора).Количество регистров ограничено, но работать с ними намного быстрее, чем с основной памятью, потому что процессору не нужно обращаться к ним по шине компьютера.

Основная память — это общая область памяти компьютера. Он содержит гораздо больше данных, но доступ к ним происходит намного медленнее. Регистры и оперативная память являются типами операндов при выполнении инструкции.

Флаги состояния и счетчик программ

Когда операторы выполняются, флаги состояния внутри процессора переворачиваются, что сообщает ему о том, что произошло в результате этой операции.Бит состояния или флаг может быть включен/выключен (1 или 0). Поскольку 1 и 0 — это машинный язык, это работает хорошо.

Процессор также должен отслеживать, где мы находимся в текущей программе. Это делается с помощью программного счетчика , который указывает на текущую инструкцию.

Итоги урока

Хорошо, давайте на минутку повторим, что мы узнали!

Набор инструкций — это код, понятный процессору. Наборы инструкций являются частью ISA (Архитектура набора инструкций).Вы можете писать код на языке ассемблера , который затем ассемблируется в машинный язык (единицы и нули, понятные процессору). Длина инструкции зависит от нескольких факторов, например от того, какой тип операндов она указывает. Фактические инструкции запрограммированы с использованием мнемоники языка ассемблера.

Операции могут выполняться с чистыми числами или косвенно с содержимым регистров или основной памяти. Для каждого из них требуется свой режим адресации , в котором различные операции могут выполняться непосредственно с чистыми числами, косвенно с числами во внутренних регистрах или очень косвенно с ячейками в основной памяти.

Регистры — это специальные места внутри ЦП, с которыми быстрее работать. Флаги состояния могут быть установлены при выполнении инструкций. Счетчик программ поддерживается машиной и обозначает адрес текущей инструкции. Как компьютерный архитектор, важно понимать, как ISA обрабатывает инструкции и как язык ассемблера используется для создания машинного языка, понятного процессору.

x86 — Новые наборы инструкций в ЦП

  1. Если какая-то программа использует, например, инструкцию SSE, может ли она работать на ЦП, который не поддерживает SSE?

№Но в целом это часто генерирует ловушку или исключение, и обработчик ловушки/прерывания может обработать это, если это необходимо.

Например, когда-то программы часто содержали код для x87. Если сопроцессор x87 существует, инструкция будет работать нормально в аппаратном обеспечении, но если в компьютере нет сопроцессора x87, он сгенерирует ловушку, после чего инструкция будет обработана в программном обеспечении и вернет результат как обычно. См. Что такое протокол для эмуляции x87 с плавающей запятой в MS-DOS?

Первые версии Hackintosh также используют это для эмуляции SSE2 на процессорах, которые не поддерживают этот набор инструкций.Производительность конечно ужасная, но пойдёт.

  1. Если нет, значит ли это, что реальное влияние таких новых инструкций на производительность будет через несколько лет, когда большинство процессоров будут поддерживать такую ​​технологию (так что несовместимостей не будет)?

Да. Но через несколько лет, возможно, программное обеспечение потребует обновлений, верно? Для программного обеспечения с критической производительностью может потребоваться переписать, чтобы использовать преимущества нового набора инструкций. Для некоторых других прирост производительности может быть незаметен

  1. Когда я компилирую программу на C++ с оптимизацией, означает ли это, что она будет использовать некоторые из этих новых инструкций? (Я знаю, что это зависит от многих факторов, особенно от кода, но мне нужен общий ответ) Или они зарезервированы в основном для программ, написанных на ассемблере?

Зависит от компилятора и параметров, которые вы передаете ему во время компиляции.

Современные компиляторы поддерживают автоматическую векторизацию, поэтому они обнаруживают распространенные идиомы и оптимизируют их. Вам просто нужно перекомпилировать , чтобы воспользоваться преимуществами нового набора инструкций. Но для сложных случаев вам все равно нужно вручную оптимизировать , используя встроенные функции SIMD

Если вы используете внешнюю библиотеку , вы автоматически получите улучшение скорости, когда библиотека будет обновлена ​​для поддержки нового набора инструкций, даже если вы ничего не делаете со своей программой

Как установить ЦП: Вставляем мозг в свой компьютер

Вы только что приобрели лучший процессор, какой только могли себе представить, и теперь готовы установить этого плохого парня в свою первую сборку ПК.Но как установить процессор?

К счастью, как и многие другие аспекты сборки ПК, установка процессора — очень простой процесс. Так что не нужно беспокоиться о том, что вы ошиблись, так как мы проведем вас через каждый шаг.

1. Держите ваш процессор там, где он есть

Сидите спокойно. Пока не вынимайте процессор из коробки.

2. Подготовьте материнскую плату

Мы не предполагаем, что вы устанавливаете новый ЦП на новую материнскую плату, но это самый простой сценарий.

Если у вас новая материнская плата, сокет ЦП может быть закрыт пластиковой крышкой. Если вы устанавливаете новый ЦП на материнскую плату, на которой уже есть ЦП, то, очевидно, это и кулер ЦП будут мешать.

В обоих случаях вам нужно удалить все, что мешает сокету процессора. Это также хорошая возможность познакомиться с удерживающим рычагом (и, возможно, металлической скобой на сокете Intel), который удерживает процессор на месте после установки.Вы можете почувствовать, какое давление требуется, чтобы нажать вниз.

Держите удерживающий рычаг в открытом положении вверху. С открытым сокетом процессора вы готовы двигаться дальше.

(Изображение предоставлено: Будущее)

3. Выровняйте ЦП

( Примечание: Удерживая ЦП, лучше всего касаться только боковых сторон. Прикосновение к нижней части или металлической крышке может привести к нежелательному налету на них. это может повлиять на производительность.)

Ваш ЦП должен входить в гнездо на материнской плате в правильном направлении.К счастью, на ЦП и сокете почти всегда есть индикаторы, которые помогут вам правильно настроить выравнивание.

Найдите соответствующий индикатор на углу процессора и разъема. Скорее всего, это будет маленький треугольник. Если вы не видите никакого индикатора, вам следует обратиться к руководствам для вашей материнской платы и процессора.

(Изображение предоставлено Future)

4. Установите ЦП в сокет

Предполагая, что вы правильно выровняли ЦП с сокетом, он должен встать на место.Возможно, вам придется осторожно, и мы имеем в виду осторожно, переместить его, если вам кажется, что он не совсем на месте. Например, контакты процессора AMD могут быть немного сложнее, чтобы совпадать с отверстиями в сокете.

(Изображение предоставлено Future)

5. Закройте удерживающий рычаг

Когда ваш ЦП правильно установлен в гнездо, вы сможете легко надавить на удерживающий рычаг (если это ЦП Intel, сначала опустите скобу ). Если вам кажется, что удерживающий рычаг сопротивляется вам, еще раз проверьте посадку процессора в сокете.Мы считаем, что легкого нажатия мизинцем может быть достаточно, чтобы закрыть фиксирующий рычаг, поэтому не пытайтесь приложить силу, иначе вы можете повредить ЦП (мы согнули контакты ЦП таким образом, и это НЕ ). прикольно пытался их обратно согнуть).

После того, как ваш процессор установлен, а фиксирующий рычаг опущен, все готово. ( Примечание: , если вы также настраиваете остальную часть своего компьютера, убедитесь, что разъем питания ЦП на материнской плате подключен к источнику питания.Он отделен от большего разъема питания для остальной части материнской платы.)

Теперь пришло время установить процессорный кулер.

  • Не знаете, какую видеокарту выбрать? Посмотрите битву Intel против AMD

Что такое набор инструкций? (с изображением)

Набор инструкций или архитектура набора инструкций — это коллективный набор команд, которые может выполнять компьютерный процессор. Все, что делает компьютер, от запуска приложения для обработки текста до кодирования видеофайлов, сводится к некоторой комбинации этих команд.Программисты не создают программы непосредственно с помощью этих инструкций, а используют особый тип программного обеспечения, известного как компилятор, который переводит программный код в машинные инструкции. Большинство персональных компьютеров используют набор инструкций, впервые использованный в 1970-х годах, в то время как смартфоны, планшеты и другие устройства используют более простые наборы инструкций, оптимизированные для сред с низким энергопотреблением.

Набор инструкций включает в себя все, что может сделать компьютер.

Может показаться, что компьютеры способны выполнять безграничные задачи, но микропроцессоры внутри них способны выполнять только ограниченное количество предопределенных команд, известных как инструкции. Каждая инструкция сама по себе относительно проста, например, говоря процессору добавить два числа или переместить часть данных из одного места в другое. В сочетании эти основные инструкции становятся весьма мощными и используются в качестве основы для всех типов программного обеспечения. Производительность и совместимость ЦП напрямую связаны с количеством и типом инструкций, поддерживаемых ЦП, что делает набор инструкций критическим элементом коммерческого успеха или неудачи любого нового проекта.

ЦП может выполнять только те функции, которые являются частью его набора инструкций, но очень немногие программисты встраивают эти команды в свое программное обеспечение. Вместо этого используется промежуточный этап, известный как компиляция. В этом процессе программа, известная как компилятор, переводит удобный для человека код, используемый программистами, в «машинный код», понятный процессору.Поскольку разные компьютерные процессоры поддерживают разные наборы инструкций, компилятор должен быть разработан для типа процессора, на котором программа должна работать. С современными микропроцессорами, способными выполнять сотни миллионов или даже миллиарды инструкций за одну секунду, компиляторы стали единственным практическим средством создания программного обеспечения для компьютеров.

Микропроцессоры, используемые почти во всех персональных компьютерах, проданных с 1980-х годов, используют набор команд под названием x86, который изначально был разработан для процессора Intel®, дебютировавшего в середине 1970-х годов.Стремление к обратной совместимости помогло сохранить доминирование x86 на рынке ПК, хотя новые инструкции иногда добавляются через расширения. Многие смартфоны, планшеты и другие виды бытовой электроники используют микропроцессоры на основе набора инструкций ARM, который проще и энергоэффективнее, чем x86. Высокопроизводительные серверы, суперкомпьютеры и другие специализированные устройства, такие как игровые приставки, могут использовать разные наборы инструкций.

Архитектура

x86 — драйверы Windows

  • Статья
  • 9 минут на чтение
  • 2 участника

Полезна ли эта страница?

Да Нет

Любая дополнительная обратная связь?

Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.

Представлять на рассмотрение

В этой статье

Процессор Intel x86 использует архитектуру компьютера со сложным набором команд (CISC), что означает небольшое количество регистров специального назначения вместо большого количества регистров общего назначения. Это также означает, что будут преобладать сложные инструкции специального назначения.

Процессор x86 ведет свое происхождение как минимум от 8-разрядного процессора Intel 8080. Многие особенности набора инструкций x86 связаны с обратной совместимостью с этим процессором (и с его вариантом Zilog Z-80).

Microsoft Win32 использует процессор x86 в 32-разрядном плоском режиме . Эта документация будет посвящена только плоскому режиму.

Регистры

Архитектура x86 состоит из следующих непривилегированных целочисленных регистров.

eax

Аккумулятор

ebx

Базовый регистр

ЕСХ

Регистр счетчика

edx

Регистр данных — может использоваться для доступа к порту ввода/вывода и арифметических функций

ЕСИ

Регистр индекса источника

эди

Индексный регистр назначения

эбп

Регистр базового указателя

исп

Указатель стека

Все целочисленные регистры 32-битные.Однако многие из них имеют 16-битные или 8-битные подрегистры.

топор

Младшие 16 бит eax

бх

Младшие 16 бит ebx

сх

Младшие 16 бит ecx

дх

Младшие 16 бит edx

и

Младшие 16 бит esi

от

Младшие 16 бит edi

бп

Младшие 16 бит ebp

сп

Младшие 16 бит esp

все

Младшие 8 битов eax

ах

Старшие 8 бит по оси

бл

Младшие 8 бит ebx

бч

Старшие 8 битов bx

кл

Младшие 8 битов ecx

ч

Старшие 8 бит cx

дл

Младшие 8 битов edx

дх

Старшие 8 бит dx

Работа над подрегистром влияет только на подрегистр и ни на какие части за пределами подрегистра.Например, при сохранении в регистре x старшие 16 бит регистра eax остаются неизменными.

При использовании ? (Вычислить выражение) команда, регистры должны иметь префикс «at» ( @ ). Например, вы должны использовать ? @ax , а не ? топор . Это гарантирует, что отладчик распознает x как регистр, а не как символ.

Однако (@) не требуется в команде r (регистры) .Например, r ax=5 всегда будет интерпретироваться правильно.

Два других регистра важны для текущего состояния процессора.

eip

указатель команд

флаги

флаги

Указатель инструкции — это адрес выполняемой инструкции.

Регистр флагов представляет собой набор однобитовых флагов. Многие инструкции изменяют флаги, чтобы описать результат инструкции. Затем эти флаги можно проверить с помощью инструкций условного перехода. Подробнее см. Флаги x86.

Соглашения о вызовах

Архитектура x86 имеет несколько различных соглашений о вызовах. К счастью, все они следуют одним и тем же правилам сохранения регистров и возврата функций:

.
  • Функции должны сохранять все регистры, кроме eax , ecx и edx , которые можно изменить при вызове функции, и esp , которые должны быть обновлены в соответствии с соглашением о вызовах.

  • Регистр eax получает возвращаемые функцией значения, если результат равен 32 битам или меньше. Если результат 64-битный, то результат сохраняется в паре edx:eax .

Ниже приведен список соглашений о вызовах, используемых в архитектуре x86:

  • Win32 ( __stdcall )

    Параметры функции передаются в стек, помещаются справа налево, и вызываемый объект очищает стек.

  • Вызов собственного метода C++ (также известный как thiscall)

    Параметры функции передаются в стек, помещаются справа налево, указатель «this» передается в регистр ecx , и вызываемый объект очищает стек.

  • COM ( __stdcall для вызовов методов C++)

    Параметры функции передаются в стек, помещаются справа налево, затем в стек помещается указатель «this», после чего вызывается функция. Вызываемый объект очищает стек.

  • __fastcall

    Первые два аргумента DWORD или меньшего размера передаются в регистрах ecx и edx . Остальные параметры передаются в стек справа налево.Вызываемый объект очищает стек.

  • __cdecl

    Параметры функции передаются в стек, помещаются справа налево, и вызывающая программа очищает стек. Соглашение о вызовах __cdecl используется для всех функций с параметрами переменной длины.

Отладчик Отображение регистров и флагов

Вот пример отображения регистра отладчика:

  eax=00000000 ebx=008b6f00 ecx=01010101 edx=ffffffff esi=00000000 edi=00465000
eip=77f9d022 esp=05cffc48 ebp=05cffc54 iopl=0 nv up e ng nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000286
  

При отладке в пользовательском режиме можно игнорировать iopl и всю последнюю строку дисплея отладчика.

x86 Флаги

В предыдущем примере двухбуквенные коды в конце второй строки — это флаги . Это однобитовые регистры, и они имеют множество применений.

В следующей таблице перечислены флаги x86:

Код флага Имя флага Значение Статус флага Описание
из Флаг переполнения 0 1 нвов Нет переполнения — Переполнение
дф Флаг направления 0 1 упн Направление вверх — Направление вниз
если Флаг прерывания 0 1 штамп Прерывания отключены — Прерывания разрешены
СФ Знак Флаг 0 1 планка Положительный (или нулевой) — Отрицательный
ЗФ Нулевой флаг 0 1 нззр Ненулевой — нулевой
к Дополнительный флажок для переноски 0 1 нак Без вспомогательного переноса — Дополнительный перенос
пф Флаг четности 0 1 пепо Четность четная — нечетная четность
см. Нести флаг 0 1 нкки Не носить с собой — носить с собой
тф Флажок-ловушка Если tf равно 1, процессор вызовет исключение STATUS_SINGLE_STEP после выполнения одной инструкции.Этот флаг используется отладчиком для реализации пошаговой трассировки. Он не должен использоваться другими приложениями.
иопл Уровень привилегий ввода/вывода Уровень привилегий ввода-вывода Это двухбитное целое число со значениями от нуля до 3. Оно используется операционной системой для управления доступом к оборудованию. Он не должен использоваться приложениями.

Когда регистры отображаются в результате выполнения какой-либо команды в окне команд отладчика, отображается состояние флага .Однако, если вы хотите изменить флаг с помощью команды r (Регистры) , вы должны обратиться к ней с помощью кода флага .

В окне «Регистры» WinDbg код флага используется для просмотра или изменения флагов. Статус флага не поддерживается.

Вот пример. В предыдущем отображении регистра отображается состояние флага ng . Это означает, что флаг знака в настоящее время установлен на 1. Чтобы изменить это, используйте следующую команду:

  р сф=0
  

Это устанавливает флаг знака в ноль.Если вы выполните еще одно отображение регистра, код состояния ng не появится. Вместо этого будет отображаться код состояния pl .

Наиболее часто используемые флаги — Sign Flag, Zero Flag и Carry Flag.

Условия

Условие описывает состояние одного или нескольких флагов. Все условные операции на x86 выражаются в терминах условий.

Ассемблер использует одно- или двухбуквенное сокращение для представления условия.Условие может быть представлено несколькими сокращениями. Например, AE («выше или равно») — это то же условие, что и NB («не ниже»). В следующей таблице перечислены некоторые распространенные условия и их значение.

Название условия Флаги Значение

З

ZF=1

Результат последней операции был нулевым.

Новая Зеландия

ZF=0

Результат последней операции не равен нулю.

С

CF=1

Последняя операция требовала переноса или заимствования. (Для целых чисел без знака это указывает на переполнение.)

НЗ

CF=0

Последняя операция не требовала переноса или заимствования. (Для целых чисел без знака это указывает на переполнение.)

С

SF=1

Результат последней операции имеет установленный старший бит.

NS

SF=0

У результата последней операции сброшен старший бит.

О

ВЫКЛ=1

При обработке как целочисленной операции со знаком последняя операция вызывала переполнение или потерю значимости.

НЕТ

ВЫКЛ=0

При обработке целочисленной операции со знаком последняя операция не вызывала переполнения или потери значимости.

Условия также можно использовать для сравнения двух значений. Инструкция cmp сравнивает два своих операнда, а затем устанавливает флаги, как если бы один операнд вычитался из другого. Следующие условия можно использовать для проверки результата cmp value1 , value2 .

Название условия Флаги Значение после операции CMP.

Е

ZF=1

значение1 == значение2 .

СВ

ZF=0

значение1 != значение2 .

Дженерал Электрик NL

СФ=ОФ

значение1 >= значение2 . Значения обрабатываются как целые числа со знаком.
ЛЭ НГ

ZF=1 или SF!=OF

значение1 <= значение2 . Значения обрабатываются как целые числа со знаком.

грамм НЛЭ

ZF=0 и SF=OF

значение1 > значение2 . Значения обрабатываются как целые числа со знаком.

л НГЭ

СФ!=ОФ

значение1 < значение2 . Значения обрабатываются как целые числа со знаком.

АЭ НБ

CF=0

значение1 >= значение2 .Значения обрабатываются как целые числа без знака.

БЫТЬ нет данных

CF=1 или ZF=1

значение1 <= значение2 . Значения обрабатываются как целые числа без знака.

А НБЭ

CF=0 и ZF=0

значение1 > значение2 . Значения обрабатываются как целые числа без знака.

Б НАЭ

CF=1

значение1 < значение2 .Значения обрабатываются как целые числа без знака.

Условия обычно используются для обработки результатов инструкции cmp или test . Например,

  cmp eax, 5
jz равно
  

сравнивает регистр eax с числом 5, вычисляя выражение ( eax — 5) и устанавливая флаги в соответствии с результатом. Если результат вычитания равен нулю, то будет установлен флаг zr , а условие jz будет истинным, поэтому переход будет выполнен.

Типы данных

Обозначение

В следующей таблице указаны обозначения, используемые для описания инструкций языка ассемблера.

Обозначение Значение

р , р1 , р2

Регистры

м

Адрес памяти (дополнительную информацию см. в следующем разделе «Режимы адресации».)

#n

Непосредственная константа

р

Регистр или память

р /#n

Регистр или непосредственная константа

р /м/#н

Регистр, память или непосредственная константа

куб.см

Код состояния, указанный в предыдущем разделе «Условия».

Т

«B», «W» или «D» (байт, слово или двойное слово)

в соотв. Т

Размер T Аккумулятор: al , если T = «B», ax , если T = «W», или eax , если T 0 = «0302» 5

Режимы адресации

Существует несколько разных режимов адресации, но все они имеют вид T ptr [expr] , где T — некоторый тип данных (см. предыдущий раздел «Типы данных»), а expr — некоторое выражение, включающее константы и регистры.

Обозначение большинства режимов можно вывести без особого труда. Например, BYTE PTR [esi+edx*8+3] означает «взять значение регистра esi , добавить к нему восемь раз значение регистра edx , добавить три, затем получить доступ к байту по адресу полученный адрес».

Трубопровод

Pentium является двухпроцессорным, что означает, что он может выполнять до двух действий за один такт. Однако правила, когда он может выполнять два действия одновременно (известные как , соединяющие ), очень сложны.

Поскольку x86 является процессором CISC, вам не нужно беспокоиться о слотах задержки перехода.

Синхронизированный доступ к памяти

Инструкции загрузки, изменения и сохранения могут получать префикс блокировки , который изменяет инструкцию следующим образом:

  1. Перед выполнением инструкции ЦП сбрасывает все незавершенные операции с памятью для обеспечения согласованности. Все предварительные выборки данных отменены.

  2. При выдаче инструкции CPU будет иметь монопольный доступ к шине.Это обеспечивает атомарность операции загрузки/изменения/сохранения.

Инструкция xchg автоматически подчиняется предыдущим правилам всякий раз, когда она обменивается значением с памятью.

Все остальные инструкции по умолчанию не блокируются.

Прогноз прыжка

Прогнозируются безусловные переходы.

Прогнозируется, что условные переходы будут выполнены или не будут выполнены в зависимости от того, были ли они выполнены в последний раз, когда они выполнялись.Кэш для записи истории прыжков ограничен по размеру.

Если ЦП не имеет записи о том, был ли условный переход выполнен или нет в последний раз, когда он выполнялся, он прогнозирует условные переходы назад как выполненные, а условные переходы вперед как невыполненные.

Выравнивание

Процессор x86 автоматически исправит невыровненный доступ к памяти, что приведет к снижению производительности. Никаких исключений не возникает.

Доступ к памяти считается выровненным, если адрес является целым числом, кратным размеру объекта.Например, все обращения BYTE выравниваются (все является целым числом, кратным 1), обращения WORD к четным адресам выравниваются, а адреса DWORD должны быть кратны 4, чтобы быть выровненными.

Префикс блокировки не следует использовать для невыровненного доступа к памяти.

«Adobe Production Studio требуется процессор, поддерживающий набор инструкций SSE2…» при установке

Выпуск

При попытке установить Adobe Production Studio возвращается сообщение об ошибке: «Для правильной работы Adobe Production Studio требуется процессор, поддерживающий набор инструкций SSE2.»

Раствор

Выполните одно или несколько из следующих решений:

Решение 1. Проверьте системные требования.

Убедитесь, что вы устанавливаете Adobe Production Studio на компьютер, отвечающий минимальным системным требованиям. Чтобы ознакомиться со списком системных требований, посетите веб-сайт Adobe по адресу www.adobe.com/uk/products/productionstudio/systemreqs.html и нажмите ссылку «Системные требования».

Решение 2. Отредактируйте файл Setup.ini.

Вы можете отредактировать файл Setup.ini для Adobe Production Studio, чтобы он не проверял ЦП с поддержкой SSE2 перед попыткой установки. После установки Adobe Production Studio с помощью измененного Setup.ini вы можете успешно запускать After Effects 7.0, Audition 2.0, Illustrator CS2 и Photoshop CS2.

Примечание: Если вы отредактируете файл Setup.ini для установки Adobe Production Studio, вы не сможете запустить Premiere Pro 2.0 или Encore DVD 2.0, если вы не обновите свой процессор до процессора, поддерживающего набор инструкций SSE2.

Для редактирования файла Setup.ini:

1. Скопируйте содержимое всех DVD-дисков Adobe Production Studio в папку на жестком диске. Инструкции по копированию содержимого этих DVD-дисков на жесткий диск см. в документе 328850 «Устранение неполадок при установке (Adobe Production Studio в Windows)».

2. В Блокноте откройте файл Setup.ini, скопированный на шаге 1. Этот файл находится в папке Adobe Production Studio, которую вы создали на шаге 1.

3. Удалите раздел файла, требующий SSE2, удалив следующие четыре строки:

Требование6Тип = CPURequirement

Requirement6MsgFailure=»$$$/ACS/ReqCheckFailureCPUReqSSE2=Для правильной работы Adobe Production Studio требуется процессор, поддерживающий набор инструкций SSE2. Обновите процессор или установите его на другой компьютер.\n\nМинимальные системные требования для Adobe Production Studio:\n\t- Windows XP с пакетом обновления 2\n\t- процессор Intel Pentium 4 или выше\n\t- 4 ГБ места на жестком диске\n\t- 512 МБ ОЗУ\n \t- ЦП, поддерживающий набор инструкций SSE/SSE2″

Требование6MsgSuccess=

Требование6Значение1=SSE2

4.Сохраните и закройте файл.

5. Запустите файл Adobe Production Studio Setup.exe из папки, созданной на шаге 1.

Справочная информация

Набор инструкций SSE2 (Streaming SIMD Extensions 2) входит в состав процессоров Intel Pentium 4 и более поздних версий, а также процессоров AMD Athlon 64 и Opteron и более поздних версий. Premiere Pro и Encore DVD были оптимизированы для использования набора инструкций SSE2 во время предварительного просмотра в реальном времени и при работе с исходными файлами MPEG.

.

Добавить комментарий

Ваш адрес email не будет опубликован.