Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздаточный материалМПС_микроЭВМ_ред.3 ФАВТ.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
8.96 Mб
Скачать

Логическая структура управляющей микропроцессорной системы

ОУ – объект управления,

Д – измерительные датчики,

ИМ – исполнительные механизмы,

ИК – информационные контроллеры,

БСД – блоки сопряжения с датчиками,

БСИК – блоки сопряжения ИМ с информационными контроллерами,

ОП – модули основной памяти (ППЗУ и ОЗУ),

ДП – модули дополнительной памяти (например, накопители ЖМД, электронные диски, Smart-карты и т.п.).

Уровни абстрактного представления МПС

Уровень описания

Объект

Структурный базис

Язык описания

Электрические схемы

Логические и запоми­нающие элементы

Электронные и радиокомпоненты — транзисторы, резисторы, конденсаторы, индуктивности и др.

Основные соотношения теории электрических цепей. Языки описания электрических цепей

Логические схемы

Операционные элементы (счетчики, сумматоры, дешифраторы, регистры и т. д.), конечные цифровые автоматы с жесткой и программируемой логикой

Логические, буферные и запоминающие элементы

Булева алгебра, теория конечных цифровых автоматов, языки проектирования аппаратуры (HDL)

Операционные схемы

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

Операционные элементы, конечные цифровые автоматы с жесткой и программируемой логикой

Языки описания микроопераций, языки проектирования аппаратуры (HDL)

Структурные схемы

Подсистема обработки, подсистема прерывания, подсистема ввода-вывода, сама микроЭВМ и/или микропроцессорная система

Операционные устройства

Машинно-ориентированные языки: языки машинных команд, микропрограмм

Программный уровень

Операционная система, вычислительный процесс, супервизор управления

Команды и операторы

Алгоритмические языки высокого уровня, языки спецификаций

Современный взгляд на организацию МПС

с оперативно корректируемым поведением

Диаграмма Гайского-Кана: области и уровни моделей в проектировании МПС на основе СБИС

Уровни проектирования МПС на СБИС

Блок-схема микроЭВМ с классической архитектурой и архитектурные принципы фон-Неймана

  • Информация кодируется в двоичной форме и разделяется на единицы - слова.

  • Разнотипные по смыслу слова различаются по способу использования, но не по способу кодирования.

  • Слова информации размещаются в ячейках памяти и идентифицируются номерами ячеек — адресами слов.

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

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

Определение циклов шины

#NPS1

NPS2

CMD0

CMD1

#NPRD

#NPWR

Тип цикла шины

х

0

х

х

х

х

МСП не выбран

1

х

х

х

х

х

МСП не выбран

0

1

0

0

1

0

Запись кода операции в МСП

0

1

0

0

0

1

Чтение CW или SW из МСП

0

1

1

0

0

1

Чтение данных из МСП

0

1

1

0

1

0

Запись данных в МСП

0

1

0

1

1

0

Загрузка указателей исключений

0

1

0

1

0

1

Зарезервировано

0

1

1

1

0

1

Код операции чтение статуса при выполнении ряда команд, таких как FSAVE, FSTENV и т.д.

0

1

1

1

1

0

Зарезервировано

Дешифрирование адресов ввода/вывода МСП

Адреса ввода/вывода

Команды ввода и выбора МСП

NPS2

#NPS1

CMD1

CMD0

00F8

1

0

0

0

00FA

1

0

0

1

00FC

1

0

1

0

00FE

1

0

1

1

Код операции (Запись)/ CW или SW (Считывание)

Регистры данных

Регистры указателей исключений (EP) (Только запись)

Операция чтения статуса по командам FSAVE, FSTENV и т.д.

Регистровый стек МСП

Формат целых двоичных чисел: А) ЦС, Б) КЦ, В) ДЦ

А)

b15

b14 b0

ЦС

знак

значащие разряды

Б)

b31

b30 b0

КЦ

знак

значащие разряды

В)

b63

b62 b0

ДЦ

знак

значащие разряды

Формат упакованного десятичного целого числа (УПК)

79

78 73

72

- 69 0

BCD

знак

Игнорир.

D17

D16

D15

