Компьютер — исполнитель команд. Алгоритмы

Базовая система команд микропроцессора

Базовую систему команд микропроцессора можно условно разделить на несколько групп по функциональному назначению:

Кроме базовой системы команд микропроцессора существуют также команды расширений:

  • X87 – расширение, содержащее команды математического сопроцессора (работа с вещественными числами)
  • MMX – расширение, содержащее команды для кодирования/декодирования потоковых аудио/видео данных;
  • SSE – расширение включает в себя набор инструкций, который производит операции со скалярными и упакованными типами данных;
  • SSE2 – модификация SSE, содержит инструкции для потоковой обработки целочисленных данных, что делает это расширение более предпочтительным для целочисленных вычислений, нежели использование набора инструкций MMX, появившегося гораздо раньше;
  • SSE3, SSE4 – содержат дополнительные инструкции расширения SSE.

В таблице команд приняты следующие обозначения:
r – регистр
m – ячейка памяти
c – константа
8, 16, 32 – размер в битах
На все базовые команды процессора накладываются следующие ограничения:

  • Нельзя в одной команде оперировать двумя областями памяти одновременно. Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.
  • Нельзя оперировать сегментным регистром и значением непосредственно из памяти. Поэтому для выполнения такой операции нужно использовать промежуточный объект. Это может быть регистр общего назначения или стек.
  • Нельзя оперировать двумя сегментными регистрами. Это объясняется тем, что в системе команд нет соответствующего кода операции. Но необходимость в таком действии часто возникает. Выполнить такую пересылку можно, используя в качестве промежуточных регистры общего назначения. Например,
Команды передачи данных

Основной командой передачи данных является команда MOV , осуществляющая операцию присваивания:

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

Команда Операнды Пояснение Описание
MOV r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8,c8
r(m)16,c16
r(m)32,c32
r(m)8=r8
r(m)16=r16
r(m)32=r32
r8=r(m)8
r16=r(m)16
r32=r(m)32
r(m)8=с8
r(m)16=с16
r(m)32=с32
Пересылка операндов
XCHG r(m)8, r8
r8, r(m)8
r(m)16,r16
r16, r(m)16
r(m)32, r32
r32, r(m)32
r(m)8 ↔r8
r8 ↔r(m)8
r(m)16↔r16
r16 ↔r(m)16
r(m)32↔r32
r32 ↔r(m)32
Обмен операндов
BSWAP r32 TEMP ← r32
r32[7..0]←TEMP[31..24]
r32[15..8]←TEMP[23..16]
r32[23..16]←TEMP[15..8]
r32[31..24]←TEMP[7..0]
Перестановка байтов из порядка «младший – стар­ший» в порядок «старший – млад­ший»
MOVSX r16, r(m)8
r32, r(m)8
r32, r(m)16
r16,r(m)8 DW ← DB
r32,r(m)8 DD ← DB
r32,r(m)16 DD ← DW
Пересылка с рас­ши­ре­ни­ем форма­та и дублирова­ни­ем знакового бита
MOVZX r16,r(m)8
r32,r/m8
r32,r/m16
r16,r(m)8 DW ← DB
r32,r(m)8 DD ← DB
r32,r(m)16 DD ← DW
Пересылка с рас­ши­ре­ни­ем форма­та и дублирова­ни­ем нулевого бита
XLATXLATB m8 AL=DS:[(E)BX+unsigned AL] Загрузить в AL байт из таблицы в сегменте данных, на начало которой указывает EBX (ВХ); начальное зна­чение AL игра­ет роль смещения
LEA r16, m
r32, m
r16=offset m
r32=offset m
Загрузка эффективного адреса
LDS r16,m16
r32,m16
DS:r=offset m Загрузить пару регистров из памя­ти
LSS SS:r=offset m
LES ES:r=offset m
LFS FS:r=offset m
LGS GS:r=offset m
Команды установки единичного бита

