Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Математическая логика и теория алгоритмов. Анализ алгоритмов

.pdf
Скачиваний:
3
Добавлен:
12.11.2023
Размер:
8.87 Mб
Скачать

Выполняется третий перенос: xz , zy .

Возвращаемся к 3:

 

 

x

 

 

 

 

z

 

 

 

y

 

 

 

 

 

3,

 

 

,

 

 

 

,

 

 

 

 

;

 

x

 

z

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x ,

y ,

z ;

 

 

2,

 

 

 

 

x

 

 

 

 

y

 

 

 

z

 

 

 

(2.47)

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

x

,

 

z

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

z

 

 

 

 

 

 

 

y

 

 

 

 

z

 

 

 

x

 

 

 

 

2,

,

 

,

;

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

z

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполняется четвёртый перенос xx , zz . Большой диск пе-

ренесён! Больше, чем полдела, – сделано!

Теперь «перелом» 2, yy , zz , xx :

 

 

 

x

 

 

 

 

z

 

 

 

y

 

 

 

x

 

 

z

 

 

 

 

 

y

 

 

 

 

2,

 

 

 

 

,

 

 

 

 

 

,

 

 

 

 

;

1,

 

 

,

 

 

 

,

 

 

 

 

;

 

y

z

 

x

y

x

 

 

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

y

 

 

 

z

 

 

 

 

x

 

 

 

y

 

 

 

 

 

z

 

 

 

1,

 

 

 

 

,

 

 

 

 

 

 

,

 

 

 

;

 

0,

 

 

 

,

 

 

 

 

,

 

 

;

 

 

 

y

 

 

x

 

z

y

 

 

z

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2.48)

 

 

 

 

x

 

 

 

 

z

 

 

 

 

 

 

 

 

 

x

 

 

 

z

 

 

 

 

 

 

.

 

 

 

 

,

 

;

 

 

 

 

 

 

 

,

 

 

;

 

 

 

 

 

 

 

 

y

 

z

 

 

 

 

 

 

 

y

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

z

 

 

 

 

x

 

 

 

 

 

y

 

 

 

z

 

 

 

 

 

x

 

 

 

 

1,

 

,

 

 

,

 

;

 

 

0,

 

,

 

 

,

 

 

;

 

 

 

 

x

 

 

z

 

y

 

 

z

 

 

x

 

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получаем пятый перенос: xy , xz .

51

Возвращаемся:

 

 

 

x

 

 

 

 

z

 

 

 

 

y

 

 

2,

 

 

 

 

,

 

 

 

 

 

,

 

 

 

 

 

;

y

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

x

 

 

 

 

y

 

 

 

 

z

 

 

1,

 

 

 

 

,

 

 

 

 

 

 

,

 

 

 

 

;

 

 

 

 

y

 

 

 

 

x

 

 

 

 

z

 

 

 

 

 

 

x

 

 

 

 

z

 

 

 

 

 

 

.

 

 

 

 

,

 

;

 

 

 

 

 

 

 

 

y

 

z

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

 

 

 

 

 

z

 

 

 

 

 

x

 

 

 

 

1,

 

,

 

 

,

 

 

;

 

 

 

x

 

 

z

 

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Получаем шестой перенос: xy , zz .

И, наконец, последний «перелом» 1, xy , zz , xy :

 

x

 

z

 

 

y

 

 

 

1,

 

,

 

 

,

 

 

 

 

;

x

z

 

y

 

 

 

 

 

 

 

 

x

 

y

 

 

z

 

 

 

0,

 

,

 

 

,

 

 

;

 

x

y

z

 

 

 

 

 

 

 

 

 

x

z

 

 

 

.

 

 

 

 

 

x z

0, y , z , x ;

y z x, ;

(2.49)

(2.50)

Получаем седьмой и последний перенос xx , zz . Дерево ре-

шения для n = 3 изображено на рис. 2.24.

52

Рис. 2.24. Дерево решения для n =3

В заключение приведём интерактивную Ханойскую башню из музея университета Мехико (рис. 2.25).

Интересной также представляется цветовая «визуализация» перестановок трёх переменных, используемых в рекурсивном алгоритме (рис. 2.26).