D0

Формат вещественных чисел с ПЗ: А) КВ, Б) ДВ, В) ВВ

А)

31

30 23

22 0

КВ

знак

порядок

мантисса

Б)

63

62 52

51 0

ДВ

знак

порядок

мантисса

В)

79

78 64

63

62 0

ВВ

знак

порядок

1

мантисса

ПРИМЕЧАНИЕ: заштрихован скрытый бит, которого в формате

на самом деле нет.

79

64

63

0

R0

Знак

Порядок

Мантисса

R1

R2

R3

R4

R5

R6

R7

15

0

CW

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

SW

Регистр состояния

TW

Слово тэгов

31

0

IP

Указатель команды

DP

Указатель данных

Значение двухбитного тэга в слове тэгов

Тэг

Содержимое

0

Режимы округления МСП

0

Допустимое ненулевое число

01

Нуль

10

Специальное значение (нечисло и др.)

11

Пустой (empty) регистр

Регистр слова управления СW

15 13

12

11 10

9 8

7 6

5

4

3

2

1

0

CW

***

IC

RC

PC

**

PM

UM

OM

ZM

DM

IM

PC (Precision Control) определяет точность вычислений в 24 бита (РС = 00), 53 бита (РС = 10) или 64 бита (РС = 11).

RC = 00 – округление к ближайшему; RC = 01 – округление вниз (к минус бесконечности);

RC = 10 – округление вверх (к плюс бесконечности); RC = 11 – усечение к нулю.

Регистр слова состояния SW

15

14

13 11

10

9

8

7

6

5

4

3

2

1

0

SW

B

C3

TOP

C2

C1

C0

ES

SF

PE

UE

OE

ZE

DE

IE

А) Структура данных fstenv в 16- и 32-разрядном защищенном режиме

б) Структура данных FSTENV в 16- и 32-разрядном реальном режиме

Примерная схема взаимодействия cpu и npu, при решении на них произвольной смеси команд

Найти корни x1 и х2 квадратного уравнения ax2+bx+c = 0: x1,2 = .

причем должно выполняться неравенство b2—4ас >= 0.

{$N+}

program CalcRoot;

uses

Crt,Dos;

type

TypeFMassiv = array [0..2] of Single;

TypeIMassiv = array [0..2] of integer;

var

CoeffA,CoeffB,CoeffC : TypeFMassiv;

ArrayRoot1,ArrayRoot2 : TypeFMassiv;

ArrayPriznak : TypeIMassiv;

ArrayPasRoot1,ArrayPasRoot2, Delta1, Delta2 : TypeFMassiv;

ArrayPasPriznak : TypeIMassiv;

i,j : word;

Procedure PASFPP(A,B,C:single; var Root1, Root2: single; var Lrezult:integer);

var

x1, x2, xx : single;

rezult : integer;

begin

x2 := 0.0;

xx := b*b - 4 * a * c;

if (xx >=0) then begin

x1:= (- b + sqrt(xx)) /(2*a);

x2:= (- b - exp(0.5*ln(xx))) /(2*a);

rezult := 0;

end

else begin

x1:=0.0;

rezult := -1;

end;

root1:=x1;

root2:=x2;

lrezult:= rezult;

end;

Procedure FPP(A,B,C:single; var Root1, Root2: single; var Lrezult:integer);

var

x1, x2 : single;

status, rezult : word;

begin

rezult:=0;

x1 := 0.0;

x2 := 0.0;

Изменение содержимого стека МСП во времени

St(0)

a

b

c

ac

1

1

2

ac

4ac

4ac

b

B2

B2-4ac

St(1)

a

b

b

ac

1

ac

2

2

b

4ac

4ac

b

St(2)

a

a

B

ac

b

b

b

a

b

b

a

St(3)

A

b

a

a

a

a

a

St(4)

a

команды

Fld A

Fld B

Fld C

Fmul st,st(2)

Fld1

Fld1

Fadd

Fxch

Fscale

Fstp st(1)

Fld st(1)

Fmul st,st(2)

Fsubrp

asm

finit

fld A

fld B

fld C