Проверяют условие состояния битов регистра EFLAGS и, если условие выполняется, то младший бит операнда устанавливается в 1, в противном случае в 0. Анализ битов производится аналогич­но условным перехо­дам.

Команда Операнды Пояснение
SETA
SETNBE
r(m)8 CF=0 и ZF=0
SETAE
SETNB
SETNC
CF=0
SETB
SETC
SETNAE
CF=1
SETBE
SETNA
CF=1 или ZF=1
SETE
SETZ
ZF=1
SETG
SETNLE
ZF=0 и SF=OF
SETGE
SETNL
SF=OF
SETL
SETNGE
SF!=OF
SETLE
SETNG
SF!=OF или ZF=1
SETNE
SETNZ
ZF=0
SETNO OF=0
SETNP
SETPO
PF=0
SETNS SF=0
SETO OF=1
SETP
SETPE
PF=1
SETS SF=1
Команды работы со стеком
Команда Операнды Пояснение Описание
PUSH r(m)32
r(m)16
c32
ESP=ESP-4; SS_ESP=r(m)32/c
SP=SP-2; SS_SP=r(m)16
Поместить операнд в вершину стека
POP r(m)32
r(m)16
r(m)32=SS:ESP; ESP=ESP+4
r(m)16=SS:SP; SP=SP+2;
Извлечь операнд из вершины стека
PUSHA
PUSHAD
r(m)32
r(m)16
Поместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
POPA
POPAD
Извлечь из стека содержимое и заполнить регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
PUSHF Поместить в вершину стека регистр EFLAGS
POPF Извлечь содержимое вершины стека и заполнить регистр EFLAGS
Команды ввода-вывода

Микропроцессор может передавать данные в порты ввода-вывода, которые поддерживаются аппаратно и используют соответствующие своим предназначениям линии ввода-вывода процессора. Аппаратное адресное пространство ввода-вывода процессора не является физическим адресным пространством памяти. Адресное пространство ввода-вывода состоит из 64Кбайт индивидуально адресуемых 8-битных портов ввода-вывода, имеющих адреса 0…FFFFh. Адреса 0F8h…0FFh являются резервными. Любые два последовательных 8-битных порта могут быть объединены в 16-битный порт, 4 последовательных 8-битных порта – в 32-битный порт.

