Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
22
Добавлен:
16.04.2019
Размер:
6 Мб
Скачать
☆

1.3. Система команд и способы адресации операндов

Большинство микропроцессоров выполняют обработку следующих типов целочис­ленных данных:

  • биты;

  • байты;

  • слова (16 разрядов);

  • двойные слова (32 разряда).

Некоторые типы микропроцессоров обрабатывают также четверные слова (64 разря­да), двоично-десятичные числа BCD (Binary Coded Decimal, представление одного деся­тичного разряда с помощью тетрады из 4 битов, которая называется полубайтом или ниб-блом), строки символов. В состав современных высокопроизводительных микропроцессо­ров входят также блоки, производящие обработку чисел, представленных в формате с плавающей точкой (блоки FPU - Floating Point Unit), и выполняющие обработку видео- и аудиоданных, для которых используются специальные форматы представления.

Обрабатываемые данные - операнды могут располагаться в регистрах или памяти (ОЗУ, ПЗУ или кэш-памяти). Выборка операнда - байта, слова или двойного слова произ­водится в соответствии с заданным в команде номером (именем) регистра или адресом соответствующей ячейки памяти.

При размещении в памяти команд и данных используются два варианта расположе­ния байтов в словах:

  1. Начиная с младшего байта («Little-Endian»);

  2. Начиная со старшего байта («Big-Endian»).

При использования размещения «Little-Endian» младший байт располагается в ячей­ке памяти с меньшим адресом (рис. 1.9, а). Данный вариант размещения реализуется в микропроцессорах, выпускаемых компаниями «Intel», AMD, «Hitachi» и рядом других производителей. При размещении «Big-Endian» старший байт располагается в ячейке с меньшим адресом (рис. 1.9, б). Такое расположение байтов обеспечивают микропро­цессоры компании «Motorola», ряд моделей микропроцессоров, выпускаемых IBM и не­которыми другими компаниями. При обращении к памяти микропроцессор адресует ячейку с меньшим адресом, поэтому при размещении «Little-Endian» команда или операнд выбираются, начиная с младшего байта, а при размещении «Big-Endian» -co старшего байта. По этой причине непосредственный перенос программного обеспечения между системами, использующими микропроцессоры с разными вариантами размещения байтов, оказывается практически невозможным. Чтобы решить эту проблему, некоторые современные микро­процессоры, например семейства PowerPC, реализуют оба возможных варианта разме­щения и адресации байтов - «Little-Endian» или «Big-Endian». Выбор необходимого ва­рианта задается программно.

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

Прямая адресация. Операнд выбирается из ячейки памяти, адрес которой содер­жится в команде.

Регистровая адресация. Операнд выбирается из регистра РЗУ, номер (имя) которо­го указано в команде.

Косвенно-регистровая адресация. Операнд выбирается из ячейки памяти, адрес которой содержится в регистре РЗУ, указанном в команде.

Косвенно-регистровая адресация со смещением. Операнд выбирается из ячейки памяти, адрес которой является суммой содержимого указанного в команде регистра РЗУ и заданного в команде смещения), смещение может быть положительным или отри­цательным числом).

Косвенно-регистровая адресация с индексированием и смещением. Операнд выбирается из ячейки памяти, адрес которой является суммой содержимого указанного в команде регистра, индексного регистра и заданного в команде смещения. В некоторых микропроцессорах имеются специальные индексные регистры для реализации этого способа адресации. Другие микропроцессоры используют в качестве индексного какой-либо регистр РЗУ, номер или имя которого указывается в команде. Частным случаем этого способа является индексная адресация, когда адрес образуется суммированием специального индексного регистра и заданного в команде смещения.

Рис. 1.9. Адресация байтов в слове и двойном слове при размещениях «Little-Endian» (а) и «Big-

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

Непосредственная адресация. В этом случае операнд непосредственно содержит­ся в поступившей команде, размещаясь следом за кодом операции (КОП).

Рассмотрим основные особенности данных способов адресации.