fmul st,st(2

fld1

fld1

faddp

fxch

fscale

fstp st(1)

fld st(1)

fmul st,st(0)

fsubrp

ftst

fstsw status

fwait

mov ah, byte ptr [status+1]

sahf

jnc @no_error

mov rezult, -1

jmp @error

@no_error:

St(0)

a

2a

-b

-b+

x1

2a

-b

-b-

x2

St(1)

b

2a

2a

2a

2a

2a

b

St(2)

a

b

b

b

b

a

St(3)

a

a

B

b

b

a

b

b

a

St(4)

A

a

a

a

a

команды

Fsqrt

Fld st(2)

Fadd st,st(3)

Fld st(2)

Fchs

Fadd st,st(2)

Fdiv st,st(1)

Fstp X1

Fld st(2)

Fchs

Fsub st,st(2)

Fdivr

Fstp X2


fsqrt

fld st(2)

fadd st,st(3)

fld st(2)

fchs

fadd st,st(2)

fdiv st,st(1)

fstp x1

fld st(2)

fchs

fsub st,st(2)

fdiv st,st(1)

fstp x2

wait

mov rezult, 0

@error:

finit

end;

Root1 := x1;

Root2 := x2;

Lrezult:= rezult;

end;

procedure InitMassiv;

var i: word;

begin

CoeffA[0]:= 300.0;

CoeffB[0]:= -10.0;

CoeffC[0]:= 5.0;

CoeffA[1]:= 40.0;

CoeffB[1]:= -70.0;

CoeffC[1]:= -34.0;

CoeffA[2]:= -56.89;

CoeffB[2]:= -356.456;

CoeffC[2]:= 123.789;

for i := 0 to 2 do

begin

Delta1[i] := 0.0;

Delta2[i] := 0.0;

ArrayRoot1[i]:=0.0;

ArrayRoot2[i]:=0.0;

ArrayPriznak[i]:=0;

ArrayPasRoot1[i]:=0.0;

ArrayPasRoot2[i]:=0.0;

ArrayPasPriznak[i]:=0;

end;

end;

var f:text;

begin

InitMassiv;

ClrScr;

for i := 0 to 2 do FPP(CoeffA[i],CoeffB[i],CoeffC[i],ArrayRoot1[i],ArrayRoot2[i],ArrayPriznak[i]);

for i := 0 to 2 do PASFPP(CoeffA[i],CoeffB[i],CoeffC[i],ArrayPasRoot1[i],ArrayPasRoot2[i],ArrayPasPriznak[i]);

for i := 0 to 2 do begin

Delta1[i]:=abs(ArrayPasRoot1[i] - ArrayRoot1[i]);

Delta2[i]:=abs(ArrayPasRoot2[i] - ArrayRoot2[i]);

end;

assign(F,'d:\student\fpu\exampl.txt');

Rewrite(F);

writeln(F);

writeln;

for i := 0 to 57 do begin

write(f,'░');

write('░');

end;

writeln;

writeln(F);

for i := 0 to 2 do begin

writeln('░ i:=',i:3,' │ A =',CoeffA[i]:10:4,' │ B =', CoeffB[i]:10:4, ' │ C =',CoeffC[i]:10:4,' ░');

writeln('░ │ Pr=',ArrayPriznak[i]:10,' │ X1=', ArrayRoot1[i]:10:4, ' │ X2=',ArrayRoot2[i]:10:4,' ░');

writeln('░ Pascal │ Pr=',ArrayPasPriznak[i]:10,' │ X1=', ArrayPasRoot1[i]:10:4,' │ X2=',ArrayPasRoot2[i]:10:4,' ░');

writeln('░ │ │DT1=',Delta1[i]:10:4,' │DT2=',Delta2[i]:10:4,' ░');

writeln(f,'░ i:=',i:3,' │ A =',CoeffA[i]:10:4,' │ B =', CoeffB[i]:10:4, ' │ C =',CoeffC[i]:10:4,' ░');

writeln(f,'░ │ Pr=',ArrayPriznak[i]:10,' │ X1=', ArrayRoot1[i]:10:4, ' │ X2=',ArrayRoot2[i]:10:4,' ░');

writeln(f,'░ Pascal │ Pr=',ArrayPasPriznak[i]:10,' │ X1=', ArrayPasRoot1[i]:10:4, ' │ X2=',ArrayPasRoot2[i]:10:4,' ░');

writeln(f,'░ │ │DT1=',Delta1[i]:10:4,' │DT2=',Delta2[i]:10:4,' ░');

if i<>2 then begin

write('░');

write(f,'░');

for j := 0 to 55 do begin write('─');write(f,'─');

end;

writeln('░');

writeln(f,'░');

end;

end;

for i := 0 to 57 do begin write('░');

write(f,'░');

end;

writeln;

writeln(f);

writeln('Thank you. Put <Enter>');

readln;

Close(F);

end.

Команды

ST0

ST1

ST2

ST3

ST4

FINIT

Режим округления – к ближайшему

Формат – Временный вещественный

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

fld [ptrcoef ]

a

fld [ptrcoef + 4]

b

a

fld [ptrcoef + 8]

c

b

a

fmul st,st(2)

ac

b

a

fld1

1

ac

b

a

fld1

1

1

ac

b

a

faddp

2

ac

b

a

fxch

ac

2

b

a

fscale

ac22

2

b

a

fstp st(1)

4ac

b

a

fld st(1)

b

4ac

b

a

fmul st,st(0)

b2

4ac

b

a

fsubrp

b2-4ac

b

a

ftst

Сравнить ST0 с нулем и определить значения признаков результата C3..C0

fstsw word ptr [di]

Выгрузить слово состояния sw в ячейку оперативной памяти

fwait

Ожидать окончания выгрузки

mov ah, [di+1]

Загрузить ah содержимым старшего байта sw

sahf

Загрузить мл.байт регистра флагов из ст.байта ax

jnc no_error

Продолжить, если нет ошибок

Продолжение при отсутствии ошибок

Команды

ST0

ST1

ST2

ST3

ST4

fsqrt

( b2-4ac)

b

a

fld st(2)

a

( b2-4ac)

b

a

fadd st,st(3)

2a

( b2-4ac)

b

a

fld st(2)

b

2a

( b2-4ac)

b

a

fchs

-b

2a

( b2-4ac)

b

a

fadd st,st(2)

-b +

2a

( b2-4ac)

b

a

fdiv st,st(1)

(-b+ )/ 2a

2a

( b2-4ac)

b

a

fstp [root]

2a

( b2-4ac)

b

a

fld st(2)

b

2a

( b2-4ac)

b

a

fchs

-b

2a

( b2-4ac)

b

a

fsub st,st(2)

-b -

2a

( b2-4ac)

b

a

fdiv st,st(1)

(-b - )/ 2a

2a

( b2-4ac)

b

a

fstp dword ptr [root+4]

2a

( b2-4ac)

b

a

Fstp st(0)

( b2-4ac)

b

a

Fstp st(0)

b

a

Fstp st(0)

a

Fstp st(0)

Стек пуст !!!! Важно!

Все команды МСП можно разделить на несколько групп:

  • команды передачи данных;

  • арифметические команды;

  • команды сравнений чисел;

  • трансцендентные команды;

  • команды загрузки констант;

  • управляющие команды.

Форматы машинных команд МСП

7 3

2 1

0

7 6

5

4 3

2 0

7 0

n 0

А)