Команда Операнды Пояснение Описание
IN AL,c8
AX,c8
EAX,c8
AL,DX
AX,DX
EAX,DX
AL= port byte
AX= port word
EAX= port dword
AL= [DX-port]
AX= [DX-port]
EAX= [DX-port]
Ввод из порта
OUT c8, AL
c8, AX
c8, EAX
DX, AL
DX, AX
DX, EAX
port byte=AL
port word=AX
port dword=EAX
[DX-port]=AL
[DX-port]=AX
[DX-port]=EAX
Вывод в порт
INSB
INSW
INSD
ES:(E)DI = [DX-port] Вводит данные из порта, адресуемого DX в ячейку памяти ES:[(E)DI]. После ввода 1, 2 или 4-байтного слова данных EDI/DI корректируется на 1,2,4. При наличии префикса REP процесс продолжается, пока EСХ>0
OUTSB
OUTSW
OUTSD
[DX-port]=DS:(E)SI Выводит данные из ячейки памяти, определяемой регистрами DS:[(E)SI], в порт, адрес которого находится в DX. После вывода данных производится коррекция указателя ESI/SI на 1,2 или 4
Команды целочисленной арифметики
Команда Операнды Пояснение Описание
ADD r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8=r(m)8+с8
r(m)16=r(m)16+с16
r(m)32=r(m)32+c32
r(m)8=r(m)8+r8
r(m)16=r(m)16+r16
r(m)32=r(m)32+r32
r8=r8+r(m)8
r16=r16+r(m)16
r32=r32+r(m)32
Сложение целых чисел
ADC Сложение целых чисел с учетом флага переноса CF
INC r(m)8
r(m)16
r(m)32
r/m8=r/m8±1
r(m)16=r(m)16±1
r(m)32=r(m)32±1
Увеличение на 1
DEC Уменьшение на 1
SUB r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8=r(m)8-с8
r(m)16=r(m)16-с16
r(m)32=r(m)32-c32
r(m)8=r(m)8-r8
r(m)16=r(m)16-r16
r(m)32=r(m)32-r32
r8=r8-r(m)8
r16=r16-r(m)16
r32=r32-r(m)32
Вычитание целых чисел
SBB Вычитание с учетом флага переноса CF
CMP r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8-с8
r(m)16-с16
r(m)32-c32
r(m)8-r8
r(m)16-r16
r(m)32-r32
r8-r(m)8
r16-r(m)16
r32-r(m)32
Сравнение целых чисел
По результату сравнения устанавливаются флаги
CF PF
AF ZF
SF OF
NEG r(m)8
r(m)16
r(m)32
r(m)8=-r(m)8
r(m)16=-r(m)16
r(m)32=-r(m)32
Изменение знака числа
MUL r(m)8
r(m)16
r(m)32
AX=AL*r(m)8
DX:AX=AX*r(m)16
EDX:EAX=EAX*r(m)32
Умножение без знака
IMUL r(m)8
r(m)16
r(m)32
r16,r(m)16
r32,r(m)32
r16,r(m)16,c
r32,r(m)32,c
r16,c
r32,c
AX=AL*r(m)8
DX:AX=AX*r(m)16
EDX:EAX=EAX*r(m)32
r16=r16*r(m)16
r32=r32*r(m)32
r16=r(m)16*c16
r32=r(m)32*c32
r16=r16*c16
r32=r32*c32
Умножение со знаком
DIV r(m)8
r(m)16
r(m)32
AL=AX/r(m)8, AH=mod
AX=DX:AX/r(m)16, DX=mod
EAX=EDX:EAX/r(m)32, EDX=mod
Деление без знака
IDIV Деление со знаком

Особого внимания среди рассмотренных команд целочисленной арифметики заслуживает команда CMP , которая вычитает второй операнд из первого и не сохраняет результат, а устанавливает биты OF, SF, ZF, AF, PF, CF регистра признаков EFLAGS в соответствии с результатом. Команда CMP чаще всего предшествует командам знакового или беззнакового условных переходов.

Логические команды

Выполнение логических операций описано здесь

Команда Операнды Пояснение Описание
AND r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8=r(m)8 Ф с8
r(m)16=r(m)16 Ф с16
r(m)32=r(m)32 Ф c32
r(m)8=r(m)8 Ф r8
r(m)16=r(m)16 Ф r16
r(m)32=r(m)32 Ф r32
r8=r8 Ф r(m)8
r16=r16 Ф r(m)16
r32=r32 Ф r(m)32
Логическое умножение (И), конъюнкция
OR Логическое сложение (ИЛИ), дизъюнкция
XOR Исключающее ИЛИ
NOT r(m)8
r(m)16
r(m)32
r(m)8=~r(m)8
r(m)16=~r(m)16
r(m)32=~r(m)32
Логическое отрицание (НЕ), инверсия
TEST r(m)8,с8
r(m)16,с16
r(m)32,с32
r(m)8,r8
r(m)16,r16
r(m)32,r32
r8,r(m)8
r16,r(m)16
r32,r(m)32
r(m)8 & с8
r(m)16 & с16
r(m)32 & с32
r(m)8 & r8
r(m)16 & r16
r(m)32 & r32
r8 & r(m)8
r16 & r(m)16
r32 & r(m)32
Логическое умножение без сохранения результата. В соответствии с результатом устанавливаются флаги
PF ZF SF
Сдвиговые команды

Выполнение сдвиговых операций в языке Си рассмотрено здесь .