Рис.2.25.Ханойская башня

Рис.2.26.Цветовое

вмузееуниверситетаМехико

представлениевозможных

 

перестановок трёх

 

переменных

 

53

2.3.ОЦЕНКА СЛОЖНОСТИ РЕКУРСИВНОГО АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ О ХАНОЙСКОЙ БАШНЕ

Таким образом, обозначая сложность переноса одного диска ONEDISC (x, z) как h, получаем [2]:

T (n) 2 T (n 1) 2 h 1,

(2.51)

T (0) 1 0.

 

Здесь +2 – это два раза операция вычитания (n–1), а +1 – это операция сравнения (if n > 0). Итак,

T (n) 2 T (n 1) h 3,

(2.52)

T (n) 1.

 

Ясно, что каждый раз происходит удвоение сложности задачи:

T (n) v 2n w,x

1;x 6,

(2.53)

 

0

1

 

где v, w – коэффициенты, подлежащие определению. Тогда

v 2n w 2(v 2n 1 w) h 3;v w 1.

Решаем:

w 1 v,

v 2n 1 v 2(v 2n 1 1 v) h 3, v 2n 1 v v 2n 2 2 v h 3, 1 v 2 2 v h 3,

v h 4,

w 1 h 4 (h 3).

Таким образом:

T (n) (h 4) 2n (h 3).

Это экспоненциальная функция сложности.

(2.54)

(2.55)

(2.56)

54

3. ПОНЯТИЕ ОБ ОЦЕНКЕ СЛОЖНОСТИ ПРОГРАММ ВСТРОЕННЫХ СИСТЕМ

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

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

Потом догадались использовать буквенные аббревиатуры, например, MOV – от слова двигать (move), для обозначения команды пересылки информации, ADD – для обозначения сложения (addition) и пр. С использованием так называемого мнемокода (автокода) было труднее допустить ошибку в коде операции.

В начале эры ЭВМ, когда создавались отечественные ЭВМ, например, БЭСМ (большая, или быстродействующая электронносчётная машина) Институтом точной механики и вычислительной техники АН СССР (ИТМ и ВТ), М1 («Автоматическая цифровая вычислительная машина», малая ЭВМ) использовались и наши русские аббревиатуры… Называлось – Автокод.

Например:

011 И Логическое И СМ и слова по Аисп

012 НТЖ Исключающее ИЛИ (нетождественность)

СМ-сумматор, Аисп – исполнительный адрес. Пример «цифровой программы» для ЭВМ М-1 изображён на рис. 3.1.

55

Рис. 3.1. Первая программа для ЭВМ М-1, 1951 год

На М1, кстати, решались и задачи ядерных исследований в институте И.В. Курчатова.

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

Ассе́мблер (от англ. assembler – сборщик) – транслятор исходного текста программы, написанной на

языке Ассемблер как языке низкого уровня, в программу на машинном языке. Ассемблеры, как правило, создаются «под» конкретную архитектуру, операционную систему, но есть и примеры ограниченно-универсальных ассемблеров. Рассмотрим один из классических «интеловских» ассемблеров.

3.1.ПРИМЕРЫ КОМАНД ЯЗЫКА АССЕМБЛЕР:АSM51

Поскольку современные процессоры имеют сложную архитектуру, несколько так называемых ядер, несколько ступеней конвейера, кэши и пр., поэтому обратимся к более простым инструкциям классического микроконтроллера фирмы «Интел 8051» (МКС 51) [11], которые, как и сами принципы архитектуры 8051, до сих пор используются в различных микроконтроллерах общего и специального назначения и позволяют получить общее представление об ассемблере.

Система команд этого микроконтроллера включает следующие группы команд (инструкций):

передачи данных;

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

56

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

передачи управления;

операций с битами.

Вдокументации («мануале») можно найти информацию

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

Большинство команд из 111 (94) содержат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте, например, 12 МГц длительность машинного цикла (12 тактов) составляет 1 мкс.

Пример команд (инструкций) из группы команд передачи данных приведен в табл. 3.1.

Таблица 3.1

Пример команд из группы команд передачи данных

 