11011

MF

1

mod

1

коп

r/m

sib

disp

7 3

2 1

0

7 6

5 3

2 0

7 0

n 0

Б)

11011

MF

0

mod

коп

r/m

sib

disp

7 3

2

1

0

7 6

5 3

2 0

В)

11011

R

P

коп

11

коп

ST(i)

7 3

2 0

7 5

4 0

Г)

11011

001

111

коп

7 3

2 0

7 5

4 0

Д)

11011

011

111

коп

Команды с форматами А) и Б) осуществляют обращение к памяти. Поля mod (режим), r/m (регистр/память) и байт sib имеют тот же смысл, что и в командах целочисленного процессора. Напомним, что эти поля задают способ формирования эффективного адреса (Аэф). Эти команды, в зависимости от кодирования поля mod, могут иметь или не иметь байты смещения disp, участвующие в формировании Аэф. Само поле disp может иметь формат 1, 2 или 4 байта (n = 7 или 15, или 31).

Команда с форматом А) передает данные в память или считывает их из памяти. Команда с форматом Б) выполняет арифметические операции и операции сравнения с операндом, взятым из памяти.

Команды с форматом В) выполняют арифметические операции и операции сравнения с операндами, взятыми из регистров МСП. Бит R (Reverse) показывает, куда помещается результат: в ST(0) [R=0] или в ST(i) [R=1]. Бит P (Pop) показывает, происходит ли после операции выталкивание из стека (PopRegisterStack).