Команда Операнды Пояснение Описание
SHR r(m)8
r(m)8,CL
r(m)8,с
r(m)16
r(m)16,CL
r(m)16,c
r(m)32
r(m)32,CL
r(m)32,c
r(m)8 на 1 раздяд
r(m)8 на CL разрядов
r(m)8 на с разрядов
r(m)16 на 1 разряд
r(m)16 на CL разрядов
r(m)16 на c разрядов
r(m)32 на 1 разряд
r(m)32 на CL разрядов
r(m)32 на c разрядов
Логический сдвиг вправо
SAR Арифметический сдвиг вправо (старшие разряды заполняются значением знакового)
SHL
SAL
Логический (арифметический) сдвиг влево
ROR Циклический сдвиг вправо
ROL Циклический сдвиг влево
RСR Циклический сдвиг вправо через перенос
RCL Циклический сдвиг влево через перенос

Команды циклического сдвига

Команды циклического сдвига выполняются в соответствии со схемой

Команды коррекции двично-десятичных чисел

Команды коррекции двоично-десятичных чисел не имеют операндов и используют операнд по умолчанию, хранящийся в регистре AX (паре регистров AH:AL ).

Команды преобразования типов

Команды преобразования типов предназначены для корректного изменения размера операнда, заданного неявно в регистре-аккумуляторе ( EAX , AX , AL ). Непосредственно после аббревиатуры команды операнд не указывается.

Команда Пояснение Описание
CBW AX=(DW)AL 2 байта ← 1 байт
CWDE EAX=(DD)AX 4 байта ← 2 байта
CWD DX:AX=(DD)AX 4 байта ← 2 байта
CDQ EDX:EAX=(DQ)EAX 8 байт ← 4 байта
Команды управления флагами

Команды управления флагами предназначены для сброса или установки соответствующего бита регистра признаков EFLAGS . Команды управления флагами не имеют операндов.

Команда Пояснение Описание
CLC CF = 0 Сброс бита переноса
CLD DF=0 Сброс бита направления
CMC CF=!CF Инверсия бита переноса
STC CF=1 Установка бита переноса
STD DF=1 Установка бита направления
STI IF=1 Установка бита прерывания
Команды прерываний

Команды прерываний предназначены для управления программными прерываниями.
Прерывание – это, как правило, асинхронная остановка работы процессора, вызванная началом работы устройства ввода-вывода. Исключением являются синхронные прерывания, возникающие при определении некоторых предопределенных условий в процессе выполнения команды.
Когда поступает сигнал о прерывании, процессор останавливает выполнение текущей программы и переключается на выполнение обработчика прерывания, заранее записанного для каждого прерывания.
Архитектура IA-32 поддерживает 17 векторов аппаратных прерываний и 224 пользовательских.
Команда INT вызывает обработчик указанного операндом прерывания (константой). Операнд определяет номер вектора системного прерывания BIOS от 0 до 255, представленный в виде беззнакового 8-битного целого числа. При вызове обработчика прерывания в стеке сохраняются регистры EIP, CS и EFLAGS.
Прерывание по переполнению вызывается отдельной командой INTO и имеет вектор 04h.

Команда Пояснение Описание
INT с EIP → стек
CS → стек
EFLAGS → стек
переход к вектору c
Программное прерывание
INTO OF=1 Прерывание по переполнению
IRET EFLAGS ← стек
CS ← стек
EIP ← стек
возврат
Возврат из обработчика прерывания
Команды передачи управления
Команда Операнды Пояснение Описание
JMP метка
r(m)16
r(m)32
метка
адрес в r(m)16
адрес в r(m)32
Безусловный переход на адрес, указанный операндом

Команды обращения к процедуре (функции)

Команда Операнды Пояснение Описание
CALL метка
r(m)16
r(m)32
метка
адрес в r(m)16
адрес в r(m)32
Вызов процедуры, указанной операндом
RET
c16

Удаляет из стека c16 байт
Возврат из процедуры

Команды поддержки языков высокого уровня