Прямая адресация обеспечивает обращение к любой ячейке ОЗУ, Однако для зада­ния адреса операнда команда должна содержать необходимое количество байт адреса (до 4), что вызывает увеличение объема памяти программ и времени выборки команды из памяти.

Регистровая адресация является наиболее простой и быстрой. Так как объем РЗУ огра­ничен, то для задания номера регистра требуется всего несколько бит (обычно от 3 до 8). Так как РЗУ расположено на кристалле микропроцессора, то для выборки операнда не требует­ся обращение к внешней системной шине, поэтому выполнение операций при данном спо­собе адресации требует минимального времени. Однако объем РЗУ ограничен (несколько десятков или сотен байт), поэтому необходимо периодическое обращение к ОЗУ для сохра­нения результатов и получения новых операндов.

Отметим, что ряд типов микропроцессоров имеет аккумуляторную организацию опера­ционного устройства, при которой используется специальный регистр-аккумулятор, в кото­рый заносится результат операции ОУ. Содержимое этого регистра служит также операндом при выполнении очередной операции ОУ. При этом не требуется указания в команде номера (адреса) регистра-аккумулятора, так как обращение к нему обеспечивается автоматически в соответствии с внутренней структурой микропроцессора. Такой вариант регистровой адре­сации обеспечивает наиболее быстрое выполнение нескольких последовательных опера­ций обработки. Однако для загрузки операнда в аккумулятор и сохранения полученных ре­зультатов приходится выполнять специальные команды пересылки, что снижает общую про­изводительность системы.

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

Непосредственная адресация также вызывает увеличение размера команды на чис­ло байт заданного операнда. Из-за этого возрастает объем памяти команд и время вы­борки команды. Однако при этом операнд поступает непосредственно в процессор, т. е. не требуется выполнение дополнительного цикла обращения к ОЗУ. Данный способ ад­ресации широко используется для введения различных констант, используемых при об­работке данных,

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

Команды микропроцессора могут быть безадресными, одноадресными и двух­адресными.

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

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

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

Следует отметить, что в некоторых типах микропроцессоров реализуются также трехадресные команды, где задаются отдельные адреса размещения двух операндов и ре­зультата операции. Такие команды используют только регистровую адресацию и выпол­няются в микропроцессорах с RISC-архитектурой, имеющих значительный объем РЗУ, например, в PowerPC.

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

  • операции пересылки;

  • арифметические операции;

  • логические операции;

  • операции сдвига;

  • операции сравнения и тестирования;

  • битовые операции;

  • операции управления программой;

  • операции управления процессором.

При описании команд обычно используются их мнемонические обозначения (мнемо­коды), которые служат для задания команды при программировании на языке ассембле­ра. Для различных версий ассемблера мнемокоды некоторых команд могут отличаться. Например, для команды вызова подпрограммы используется мнемокод CALL или JSR («Jump to SubRoutine»). Однако мнемокоды большинства команд для основных типов микропроцессоров совпадают или отличаются незначительно, так как они являются со­кращениями соответствующих английских слов, определяющих выполняемую операцию. В данном разделе будут в основном использоваться мнемокоды команд, принятые для процессоров Pentium.

Команды пересылки. Основной командой этой группы является команда MOV, кото­рая обеспечивает пересылку данных между двумя регистрами или между регистром и ячей­кой памяти. В некоторых микропроцессорах реализуется пересылка между двумя ячейка ми памяти, а также групповая пересылка содержимого нескольких регистров в память или их загрузка из памяти. Например, микропроцессоры семейства 68ххх компании «Motorola» выполняют команду MOVE, обеспечивающую пересылку из одной ячейки памяти в другую, и команду MOVEM, которая производит запись в память или загрузку из памяти содержи­мого заданного набора регистров (до 16 регистров). Команда XCHG производит взаимный обмен содержимым двух регистров процессора или регистра и ячейки памяти.