Команды с форматом Г) оперируют константами, то есть операнды в этих командах задаются самим кодом операции. Формат Д) зарезервирован для команд управления, которые не обращаются к памяти.

Таблица 4

Система команд передачи данных

КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ

Команда

Описание

Формальное описание

Примечания

FLD m32fp

FLD m64fp

FLD m80fp

FLD ST(i)

загрузить вещественное число в стек

TOP  TOP – 1

ST(0)  m32fp

TOP  TOP – 1

ST(0)  m64fp

TOP  TOP – 1

ST(0)  m80fp

temp  ST(i)

TOP  TOP – 1

ST(0)  temp

ВВ  КВ

ВВ  ДВ

ВВ  ВВ

FST m32fp

FST m64fp

FST ST(i)

FSTP m32fp

FSTP m64fp

FSTP m80fp

FSTP ST(i)

сохранить вещественное число из стека

вытолкнуть вещественное число из стека

m32fp  ST(0)

m64fp  ST(0)

ST(i)  ST(0)

m32fp  ST(0)

TOP  TOP + 1

m64fp  ST(0)

TOP  TOP + 1

m80fp  ST(0)

TOP  TOP + 1

ST(i)  ST(0)

TOP  TOP + 1

КВ  ВВ

ДВ  ВВ

КВ  ВВ

ДВ  ВВ

ВВ  ВВ

FILD m16int

FILD m32int

FILD m64int

загрузить целое число в стек

TOP  TOP – 1

ST(0)  m16int

TOP  TOP – 1

ST(0)  m32int

TOP  TOP – 1

ST(0)  m64int

ВВ  ЦС

ВВ  КЦ

ВВ  ДЦ

FIST m16int

FIST m32int

FISTP m16int

сохранить целое число из стека

вытолкнуть целое число из стека

m16int  ST(0)

m32int  ST(0)

m16int  ST(0)

TOP  TOP + 1

ЦС  ВВ

КЦ  ВВ

ЦС  ВВ

FISTP m32int

FISTP m64int

m32int  ST(0)

TOP  TOP + 1

m64int  ST(0)

TOP  TOP + 1

КЦ  ВВ

ДЦ  ВВ

Продолжение табл. 4

КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ

Команда

Описание

Формальное описание

Примечания

FBLD m80bcd

загрузить десятичное число в стек

TOP  TOP -1

ST(0)  m80bcd

РТ  УПК

FBSTP m80bcd

вытолкнуть десятичное число из стека

m80bcd  ST(0)

TOP  TOP + 1

УПК  РТ

FXCH ST(i)

FXCH

поменять значения регистров между собой

ST(0) <--> ST(i)

ST(0) <--> ST(1)

FCMOVB ST(0), ST(i)

FCMOVE ST(0), ST(i)

FCMOVBE ST(0), ST(i)

FCMOVU ST(0), ST(i)

FCMOVNB ST(0), ST(i)

FCMOVNE ST(0), ST(i)

FCMOVNBE ST(0), ST(i)

FCMOVNU ST(0), ST(i)

передать по условию

если флаг cf = 1 (если «меньше»), то ST(0)  ST(i)

если zf = 1….

если cf или zf =1..

если pf =1….

если cf = 0…

если zf = 0…

если cf и zf = 0…

если pf = 0 ….

флаги cf, zf и pf располагаются в регистре флагов (ef) целочисленного устройства (процессора)

ПРИМЕЧАНИЕ: команды «передать по условию» (FCMOVcc) поддерживаются не всеми МСП.