Команда Операнды Пояснение Описание
ENTER c16, c8 PUSH EBP
MOV EBP, ESP
Подготовка стека при входе в процедуру. Константа с16 указывает количество байт, резервируемых в стеке для локальных идентификаторов, константа с8 определяет вложенность процедуры
LEAVE POP EBP Приведение стека в исходное состояние
BOUND r16, m16&16
r32, m32&32
m16 m32 Проверка индекса массива: сравнивает значение в регистре, заданном первым операндом с двумя значениями, расположенными последовательно в ячейке памяти, адресуемой вторым операндом.

Команды организации циклов — используют регистр ECX по умолчанию в качестве счетчика числа повторений цикла. Каждый раз при выполнении команды LOOPсс значение регистра ECX уменьшается на 1, а затем сравнивается с 0. Если ECX =0 , выполнение цикла заканчивается, и продолжает выполняться код программы, записанный после команды LOOPcc . Если ECX содержит ненулевое значение, то осуществляется переход по адресу операнда команды LOOPcc .

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

Компьютер-исполнитель команд» «Алгоритмы и способы их описания»

Компьютер-исполнитель команд» «Алгоритмы и способы их описания»

«Компьютер-исполнитель команд» «Алгоритмы и способы их описания»

Какие команды выполняет компьютер?

ПК – одна из самых сложных систем. Любое действие пользователя – это команда: движение курсора мышки, закрытие/открытие окна, запуск проигрывателя, прокрутка колесика, старт программы и т. д.

Команды можно условно разделить на простые и сложные:

  • простые – нажатия кнопок на мониторе, перемещение курсора, ввод символов;
  • сложные – программная работа. Сканирование ПК антивирусом – одна огромная команда, включающая в себя ряд подкоманд.

Отслеживание работы технологического процесса – сложнейшая система алгоритмов с множеством «выходов». По результату выполнения цепочки действий, компьютер выдает задачи другим системам, регулирует весь ход технологического процесса: температуру, длительность реакции, время добавления новых компонентов, ситуации, когда процесс происходит неправильно, его прекращение, сигнал тревоги и т. д.

Большинство среднестатистических пользователей сталкиваются с простыми и средней сложности категориями. Этих возможностей достаточно для выполнения офисной работы и релакса за простором видео или просмотра пабликов.

Алгоритм и программы

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

Заводской процесс сложен тем, что компьютер работает не на прямую с объектом, который необходимо контролировать, а воздействует на через «посредников» — датчики, системы, механизмы и т. д. написание кодов программ, которые позволят одной машине управлять другой усложняются спецификой строения каждой техники.

Выводы

Соберём всё, что мы отметили рассматривая разные примеры «действия»:

  • «действие» можно использовать для создания алгоритма;
  • «действие» может быть элементарным;
  • «действие» может быть реализовано алгоритмом;
  • в «действии» обязательно участвует некоторый объект или группа объектов;
  • для группы объектов «действие» происходит только тогда, когда эти объекты «достаточно близко»;
  • в действии изменяются связи и параметры объектов (включая параметры их движения);
  • «действие» всегда и обязательно должно быть повторимо.

Признак Повторимости помогает нам в создании наших алгоритмов. С его использованием мы из всех процессов выделяем те, что являются «действием» и на их основе создаём новые алгоритмы. Более того этот признак достаточно прост и на основе его формализации можно снизить требования к системе обнаруживающей и создающей «действия» и поручить это нашему компьютеру.

Следующая статья серии (Часть 2) будет посвящена рассмотрению способов, с использованием которых «действия» могут быть сгруппированы в алгоритм. Этих способов достаточно много и есть предпосылки, что их описание не получится уместить в одну статью. Напишем — увидим.

Спасибо Вам за внимание.

САМОЕ ГЛАВНОЕ

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

Исполнитель алгоритма — это субъект или устройство, способные правильно интерпретировать описание алгоритма и выполнить содержащийся в нём перечень действий.

Один и тот же алгоритм может быть записан разными способами: на естественном языке, псевдокодом, с помощью блок-схем, на языке программирования и т. д.

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