Команды ввода IN и вывода OUT реализуют пересылку данных из регистра процессора во внешнее устройство или прием данных из внешнего устройства в регистр. В этих коман­дах задается номер интерфейсного устройства (порта ввода-вывода), через которое про­изводится передача данных. Отметим, что многие микропроцессоры не имеют специаль­ных команд для обращения к внешним устройствам. В этом случае ввод и вывод данных в системе выполняется с помощью команды MOV, в которой задается адрес требуемого интерфейсного устройства. Таким образом, внешнее устройство адресуется как ячейка памяти, а в адресном пространстве выделяется определенный раздел, в котором распо­лагаются адреса подключенных к системе интерфейсных устройств (портов).

Команды арифметических операций. Основными в этой группе являются команды сложения, вычитания, умножения и деления, которые имеют ряд вариантов. Команды сло­жения ADD и вычитания SUB выполняют соответствующие операции с содержимым двух регистров, регистра и ячейки памяти или с использованием непосредственного операнда. Команды ADC, SBB производят сложение и вычитание с учетом значения признака. С, ус­танавливаемого при формировании переноса или заема в процессе выполнения предыду­щей операции. С помощью этих команд реализуется последовательное сложение операн­дов, число разрядов которых превышает разрядность процессора. Команда NEG изменя­ет знак операнда, переводя его в дополнительный код.

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

Команды логических операций. Практически все микропроцессоры производят логи­ческие операции. И, ИЛИ, Исключающее ИЛИ, которые выполняются над одноименными разрядами операндов с помощью команд AND, OR, XOR. Операции выполняются над со­держимым двух регистров, регистра и ячейки памяти или с использованием непосредствен­ного операнда. Команда NOT инвертирует значение каждого разряда операнда.

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

Выполнение основных команд сдвига показано на рис. 1.10. При логических сдвигах вле­во (SHL) и вправо (SHR) производится заполнение освободившихся разрядов операнда ну­лями. Команда арифметического сдвига влево SAL реализуется аналогично команде логи­ческого сдвига SHL. При арифметическом сдвиге влево производится заполнение освобо­дившихся разрядов значением старшего (знакового) разряда. Поэтому при таком сдвиге со­храняется знак операнда. Два варианта циклических сдвигов выполняются с включением признака С в цепь переноса (команды RCL, RCR) или с использованием признака С для хранения последнего выдвигаемого разряда операнда (команды ROL, ROR).

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

Команды сравнения и тестирования. Сравнение операндов обычно осуществляется с помощью команды СМР, которая производит вычитание операндов с установкой значений признаков N, Z, V, С в регистре состояния в соответствии с полученным результатом. При этом результат вычитания не сохраняется, и значения операндов не изменяются. Последую­щий анализ полученных значений признаков позволяет определить относительное значение (>,<, = ) операндов со знаком или без знака. Использование различных способов адресации позволяет производить сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Некоторые микропроцессоры выполняют команду тестирования TST, которая является однооперандным вариантом команды сравнения. При выполнении этой команды устанав­ливаются признаки N, Z в соответствии со знаком и значением (равно или не равно нулю) адресуемого операнда.

Команды битовых операций. Эти команды производят установку значения признака. С в регистре состояний в соответствии со значением тестируемого бита bn в адресуемом операнде. В некоторых микропроцессорах по результату тестирования бита производится установка признака Z. Номер тестируемого бита п задается либо содержимым указанного в команде регистра, либо непосредственным операндом.

Команды данной группы реализуют разные варианты изменения тестируемого бита. Команда ВТ сохраняет значение этого бита неизменным. Команда BTS после тестирова­ния устанавливает значение bn = 1, а команда ВТС - значение bn = 0. Команда ВТС инвер­тирует значение бита bn после его тестирования.

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

  • команды безусловной передачи управления;

  • команды условных переходов;

  • команды организации программных циклов;

  • команды прерывания;

  • команды изменения признаков.

Безусловная передача управления производится командой JMP, которая загружает в программный счетчик PC новое содержимое, являющееся адресом следующей выпол­няемой команды. Этот адрес либо непосредственно указывается в команде JMP (пря­мая адресация), либо вычисляется как сумма текущего содержимого PC и заданного в команде смещения, которое является числом со знаком (относительная адресация). Так как PC содержит адрес очередной команды программы, то последний способ задает адрес перехода, смещенный относительно очередного адреса на заданное число бай­тов. При положительном смещении производится переход к последующим командам программы, при отрицательном смещении - к предыдущим.

