ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ № 11
1. Перечислите способы описания функций алгебры логики, приведите примеры. Опишите структуру таблиц истинности логических функций от 2-х, 3-х и 4-х переменных. Приведите пример построения таблицы истинности для логической функции F(A,B,C,D)=
Табличный способ. При этом способе функция задается в виде таблицы истинности, представляющей собой совокупность всех комбинацийвходных переменных (левые столбцы) и соответствующих им значений функции (правый столбец). Таблица истинности содержит 2n строк, n +m столбцов (количество входов n+количество выходовm). Например: пусть требуется задать функцию двух переменных, т.е. дискретное устройство на два входа и на один выход, следовательно, число столбцов = 2+1, а число строк = 4. Словесно-аналитический способ задания функции алгебры логики. При этом способе функция задается в виде аналитического выражения. В левой части высказывания указывается действие управляемого привода (или исполнительного устройства), а в правой части- условие, при котором выполняется это действие. Графические способы. Для графического описания логических взаимодействий можно использовать разные способы, предлагаемые стандартом IEC 848: шаговая, временная диаграмма, логические функциональные схемы, функциональный план. Математическое представление алгебры логики. Элементарные логические действия можно представить с помощью специальных или арифметических символов (AND:Ù, · ;OR: Ú, +; NO:a`), обозначающих логические действия. Используя законы алгебры логики, возможны преобразования математических выражений логических функций. Представление логического взаимодействия в электротехнике. Логические взаимодействия сигналов возможно реализовать через определенное соединение контактов. Существует язык программирования, который использует логические свойства соединения контактов.
A | B | C | D | F |
Объясните назначение системы команд процессора. Дайте характеристику команд безусловных переходов CPU i8086 при использовании дальней (far) адресации. Приведите примеры использования этих команд.
Система команд
Система команд процессора i8086 состоит из 98 команд (и более 3800 их вариаций): 19 команд передачи данных, 38 команд их обработки, 24 команды перехода и 17 команд управления процессором. Возможно 7 режимов адресации. Микропроцессор не содержал команды для работы с числами с плавающей запятой. Данная возможность реализовывалась отдельной микросхемой, называемой математический сопроцессор, который устанавливался на материнской плате. Сопроцессор, вовсе не обязательно должен был быть произвёден Intel (модель i8087), к примеру, некоторые производители микросхем, такие, как Weitek, выпускали более производительные сопроцессоры, чем Intel.
Система команд процессора i8086 включает в себя несколько очень мощных строчных инструкций. Если инструкция имеет префикс REP (повтор), то процессор будет выполнять операции с блоками - перемещение блока данных, сравнение блоков данных, присвоение определённого значения блоку данных определенной величины, и т.д., то есть одна инструкция 8086 с префиксом REP может выполнять 4-5 инструкций выполняемых на некоторых других процессорах. Но следует упомянуть, что подобные приёмы были реализованы и в других процессорах, Zilog Z80 имел инструкции перемещения и поиска блоков, а Motorola 68000 может выполнять операции с блоками, используя всего две команды.
В микропроцессоре i8086 была использована примитивная форма конвейерной обработки. Блок интерфейса с шиной подавал поток команд к исполнительному устройству через 6-байтовую очередь команд. Таким образом, выборка и выполнение новых команд могли происходить одновременно. Это значительно увеличивало пропускную способность процессора и лишало необходимости считывать команды из медленной памяти.
КОМАНДЫ БЕЗУСЛОВНЫХ ПЕРЕХОДОВ
Команды безусловного перехода имеют общую мнемонику JMP. Команда короткого безусловного перехода содержит во втором байте смещение, которое интерпретируется как знаковое целое. Диапазон значений байта смещения составляет -128 - +127. Если смещение положительное, осуществляется переход вперед, а если отрицательное - переход назад.
Команда ближнего безусловного перехода может либо непосредственно содержать 16-битное смещение, либо косвенный адрес 16-битного смещения. Диапазон смещения составляет -32768 - +32767 байт относительно адреса команды, находящейся после команды JMP.
Команда дальнего безусловного перехода реализует прямой и косвенный межсегментнные переходы. Форматы команд:
JMP dispL - короткий переход
JMP disp - ближний прямой переход
JMP mem/reg - ближний косвенный переход
JMP addr - дальний прямой переход
JMP mem - дальний косвенный переход
Команда JMP #########################################################
### Осуществляет безусловный переход, модифицируя указатель команд IP (при
переходе типа NEAR) или пару регистров CS:IP (при переходе типа FAR).
Старое значение регистров IP и CS теряется.
### Регистр флажков не модифицируется.
### Форматы команды:
7 0
+-------------------------+ l = 2 байта +----------------+
¦ JMP SHORT Метка ¦ t = 15 тактов ¦ 11101011 ¦
+-------------------------+ ¦----------------¦
Относительный переход типа NEAR. ¦ dispL ¦
Диапазон перехода -128 … +127 байт. +----------------+
Если осуществляется переход назад,
оператор SHORT можно опустить.
7 0
+-------------------------+ l = 3 байта +----------------+
¦ JMP Метка типа NEAR ¦ t = 15 тактов ¦ 11101001 ¦
+-------------------------+ ¦----------------¦
Относительный переход типа NEAR. ¦ dispL ¦
Диапазон перехода -32768 … +32767 ¦----------------¦
байт. ¦ dispH ¦
+----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ JMP Память ¦ t = 18+ЕА тактов ¦ 11111111 ¦
+-------------------------+ ¦----------------¦
+-------------------------+ l = 2 байта ¦ mod 100 r/m ¦
¦ JMP Регистр ¦ t = 11 тактов ¦----------------¦
+-------------------------+ ¦ dispL ¦
Косвенный переход типа NEAR. Адрес +----------------¦
перехода загружается из 16-битового ¦ dispH ¦
общего регистра или слова памяти. +----------------+
7 0
+-------------------------+ l = 5 байтов +----------------+
¦ JMP Метка типа FAR ¦ t = 15 тактов ¦ 11101010 ¦
+-------------------------+ ¦----------------¦
Прямой переход типа FAR: ¦ offL ¦
значение off загружается в IP, ¦----------------¦
значение seg загружается в CS. ¦ offH ¦
¦----------------¦
¦ segL ¦
¦----------------¦
¦ segH ¦
+----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ JMP Память ¦ t = 24+ЕА тактов ¦ 11111111 ¦
+-------------------------+ ¦----------------¦
Косвенный переход типа FAR: ¦ mod 101 r/m ¦
слово памяти загружается в IP, ¦----------------¦
следующее слово памяти - в CS. ¦ dispL ¦
+----------------¦
¦ dispH ¦
+----------------+
### Команда CALL#########################################################
### Передает управление подпрограмме с автоматическим сохранением
адреса возврата в стеке.
### Регистр флажков не модифицируется.
### Форматы команды:
7 0
+-------------------------+ l = 3 байта +----------------+
¦ CALL Метка типа NEAR ¦ t = 19 тактов ¦ 11101000 ¦
+-------------------------+ ¦----------------¦
Относительный переход типа NEAR: ¦ dispL ¦
производится декремент SP на 2, ¦----------------¦
включается в стек содержимое IP, ¦ dispH ¦
прибавляется к содержимому IP +----------------+
значение индексного смещения.
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ CALL Память ¦ t = (21+EA) тактов ¦ 11111111 ¦
+-------------------------+ ¦----------------¦
+-------------------------+ l = 2 байта ¦ mod 010 r/m ¦
¦ CALL Регистр ¦ t = 16 тактов ¦----------------¦
+-------------------------+ ¦ dispL ¦
Косвенный переход типа NEAR: +----------------¦
* производится декремент SP на 2, ¦ dispH ¦
* включается в стек содержимое IP, +----------------+
* слово, адресуемое операндом
загружается в регистр IP.
7 0
+-------------------------+ l = 5 байтов +----------------+
¦ CALL Метка типа FAR ¦ t = 28 тактов ¦ 10011010 ¦
+-------------------------+ ¦----------------¦
Прямой переход типа FAR: ¦ offL ¦
* уменьшается содержимое SP на 2, ¦----------------¦
* заносится в стек содержимое CS, ¦ offH ¦
* уменьшается содержимое SP на 2, ¦----------------¦
* заносится в стек содержимое IP, ¦ segL ¦
* в IP заносится off, в CS - seg. ¦----------------¦
¦ segH ¦
+----------------+
7 0
+-------------------------+ l = 2-4 байта +----------------+
¦ CALL Память ¦ t = (37+EA) тактов ¦ 11111111 ¦
+-------------------------+ ¦----------------¦
Косвенный переход типа FAR: ¦ mod 011 r/m ¦
уменьшается содержимое SP на 2, ¦----------------¦
заносится в стек содержимое CS, ¦ dispL ¦
уменьшается содержимое SP на 2, +----------------¦
заносится в стек содержимое IP, ¦ dispH ¦
слово, адресуемое операндом, +----------------+
загружается в IP, а следующее
слово - в регистр CS.
### Команда RET############################################################
### Возвращает управление вызывающей программе. Команда возврата - это
косвенный переход, т.к. адрес перехода извлекается из вершины стека.
Команда возврата с операндом-константой дополнительно прибавляет,
содержащееся в ней данное, к указателю стека SP, что упрощает возврат из
подпрограмм, параметры которых передаются в стеке.
### Регистр флажков не модифицируется.
### Форматы команды:
7 0
+-------------------------+ l = 1 байт +----------------+
¦ RET ¦ t = 8 тактов ¦ 0011010 w ¦
+-------------------------+ +----------------+
Возврат типа NEAR:
слово из стека помещается в IP,
содержимое SP увеличивается на 2
7 0
+-------------------------+ l = 1 байт +----------------+
¦ RET ¦ t = 18 тактов ¦ 0011010 w ¦
+-------------------------+ +----------------+
Возврат типа FAR:
слово из стека помещается в IP,
содержимое SP увеличивается на 2
слово из стека помещается в CS,
содержимое SP увеличивается на 2
7 0
+-------------------------+ l = 3 байта +----------------+
¦ RET Константа ¦ t = 12 тактов ¦ 0011010 w ¦
+-------------------------+ ¦----------------¦
Возврат типа NEAR: ¦ dataL ¦
слово из стека помещается в IP, ¦----------------¦
содержимое SP увеличивается на 2 ¦ dataH ¦
к содержимому SP добавляется +----------------+
значение константы.
7 0
+-------------------------+ l = 3 байта +----------------+
¦ RET Константа ¦ t = 17 тактов ¦ 0011010 w ¦
+-------------------------+ ¦----------------¦
Возврат типа FAR: ¦ dataL ¦
слово из стека помещается в IP, ¦----------------¦
содержимое SP увеличивается на 2 ¦ dataH ¦
слово из стека помещается в CS, +----------------+
содержимое SP увеличивается на 2
к содержимому SP добавляется
значение константы.
Вызывает процедуру типа near или far. Ассемблер генерирует CALL типа near, если вызываемая процедура объявлена как NEAR, и CALL типа FAR, если вызываемая процедура - типа FAR. Инструкция CALL типа near помещает в стек значение регистра IP (смещение следующей инструкции); после этого она помещает в IP смещение первой инструкции вызываемой процедуры. CALL типа FAR помещает в стек значение регистра CS и помещает в CS адрес сегмента, в котором расположена вызываемая процедура; после этого в стек помещается значение IP, и в IP -смещение первой инструкции этой процедуры в её сегменте. Для возврата из процедуры типа near используется инструкция RETN, а типа far - RETF
Флаги: | Не влияет |
Символьный код: | [метка:] CALL регистр/память |
Машинный код: | Прямой в пределах сегмента: |11101000|disp-low|disp-high| Косвенный в пределах сегмента: |11111111|mod 010 r/m| Косвенный в другой сегмент: |11111111|mod 011 r/m| Прямой в другой сегмент: |10011010|offset-low|offset-high|seg-low|seg-high| |
3. Операторы организации циклов. Дать понятие о циклическом процессе. Описать структуру операторов цикла с постусловием и предусловием, установить их отличия друг от друга. Дать понятие об операторе цикла с параметром, его видах, структуре. Продемонстрировать обозначение операторов цикла на блок-схеме, привести примеры программ, их использующих.
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Определения
Последовательность инструкций, предназначенная для многократного исполнения, называется телом цикла. Единичное выполнение тела цикла называется итерацией. Выражение определяющее, будет в очередной раз выполняться итерация, или цикл завершится, называется условием выхода или условием окончания цикла (либо условием продолжения в зависимости от того, как интерпретируется его истинность — как признак необходимости завершения или продолжения цикла). Переменная, хранящая текущий номер итерации, называется счётчиком итераций цикла или просто счётчиком цикла. Цикл не обязательно содержит счётчик, счётчик не обязан быть один — условие выхода из цикла может зависеть от нескольких изменяемых в цикле переменных, а может определяться внешними условиями (например, наступлением определённого времени), в последнем случае счётчик может вообще не понадобиться. Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации.
Безусловные циклы
Иногда в программах используются циклы, выход из которых не предусмотрен логикой программы. Такие циклы называются безусловными, или бесконечными. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле либо отсутствует (если позволяет синтаксис, как, например, в цикле LOOP…END LOOP языка Ада), либо заменяется константным значением (while true do … в Паскале). В языке С используется цикл for(;;) с незаполненными секциями.
Цикл с предусловием
Цикл с предусловием — цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while, отсюда его второе название — while-цикл. На языке Pascal цикл с предусловием имеет следующий вид:
while <условие> do
begin
<тело цикла>
end;
На языке С++:
while(<условие>)
{
<тело цикла>
}
Цикл с постусловием
Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until; в Си — do…while.
На языке Pascal цикл с постусловием имеет следующий вид::
repeat
<тело цикла>
until <условие выхода>
На языке Си:
do
{
<тело цикла>
}
while(<условие продолжения цикла>)