Алгоритм состоит из команд. Команда — это отдельная инструкция в описании алгоритма. Шаг алгоритма — это отдельное действие, которое исполнитель выполняет по команде. Вычислительным процессом, порождённым алгоритмом, называется последовательность шагов алгоритма, пройденных при его исполнении.

Сложность алгоритма — количество элементарных шагов (действий) в вычислительном процессе этого алгоритма. Наряду со сложностью важной характеристикой алгоритма является эффективность. Эффективность оценивается количеством элементарных операций, которые необходимо выполнить для решения задачи, а также количеством памяти, требующейся для выполнения алгоритма.

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

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

А что такое программа? Отличается ли чем-то программа от алгоритма?

image

Программа — это алгоритм, записанный на языке исполнителя.

Иначе можно сказать так: алгоритм и программа не отличаются по содержанию, но могут отличаться по форме.

Для алгоритма строго не определяется форма его представления. Алгоритм можно изобразить графически, можно — словесно, можно — какими-нибудь специальными значками, попятными только его автору. Но программа должна быть записана на языке исполнителя.

Задача

Сформулируем основную задачу, которую хочется решить. Для этого сначала запишем операции над алгоритмами, которые программист выполняет в ходе написания своего проекта:

  • методы синтеза макро-алгоритма из под-алгоритмов (последовательной, параллельной и смешанной группировкой);
  • методы структурной трансформации макро-алгоритмов (оптимизационной, специализирующей, стыковочной. );
  • методы сохранения и переноса алгоритмов;
  • методы синтеза универсального алгоритма из сходных алгоритмов разных областей исполнения;
  • методы специализации универсального алгоритма в новой области исполнения;
  • методы формирования и развития комплексной системы совместно работающих алгоритмов;
  • методы взаимодействия одновременно исполняющихся алгоритмов;
  • и другие методы, полный список которых привести сложно, да и нет необходимости.

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

Так, например, формулировка «конечная совокупность точно заданных правил решения произвольного класса задач» говорит что есть возможность как-то «точно задать правила» из них собрать «совокупность» и этой совокупностью «решить» некоторый «класс задач».

Сразу возникает масса вопросов к этому определению:

  • Что такое правило?
  • Как, кому и для кого это правило можно задать?
  • Что есть объединение совокупностью?
  • Каким образом правила соотносятся с задачей?
  • Что формирует класс задачи?
  • Определяется ли способ формирования совокупности правилами и задачами?
  • .

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

  • Какова структура набора?
  • Какие есть варианты действий и исполнителей?
  • Существуют ли минимально возможное действие, минимальный набор необходимых действий?
  • Каким образом действия встроены в исполнителя?
  • Какие есть способы создания копии исполнителя (например, если исполнитель — человек)?
  • Как действия зависят друг от друга в упорядоченном выполнении?
  • Что есть задача кроме того, что она выполняется последовательностью действий?
  • Как задача соотносится с исполнителем и с действиями?
  • Возможно ли использовать решение задачи в качестве действия?
  • Какие возможны варианты указания порядка действий?
  • Если воспроизведение патефоном записи звуков леса является алгоритмом, то какова структура этой задачи?
  • Если репликация ДНК является алгоритмом, то каков её исполнитель?
  • Если исполнителем является Машина Тьюринга, то как с её использованием решить механическую задачу, например, воспроизведение звука?

Перечислено много вопросов, но они мало помогают в поиске методов работы с алгоритмом. Поэтому поставим себе меньшую задачу, но тоже очень нам важную. Давайте попробуем сформулировать, что делает алгоритм способом решения наших задач, и какие процессы являются для него «действиями». Даже решение этой «маленькой» задачи оказывается очень объемным для одной статьи, поэтому будем его разбивать на части. И поэтому первую статью серии целиком посвятим только «Действию» и его признакам, которые опущены в указанных выше определениях алгоритма, но являются очень важными для ответов на все заданные вопросы.

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector