Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Способы адресации в АПЛ
Существует 4 способа адресации:
принудительный;
естественный;
функциональный;
программируемый.
1. Принудительный способ.
Адрес следующей микрокоманды принудительно указывается в предыдущей микрокоманде.
поле условий
МК
0, 1
х
0, 1
А МК адрес следующей микрокоманды
х |
Х |
А |
0 |
0 |
А0 |
0 |
1 |
А0 |
1 |
0 |
А0 |
1 |
1 |
А1 |
где х условие;
Х необходимость его проверки.
Недостатком этого способа является удлинение адресного поля микрокоманды. Применяется редко.
2. Естественный способ.
Предполагает размещение последовательно выполняемых микрокоманд в последовательно расположенных ячейках МПП. Если нет переходов, то адрес следующей микрокоманды определяется инкрементом предыдущей.
поле условий
МК
х |
Х |
А |
0 |
0 |
А+1 |
0 |
1 |
А+1 |
1 |
0 |
А+1 |
1 |
1 |
А0 |
0,1
х
0,1
+1
А
Этот метод реализован практически во всех машинах. Его достоинством является то, что, по сравнению с принудительным способом, все микрокоманды стали на адрес короче, однако на быстродействие это не влияет.
3. Функциональный способ.
Последовательно проверяет 2 флага:
0
1
1 0 1 0
А0 А1 А2 А3
Метод подразумевает объединение проверок в одну, т.е. оба флага проверяются в одной микрокоманде. Это является достоинством данного метода. Недостатком аппаратная сложность, дороговизна.
х1
х2
А
4. Программируемый способ.
В УА аппаратно реализованы все 3 предыдущих метода. Программно выбирается наиболее эффективный.
Формат команды с непосредственным операндом:
1) 2)
3) 4)
5) 6)
5 и 6 байт непосредственный операнд
Биты s и w интерпретируют данные:
если sw = 10 => байт
01 => слово
11 => двойное слово
disp смещение
data сам операнд
Однооперандная команда:
Может занимать от 2 до 4 байт. здесь хранится единственный операнд
w размер операнда: если w = 0 => байт
1 => слово
Формат команды 32-разрядного процессора:
Команде предшествует префикс байт, который идентифицирует находящуюся после него команду.
У префикса есть 4 поля:
1) повтор: указывает длину цепочки
2) размер адреса: коммутирует переключение 16- (R- и V-режимы) и 32-разрядных адресов (P-режимы)
3) размер операнда (32- или 16-разрядные)
4) замена сегмента. Поле, в котором указывается физический адрес сегмента, с которым мы
сейчас работаем, если он отличается от сегмента указанного по умолчанию.
Команда:
ss множительный коэффициент, на который умножается содержимое регистра, участвующего в длинном способе адресации.
index: указывает номер регистра, в котором хранится индекс для индексной адресации.
base: номер РОНа, в котором хранится база.
sib: если байт sib присутствует в команде, то адрес операнда вычисляется с привлечением полей mod, ss, index и base. Если его нет, то как и в 16-разрядном процессоре с привлечением полей mod и r/m.
0, 1, 2 или 4 длина команды.
2. Как находится ток Iн в ветви с нагрузкой Rн методом эквивалентного генератора?
Метод эквивалентного генератора применяют для расчета тока в одной ветви схемы не содержащей управляемого источника и, в общем случае, не имеющей индуктивных связей с оставшейся частью схемы. Он основан на теореме об эквивалентном генераторе: любую часть схемы, рассматриваемую относительно двух зажимов, можно заменить эквивалентным генератором с параметрами , , при этом режим во внешней цепи не изменится.
МЭГ состоит в том, что сопротивление ветви, в которой требуется найти ток, считают сопротивлением нагрузки, а всю остальную часть схемы активным двухполюсником. Этот двухполюсник заменяют эквивалентным генератором с параметрами , , и находят ток через сопротивление нагрузки.
Примерный порядок расчета
1. Выбирают положительное направление тока IН в ветви с нагрузкой.
2.Удаляют сопротивление нагрузки и в месте разрыва изображают стрелку, направленную так же, как ток в ветви нагрузки. Стрелка указывает направление напряжения холостого хода .
3. Находят величину :
- записывают уравнение по второму закону Кирхгофа для фиктивного контура, включающего и не вносящего дополнительных неизвестных UJ;
- в режиме холостого хода рациональным методом находят токи ветвей, входящие в уравнение для ;
- рассчитывают величину .
4. Определяют входное сопротивление RBX относительно точек разрыва. Возможно несколько способов:
а) ,
где - ток короткого замыкания, направленный также как ;
б) при отсутствии в схеме управляемых источников расчет входного сопротивления рациональнее всего выполнять сворачиванием схемы к входным зажимам пассивной схемы, полученной из активной схемы, путем замены автономных источников энергии их внутренними сопротивлениями;
в) в схеме с автономными и управляемым источниками энергии автономные источники энергии заменяют их внутренними сопротивлениями. К зажимам полученной схемы подключают пробный источник и рассчитывают неизвестный пробный ток. Получают как
при одинаковом направлении .
5. Рассчитывают ток через сопротивление нагрузки
.
Пример: Дано: , , , , , , .
Рис. 2.6.1
=>
,
где - ток в режиме холостого хода. можно найти:
1) из системы уравнений по законам Кирхгофа
Откуда .
2) по методу наложения
, ,
рис. 2.6.2
Согласно рис. 2.6.2:
.
Тогда: .
В TurboPascal возможна организация массива массивов, а точнее элементами массива могут быть другие массивы. Подробнее остановимся на двумерных массивах (матрицах).
а11 а12 а13…а1n Матрица это таблица, состоящая из m-строк и n-столбцов,
а21 а22 а23…а2n где аij это элемент матрицы.
. . . . . . i указывает на принадлежность этого элемента к строке.
аm1 аm2 аm3…аmn j указывает на принадлежность этого элемента к столбцу.
Если в матрице число строк равно числу столбцов (n=m), то такая матрица называется квадратной.
Описание двумерных массивов:
<список идентификаторов> : array[<список диапазонов, через запятую>] of <тип элементов массива>;
var A:array[1..5,1..5] of integer;
Или var B,C:array[1..3,1..4] of real;
Доступ к элементу двумерного массива осуществляется с помощью указания двух индексов в квадратных скобках через запятую (номера строки и номера столбца). Каждый элемент массива имеет два индекса, из которых первый указывает номер строки матрицы, второй - номер столбца.
A[1,2]:=7
Ввод элементов массива |
Вывод элементов массива |
Для двумерных массивов допускается ввод как по строкам, так и по столбцам. Способ ввода матрицы определяется тем, какой индекс (строки или столбца) изменяется первым. I Ввод элементов по строкам for i:=1 to n do for j:=1 to m do read(A[i,j]); II Ввод элементов по столбцам for j:=1 to m do for i:=1 to n do read(A[i,j]); III Ввод элементов с сообщением for i:=1 to n do for j:=1 to m do begin write(A[,i,,,j,]=); readln(A[i,j]); end; |
Вывод матрицы обычно выполняется в общепринятом виде, то есть по строкам. I Вывод элементов массива в столбик for i:=1 to n do for j:=1 to m do writeln(A[i,j]:4); II Вывод элементов массива в виде матрицы (в общепринятом виде) for i:=1 to n do begin for j:=1 to m do write(A[i,j]:4); writeln; end; |
Часто при работе с двумерными массивами (матрицами) приходится оперировать с элементами, обладающими некоторыми признаками, в частности, связанными с положением элементов относительно диагоналей матрицы.
На главной диагонали: {A[i,j] ; i=j}
Ниже главной диагонали: {A[i,j] ; i>j}
Выше главной диагонали: {A[i,j] ; i<j}
На побочной диагонали: {A[i,j] ; i+j=n+1}
Ниже побочной диагонали: {A[i,j] ; i+j>n+1}
Выше побочной диагонали: {A[i,j] ; i+j<n+1}
Операции с матрицами.
Над матрицами определены следующие действия:
- сложение (вычитание) для подобных матриц
- умножение (стр.=стлб.)
- транспонирование (квадратная матрица)
- обратные матрицы.
Сложение (вычитание) матриц:
A = [aij] B = [bij] C = [cij]
i = 1,n j = 1,m
C = A +(-) B
for i := 1 to n do
for j := 1 to m do
c[i,j] := a[i,j] +(-) b[i,j]
Умножение матриц:
A = [aij] B = [bij] C = [cij]
i = 1,n j = 1,n
C = A * B
for i := 1 to n do
for j := 1 to n do
begin
c[i,j] := 0;
for k := 1 to n do
c[i,j] := c[i,j] + a[i,k]* b[k,j];
end;
Транспонирование матриц:
A = [aij] i,j = 1,n
Транспонирование замена строки на соответствующий столбец.
Используется 2 основных метода:
for i := 1 to n do
for j := 1 to n do
b[i,j] := a[j,i]
этот алгоритм наиболее прост но менее эффективен.
for i := 1 to n-1 do
for j := i+1 to n do
begin
x:= a[i,j];
a[i,j] := a[j,i];
a[j,i]:=x;
end.
4. Обслуживание ввода/ вывода. Каналы ввода/вывода. Типы каналов. Диспетчер заданий.
Обслуживание ввода-вывода.
Это группа процессов, которые инициируются программами или самой ОС, и которые связаны с передачей информации между оперативной памятью и дисками, оперативной памятью и магнитными лентами, между магнитными лентами и магнитными дисками.
Обмен информацией осуществляется побайтно или блоками с помощью специально-выделенных каналов.
Системы ввода-вывода включают как правило группу буферов ввода-вывода, каналов ввода-вывода (рис).
Канал это специализированная на вводе-выводе машина. Канал работает на специальной канальной программе.
Каналы делятся на три типа:
А) мультиплексные (навешано много устройств ввода-вывода, действующих медленно: поэтому канальная программа должна переключаться от одного канала к другому (принтеры));
Б) селекторные (одно устройство быстрое, с большим объёмом (винчестер));
В) DMA (Direct Memory Access прямой доступ к памяти) канал, выполняющий канальную программу без вмешательства центрального процессора. По окончанию программы канал генерирует прерывания по вводу-выводу, которые могут работать параллельно.
Диспетчер заданий.
В любой ОС существуют очереди:
- активных процессов;
- очередь процессов в состоянии готовности;
- очередь блокированных процессов.
Любой процесс характеризуется блоком состояния процесса (PSВ). Это структура, состоящая из полей:
- Имя процесса
- Дескриптор процесса
- Информация о системных ресурсах (начальный адрес кодового сегмента, его длина и др.)
- Номер в очереди
- Номер дескриптора процесса
- Состояние процессора
Управляет процессами (нитями) диспетчер процессов.
Алгоритм работы диспетчера:
PROCEDURE DISPACH:
<обновить PSW активного процесса, если он есть>;
<выбрать следующий готовый процесс для передачи ему управления>.
Выбор процесса осуществляется в соответствии с некоторой стратегией LIFO, FIFO.
if <готовый процесс найден>
then
begin
<пометить выбранный процесс как активный>;
<выделить квант времени, установив привилегированной командой таймер>;
<передать управление выбранному процессу>
end
else
<перевести центральный процессор привилегированной командой в состояние простоя>;
Как выбирается процесс для активизации:
1. круговая стратегия (в мультипрограммных системах) в этом случае все процессы считаются равноценными, и диспетчер циклически просматривает PSW всех процессов и выделяет им по очереди квант времени.
2. Выбор процессов по приоритету приоритеты могут назначаться пользователем, либо их устанавливает ОС в целях повышения производительности всей системы. Приоритеты делятся на классы, внутри класса может быть градация, и они могут быть статическими, либо динамическими в зависимости от загрузки системы. Любой процесс обменивается с диспетчером процессов запросами о наступлении некоторого события. Для этого используют специальные внутри системные запросы.
5. Изометрическая проекция и триметрическая проекция.
В практике технического проектирования наиболее распространены аксонометрические проекции, среди которых изометрическая и триметрическая.
Изометрическая проекция (изометрия) это проекция, для которой предполагается одинаковое масштабирование по всем трем осям. Следствием этого является равенство всех углов между проекциями координатных осей.
Триметрическая проекция (триметрия) не накладывает никаких ограничений на масштабирование осей, следствием чего является произвольное расположение проекций координатных осей на плоскости проецирования.
Геометрические построения в изометрической проекции.
При построении изометрии масштаб по всем трём осям должен быть одинаковым, поэтому соотношение длин единичных векторов будет выглядеть следующим образом:
Аналогично, с использованием теоремы Пифагора, составим систему уравнений:
Решая эту систему относительно α и β получим углы поворота β =35.264°; α = 45°.
После подстановки значений тригонометрических функций вычисленных углов в уравнение получим матрицу преобразований для построения изометрии:
По аналогии с диметрией рассчитываются углы, которые составляют проекции осей координат с горизонталью плоскости проекции.
Триметрическая проекция не ограничена каким-либо соотношением по координатным осям, поэтому для её построения в любом случае нужно производить самостоятельные расчёты углов поворота и матриц преобразований Т, аналогично тому, как это было сделано для диметрии и изометрии.
6. Генерация кода в языковых процессорах САПР.
Чтобы рассмотреть, как формируются машинные коды, воспользуемся учебной вычислительной машиной, которая имеет один сумматор и неограниченную память.
Такая машина имеет следующую систему команд:
Команда Код Комментарий
Чтение LOAD m SUM C(m)
Запись STORE m m C(sum)
Сложение ADD m SUM C(sum) + C(m)
Вычитание SUB m SUM C(sum) - C(m)
Умножение MULT m SUM C(sum) * C(m)
Деление DIV m SUM C(sum) / C(m)
m ячейка памяти
C(m) содержимое ячейки
SUM сумматор
С(sum) содержимое сумматора
При выполнении команд будем считать, что информация копируется из источника в приемник.
Для упрощения будем формировать машинный код в символьном виде. Используемые данные будем обозначать именами переменных а не ссылками на некоторые ячейки памяти. Известно что генерация кода выполняется для программы, представленной в некоторой внутренней форме, которая получается на фазе семантического анализа. Наиболее удобная форма для генерации кода список тетрад: тетрады располагаются в этом списке в таком порядке, в котором должны выполняться соответствующие операции. Поэтому простейший метод генерации кода состоит в следующем:
Список тетрад просматривается от начала до конца и последовательно каждая тетрада заменяется некоторой стандартной последовательностью машинных команд.
Такая послед-ть обеспечивает выполнение действий, заданных тетрадой определенного типа.
Например, для некоторых тетрад стандартный код может иметь вид:
Тетрада Код Комментарий
(+,OP1,OP2,REZ) LOAD OP1 SUM C(OP1)
ADD OP2 SUM C(sum)+C(OP2)
STORE REZ REZ C(sum)
(*,OP1,OP2,REZ) LOAD OP1 SUM C(OP1)
MULT OP2 SUM C(sum)*C(OP2)
STORE REZ REZ C(sum)
(=,OP1, ,REZ) LOAD OP1 SUM C(OP1)
STORE REZ REZ C(sum)
Покажем на примере как выполняется генерация кода таким способом.
a:=(b+d+a)*(d+b+c)
Список тетрад:
(+,b,d,T1)
(+,T1,a,T2)
(+,d,b,T3)
(+,T3,c,T4)
(*,T2,T4,T5)
(=,T5, ,a)
После выполнения МНО:
(+,b,d,T1)
(+,T1,a,T2)
(+,T1,c,T4)
(*,T2,T4,T5)
(=,T5, ,a)
Генерация кода:
LOAD b ADD d STORE T1
1 LOAD a 1 ADD T1 STORE T2 LOAD c ADD T1 STORE T4 2 LOAD T2 2 MULT T4 3 STORE T5 3 LOAD T5 STORE a |
LOAD b ADD d 3 STORE T1 3 LOAD T1 ADD a STORE T2 LOAD c ADD T1 3 STORE T4 3 LOAD T4 MULT T2 STORE a |
LOAD b ADD d STORE T1 ADD a STORE T2 LOAD c ADD T1 MULT T2 STORE a |
Нетрудно заметить, что полученный код является избыточным, так как содержит лишние команды записи и чтения. Уменьшить избыточность кода и повысить его эффективность позволяет следующий этап трансляции машинно-зависимая оптимизация кода.