Вызов подпрограммы также производится путем безусловной передачи управления с помощью команды CALL (или JSR). Однако в этом случае перед загрузкой в PC нового содержимого, задающего адрес первой команды подпрограммы, необходимо сохранить его текущее значение (адрес очередной команды), чтобы после выполнения подпрограм­мы обеспечить возвращение к основной программе (или к предыдущей подпрограмме при вложении подпрограмм). Текущее содержимое PC обычно сохраняется в стеке, который организуется в ОЗУ. После выполнения подпрограммы выполняется безусловная переда­ча управления исходной программе с помощью команды возврата из подпрограммы RET, которая выбирает из стека и загружает в PC его старое содержимое.

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

Таблица 1.1

В качестве условия часто используется относительное значение двух операндов, опре­деляемое с помощью команды сравнения СМР. Например, равенство операндов опреде­ляется значением признака нуля Z после команды СМР: операнды равны, если Z = 1 (результат равен 0); не равны, если Z = 0 (результат не равен 0). Если сравниваются без­знаковые операнды, то соотношение их значений «выше - ниже - равно» определяют следующие условия (см. табл. 1.1):

.П h'v , ' '-"*-'.'ri

  • ниже/не выше и не равно (<), команда JB; .а «ь».4т& r-j м 'jo-'v >/<

  • не ниже/выше или равно (>=}, команда JNB;.'..,..,,

  • ниже или равно/не выше (<=), команда JBE; ^г---.», ; ч ^ .^oruivecr

  • не ниже и не равно/выше (>), команда JNBE. '' .'?;'"' -~" •"''"-"':^нммс.;

Если сравниваются операнды со знаком, то соотношение между ними «больше - мень­ше-равно» определяют условия (см. табл. 1.1):

  • меньше/не больше и не равно (<), команда JL;

  • не меньше/больше или равно (>=), команда JNL;

  • меньше или равно/не больше (<=), команда JLE;

  • не меньше и не равно/больше (>}, команда JNLE.

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

Команды организации программных циклов осуществляют условный переход в зависи­мости от значения содержимого заданного регистра, который используется как счетчик цик­лов. Например, в процессорах Pentium для организации циклов используется команда LOOP и регистр ЕСХ. Команда LOOP уменьшает содержимое ЕСХ на 1 (декремент) и проверяет полученное значение. Если содержимое ЕСХ = 0, то выполняется переход к команде, адрес которой определяется с помощью относительной адресации (смещение задано в команде LOOP), Если ЕСХ = 0, то выполняется следующая команда программы. Команда LOOP обычно ставится в конце цикла, обеспечивая его выполнение п раз, где п задается начальным значе­нием ЕСХ. Команды LOOPZ, LOOPNZ аналогичны команде LOOP, но используют дополни­тельные условия для выхода из цикла. Команда LOOPZ обеспечивает выход из цикла до выполнения заданного числа циклов п при получении ненулевого результата, т. е. при уста­новке признака Z = 0. Если в каждом цикле реализуется нулевой результат, то выполняется п циклов, как в команде LOOP. Команда LOOPNZ прекращает выполнение циклов при получе­нии нулевого результата, т. е. при установке ZF = 1.

Команды прерываний INT обеспечивают переход к одной из программ обслуживания исключений и прерываний (обработчику прерываний 0). При этом текущее содержимое PC и регистра состояния заносится в стек. Каждая из программ обработки соответствует оп­ределенному типу исключения или прерывания. Например, в процессорах Pentium выбор программы обработки определяется 8-разрядным операндом, задаваемым во втором байте команды INT. Вызов соответствующей программы обслуживания производится с помощью таблицы, в которой содержатся векторы исключений (прерываний) - адреса первых ко­манд программ обслуживания. Каждый вектор задает необходимое содержимое PC, заг­рузка которого обеспечивает переход к выполнению первой команды программы обслужи­вания. Команда IRET обеспечивает возврат из подпрограммы обслуживания прерывания путем извлечения из стека и восстановления содержимого программного счетчика и реги­стра состояния, соответствующих прерванной процедуре.