Название

Мнемокод

КОП

Байт

Циклов

Операция

1.

Пересылкавакку-

MOVA,Rn

11.101.rrr

1

1

(A)←(Rn)

муляторизрегистра

 

 

 

 

 

n =0…7

 

 

 

 

 

2. Пересылка в акку-

MOVA,ad

11.100.101

2

1

(A)←(ad)

мулятор прямо-

 

xx.xxx.xxx

 

 

 

адресуемого байта

 

 

 

 

 

3. Пересылка в акку-

MOVA,@Ri

11.100.11i

1

1

(A)←((Ri))

мулятор байта из

 

 

 

 

 

РПД i = 0,1

 

 

 

 

 

4.

Загрузкаваккуму-

MOVA,#d

01.110.100

2

1

(A)←#d

ляторконстанты

 

xx.xxx.xxx

 

 

 

5.

Загрузкавстек

PUSHad

11.000.000

2

2

(SP)←(SP)+1

 

 

 

xx.xxx.xxx

 

 

((SP))←(ad)

6.

Извлечениеизстека

PОРad

11.010.000

2

2

(ad)←(SP)

 

 

 

xx.xxx.xxx

 

 

(SP)←(SP)–1

Таким образом, например, загрузка в регистр-аккумулятор (обозначается А) константы, например, 1 (десятичный код) бу-

57

дет символически записана как MOV A, #1. # – обозначение так называемого непосредственного, то есть идущего за байтом команды, операнда-константы.

В двоичном коде получим два байта, перечислим их через запятую 01.110.100, 00.000.001. В восьмеричном коде получим: 164Q, 001Q, где Q – символ восьмеричного кода (символ О, от «octal» или о, ну очень неудобен, так как жутко похож на ноль). В шестнадцатеричном: 74Н, 01Н, где Н – символ шестнадцатеричного кода. Интересна команда записи информации в стек – PUSH, извлечения из стека – POP. Пример команд из группы команд арифметических операций приведен в табл. 3.2.

Таблица 3.2

Пример команд из группы команд арифметических операций

Название

Мнемокод

КОП

Байт

Циклов

Операция

1. Сложение аккуму-

ADDA,Rn

00.101.rrr

1

1

(A)←(A)+(Rn)

лятора с регистром n

 

 

 

 

 

= 0…7

 

 

 

 

 

2.Сложениеаккуму-

ADDA,ad

00.100.101

2

1

(A)←(A)+(ad)

лятораспрямоадре-

 

xx.xxx.xxx

 

 

 

суемымбайтом

 

 

 

 

 

3.Сложение аккуму-

ADDA,@Ri

00.100.11i

1

1

(A)←(A)+((Ri))

лятора с байтом из

 

 

 

 

 

РПД i = 0,1

 

 

 

 

 

4. Сложение аккуму-

ADDA,#d

00.100.100

2

1

(A)←(A)+#d

лятора с константой

 

xx.xxx.xxx

 

 

 

В команде сложения ADD A, Rn (00.101.rrr) код зависит от номера регистра rrr. Поскольку аккумулятор имеет номер 7, то можно получить команду сложения аккумулятора с аккумулятором: ADD A, А (00.101.111). Но для этого в аккумулятор надо что-то загрузить, например MOV A, #1. Вычитание обозначается SUBB, инкремент – INC, декремент – DEC, есть умножение – MUL, деление DIV, они длятся аж 4 машинных цикла. Пример команд из группы команд логических операций приведен в табл. 3.3.

58

Таблица 3.3

Пример команд из группы команд логических операций

Название

Мнемокод

КОП

Байт

Циклов

Операция

1. Логическое И

ANLA,Rn

01.011.rrr

1

1

(A)←(A)&(Rn)

аккумулятора и

 

 

 

 

 

регистра n = 0…7

 

 

 

 

(A)←(A)&(ad)

2. Логическое И ак-

ANLA,ad

01.010.101

2

1

кумулятора и прямо-

 

xx.xxx.xxx

 

 

 

адресуемого байта

 

 

 

 

(A)←(A)&((Ri))

3.ЛогическоеИ

ANLA,@Ri

01.010.11i

1

1

аккумулятораибай-

 

 

 

 

 

таизРПДi =0,1

 

 

 

 

(A)←(A)d

4. Логическое И

ANLA,#d

01.010.100

2

1

аккумулятора

 

xx.xxx.xxx

 

 

 

и константы

 

 

 

 

(ad)←(ad)&(А)

5. Логическое И

ANLad, A

01.010.010

2

1

прямоадресуемого

 

xx.xxx.xxx

 

 

 

байта и аккумуля-

 

 

 

 

 

тора

 

 

 

 

(ad)←(ad)d

6. Логическое И

ANLad,#d

01.010.011

3

2

прямоадресуемого

 

xx.xxx.xxx

 

 

 

байта и константы

 

xx.xxx.xxx

 

 

 

Логическое ИЛИ обозначается ОRL, исключающее ИЛИ – ХRL, сброс аккумулятора – СLR, сдвиг влево – RL, с учетом переноса (через перенос) – RLС, вправо – RR, RRС, есть даже обмен тетрад аккумулятора SWAP.

Пример команд из группы команд операций с битами приведен в табл. 3.4.

Таблица 3.4

Пример команд из группы команд операций с битами

Название

Мнемокод

КОП

Байт

Циклов

Операция

1. Сброс переноса

СLRС

11.000.011

1

1

(С)←0

2. Сброс бита

СLRbit

11.000.010

2

1

(b)←0

 

 

xx.xxx.xxx

 

 

(С)←1

3.Установкапереноса

SETBС

11.010.011

1

1

59

Окончание табл. 3.4

Название

Мнемокод

КОП

Байт

Циклов

Операция

4. Установка бита

SETBbit

11.010.010

2

1

(b)←1

 

 

xx.xxx.xxx

 

 

(С)←not(С)

5.Инверсияпереноса

СРLС

10.110.010

1

1

6. Инверсия бита

СРL bit

10.110.010

2

1

(b)←not(b)

7.ЛогическоеИбитаи

ANLС,bit

10.000.010

2

2

(С)←(С)&(b)

переноса

 

xx.xxx.xxx

 

 

(С)←(С)&

8.ЛогическоеИинвер-

ANLС,/bit

10.110.000

2

2

сиибитаипереноса

 

xx.xxx.xxx

 

 

NOT(b)

9.ЛогическоеИЛИбита

ORLС,bit

01.110.000

2

2

(С)←(С)v(b)

ипереноса

 

xx.xxx.xxx

 

 

(С)←(С)v

10. Логическое ИЛИ

ORLС,/bit

10.100.000

2

2

инверсии бита и пере-

 

xx.xxx.xxx

 

 

NOT(b)

носа

 

 

 

 

 

Группа команд передачи управления приведена в табл. 3.5.

Таблица 3.5

Группа команд передачи управления

Название

Мнемокод

КОП

Байт

Циклов

Операция

1. Длинный

LJMPad16

00.000.010

3

2

(РС)←(ad16)

переход в полном

 

xx.xxx.xxx

 

 

 

объеме памяти

 

xx.xxx.xxx

 

 

 

программ

 

 

 

 

 

2. Абсолютный пе-

АJMPad11

а10а9.а800.001

2

2

(РС)←(РС)+2

реход внутри стра-

 

а7а6.а5а4а3.а2а1а0

 

 

(РС0–10)←ad11

ницы в 2 Кбайта

 

 

 

 

 

3.Короткийотно-

SJMPrel

10.000.000

2

2

(РС)←(РС)+2

сительныйпереход

 

xx.xxx.xxx

 

 

(РС)←(РС)+rel

внутристраницы

 

 

 

 

 

в256байт

 

 

 

 

 

4.Косвенныйотно-

JMP@A+

01.110.011

1

2

(РС)←(А)+

сительныйпереход

DPTR

 

 

 

+DPTR

5.Переход,если

JZrel

01.100.000

2

2

ЕслиА=0,то

аккумуляторравен

 

xx.xxx.xxx

 

 

(РС)←(РС)+rel

нулю

 

 

 

 

иначе(РС)←

 

 

 

 

 

(РС)+2

60