Команды управления признаками обеспечивают запись-чтение содержимого регистра состояния, в котором хранятся признаки, а также изменение значений отдельных признаков. Например, в процессорах Pentium реализуются команды LAHF и SAHF, которые выполняют загрузку младшего байта, где содержатся признаки, из регистра состояния EFLAG в млад­ший байт регистра ЕАХ и заполнение младшего байта EFLAGS из регистра ЕАХ. Команды CLC, STC осуществляют установку значений признака переноса CF. = О, CF = 1, а команда CMC вызывает инвертирование значения этого признака. Так как признаки определяют ход выполнения программы при условных переходах, то команды изменения признаков обычно используются для управления программой.

В данном разделе описывается управление программой с помощью изменения со­держимого программного счетчика PC. В процессорах Pentium и ряде других моделей компании «Intel» (8086, 80186, 80286, 386,486 и других), реализуется сегментная органи­зация памяти, при которой адрес выбираемой команды определяется содержимым двух регистров - указателя команды EIP и сегментного регистра CS. При этом различные виды передачи управления в программе реализуются путем изменения содержимого регистров EIP и CS.

Команды управления процессором. К этой группе относятся команды останова, отсутствия операции и ряд команд, определяющих режим работы процессора или его отдельных блоков. Команда HLT прекращает выполнение программы и переводит про­цессор в состояние останова, выход из которого происходит при поступлении сигналов прерывания или перезапуска (Reset). Команда NOP («пустая» команда), которая не вы­зывает выполнения каких-либо операций, служит для реализации программных задер­жек или заполнения пропусков, образовавшихся в программе.

Специальные команды CLI, STI запрещают и разрешают обслуживание запросов пре­рывания, устанавливая соответствующее значение бита управления I в регистре состоя­ния процессора. В процессорах Pentium для этого используется бит управления (флаг) IF в регистре EFLAGS.

Многие современные микропроцессоры выполняют команду идентификации, которая по­зволяет пользователю или другим устройствам получить информацию о типе процессора, ис­пользуемого в данной системе. В процессорах Pentium для этого служит команда CPUID, при выполнении которой необходимые данные о процессоре поступают в регистры ЕАХ, ЕВХ, ЕСХ, EDX и могут затем считываться пользователем или операционной системой.

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

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

Некоторые процессоры производят арифметические операции с двоично-десятичными числами или выполняют специальные команды коррекции результата при обработке таких чисел. В состав многих высокопроизводительных процессоров входит FPU - блок обработки чисел с «плавающей точкой». Соответственно такие процессоры выполняют большую груп­пу команд, реализующих операции с этими числами и управляющих работой блока FPU.

В ряде современных процессоров реализована групповая обработка нескольких це­лых чисел или чисел с «плавающей точкой» с помощью одной команды по принципу SIMD («Single Instruction-Multiple Data!) - «Одна команда - Множество данных». Одно­временное выполнение операций над несколькими операндами существенно повышает производительность процессора при работе с видео- и аудиоданными. Такие операции широко используются для обработки изображений, звуковых сигналов и в других прило­жениях. Для выполнения этих операций в состав процессоров введены специальные блоки, реализующие соответствующие наборы команд, которые в различных типах процессоров (Pentium, Athlon) получили название ММХ («Milti-Media Extension») - Мультимедийное расширение, SSE («Streaming SIMD Extension») - Потоковое SIMD-расширение, «3D - Extension» - Трехмерное расширение.

Характерной особенностью процессоров компании Intel, начиная с модели 80286, является приоритетный контроль при обращении к памяти, который обеспечивается при работе процессора в режиме защищенных виртуальных адресов - «Protected Mode» (за­щищенный режим). Для реализации этого режима используются специальные группы команд, которые служат для организации защиты памяти в соответствии с принятым алгоритмом приоритетного обращения.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]