Инструкция для usb зажигалки

Принципиальная схема простого компьютера

Цикл Выполнения

Выборка
команды, хранящейся в памяти. Извлекается в блок управления путем подачи в память адреса команды. Декодирование
Блок управления декодирует инструкцию для того. Чтобы найти последовательность операций. Необходимую для ее выполнения. Память
Все данные, необходимые для выполнения команды. Извлекаются из памяти блоком управления и сохраняются в датапате.

Выполнение
операции выполняется в пределах пути данных.

Запись
Результат операции, возможно, будет записан в память.

Пример Инструкции

ДОБАВИТЬ [0],[1],[2] ; Добавьте содержимое ячейки памяти 1 в ячейку 2 и поместите результат в ячейку 0.

Последовательность Выполнения

1. Адрес инструкции передается в память с СЧИТАННЫМ управляющим сигналом
2. Инструкция поступает в блок управления
3. Инструкция расшифровывается.
4. Адрес 1 отправляется в память с сигналом считывания
5. Данные. Извлеченные из ячейки памяти 1 в datapath
6. Адрес 2 отправляется в память с сигналом считывания
7. Данные. Извлеченные из ячейки памяти 2 в datapath
8. Операция ДОБАВЛЕНИЯ отправляется в ALU в datapath
9. Адрес 0 отправляется в память с сигналом записи
10. Результат отправляется из datapath в память и записывается в местоположение 0.

Что такое набор инструкций

Машинный язык очень специфичен для определенного типа процессора. Каждый процессор будет иметь определенный набор инструкций. Которые он может декодировать и выполнять. Это называется набором команд процессора или архитектурой набора команд (ISA).

Информация, которая должна присутствовать в инструкции

Операция
, например, СЛОЖЕНИЕ, ВЫЧИТАНИЕ и т. Д.

Где получить
адреса памяти данных, или данные могут быть уже в datapath. Или данные могут не понадобиться.

Где поместить результат
в адрес памяти или, возможно, временно в пределах пути данных.

Где найти следующую инструкцию
Адрес или, чтобы позволить принимать решения, условие и выбор адресов.

Части инструкции

Код
операции Сама операция обычно представлена кодом. Называемым кодом операции (для КОДА операции)


Все остальные части инструкции называются операндами.

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

Пример
ADD AX,[102]

  • Код операции ADD
  • Есть два операнда, AX и [102]
  • Эта инструкция содержит один адрес — 102

Инструкции часто классифицируются по количеству операндов и адресов. Которые они содержат.

Выше приведенная инструкция адреса 2 операнда 1.

Формат. Используемый для представления инструкции на языке ассемблера

Не существует стандартного формата для описания инструкций. Иногда даже для одного и того же процессора. Код операции почти наверняка будет первым; однако некоторые языки ассемблера имеют операнд назначения первым. А некоторые-последним.

Виды обучения

Машины с одним типом инструкции

Для того чтобы поместить всю необходимую информацию в одну инструкцию она должна иметь следующий формат

Опкод
Место назначения
Источник 1
Источник 2
Состояние
Next/True
Next/False
Код
Адрес
Адрес
Адрес
Код
Адрес
Адрес

Это адресная инструкция 6 операндов 5.

Пример
SUB [0],[1],[2],NZ,4,5

Это означает
Вычесть значение, хранящееся в местоположении 2, из значения, хранящегося в местоположении 1, и сохранить его в местоположении 0. Если результат не равен нулю (NZ), то получите следующую инструкцию из местоположения 4, в противном случае получите ее из местоположения 5.

Недостатки использования одного типа инструкций
На практике коды в инструкции (код операции и условие) могут быть довольно малыми. Например 2..8 бит. Однако если инструкция должна иметь возможность ссылаться на большие объемы данных. То адреса должны быть большими. Например 16..32 бита. Если бы вышеприведенная инструкция использовала 6 бит для кода операции, 4 бита для кода условия и 16 бит для каждого адреса. То она должна была бы иметь длину 90 бит.

Некоторые очень ранние компьютеры имели такие инструкции, но не современные машины.

Три адресные машины

Не все инструкции нуждаются в изменении порядка выполнения инструкций. Поэтому Next/False может быть значением по умолчанию:

Предположим, что Next/False-это следующая последовательная инструкция
, теперь нам нужно специальное место хранения внутри процессора для хранения адреса по умолчанию следующей инструкции. Это называется счетчиком программ (PC), указателем команд (IP) или регистром адресов команд (IAR). Мы будем использовать PC в качестве имени для этого регистра.

Предположим, что большинство инструкций будут последовательными
, Разделите инструкцию на два типа

Тип 1 будет трехадресной инструкцией (операции ALU). Тип 2-одноадресной инструкцией (инструкции управления).

Инструкции типа 1: Операции ALU

Код операции
Место назначения
Источник 1
Источник 2
Код
Адрес
Адрес
Адрес

Инструкции типа 2: Инструкции по управлению

Код операции
Состояние
Next/True
Код
Код
Адрес

Самая длинная инструкция теперь имеет 3 адреса, и этот тип машины называется трехадресной машиной.

Теперь должен
быть способ хранения информации о предыдущей операции. Обычно это делается с помощью специального набора однобитовых хранилищ внутри пути данных. Называемых флагами. Флаги устанавливаются определенными инструкциями, например, операция ВЫЧИТАНИЯ может установить флаг. Называемый Нулевым флагом. Если результат вычитания равен нулю. Это можно использовать, чтобы выяснить, равны ли два числа (если A=B, то A-B=0).

Пример
Для выполнения одной и той же операции нам нужны две инструкции:

СУБМАРИНА [0],[1],[2]
JNZ 4
Инструкция которая была бы по адресу 5 идет сюда

Преимущества и недостатки 3 адресных машин
Теперь для выполнения одной и той же операции нам нужны две инструкции. Поэтому машина может быть медленнее. Однако такие операции редки и поэтому снижение скорости будет компенсировано тем. Что программы теперь короче.

Две Адресные Машины

Три адресные инструкции все еще очень длинные, но их можно сделать короче:

Предположим, что пункт назначения совпадает с одним из источников
, что часто бывает так, но там. Где это не так. Необходима дополнительная операция-MOV.

Определение инструкции MOV (Transfer instruction)
Если определен код операции MOV. Который перемещает свой источник в пункт назначения. То может быть выполнена любая операция.
Все операции выполняются между операндами, которые ссылаются на память. И называются инструкциями памяти-Памяти

Инструкции типа 1: Память-Операции ALU памяти (включая MOV)

Код операции
Пункт назначения/Источник 1
Источник 2
Код
Адрес
Адрес

Инструкции типа 2: Контрольные инструкции

Код операции
Состояние
Next/True
Код
Код
Адрес

Пример

Теперь для выполнения той же операции нам нужны три инструкции:
MOV [0],[1]
SUB [0],[2]
JNZ 4

Преимущества и недостатки 2 адресных машин
Машина может быть медленнее для этого примера. Но не во всех случаях. Программы стали еще короче.

Один Адрес Машины

Две адресные инструкции можно сделать еще короче:

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

Эти временные местоположения называются регистрами. Если есть только один, он обычно называется аккумулятором. Регистры обычно называются символическим именем,например A,B,AX,R1, R2 и т. Д.
Операции Теперь Могут быть из памяти в регистр (операции памяти-регистра) или из регистра в память (операции регистра-памяти).

Инструкции типа 1: Операции ALU Регистр-память

Опкод
Пункт назначения/Источник 1
Источник 2
Код
Адрес
Регистрация

Инструкции типа 2: Инструкции по управлению

Опкод
Состояние
Next/True
Код
Код
Адрес

Инструкции типа 3: Операции ALU с регистром памяти

Опкод
Назначение/Источник 1
Источник 2
Код
Регистрация
Адрес

Инструкции типа 4: Операции ALU с регистровой памятью

Код операции
Пункт назначения/Источник 1
Источник 2
Код
Адрес
Регистрация

Пример

Теперь, чтобы выполнить ту же операцию, нам нужны четыре инструкции:
MOV A, [1]
SUB A, [2]
MOV [0], A
JNZ 4

Преимущества и недостатки 1 адресных машин

В этом случае машина будет работать медленнее, но не во всех случаях. Программы стали еще короче. Регистры могут использоваться для временных результатов. Которые не нужны немедленно. Или для хранения часто используемых операндов. Например конечного числа в цикле

Машины с нулевым адресом

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

1. Разрешите всем операндам быть
регистрами.

Инструкции типа 1: Register-Операции Register ALU

Код операции
Пункт назначения/Источник 1
Источник 2
Код
Регистрация
Регистрация

Инструкции типа 2: Контрольные инструкции

Код операции
Состояние
Next/True
Код
Код
Адрес

Инструкции типа 3: Инструкции по передаче регистров памяти (загрузка)

ЗАГРУЖАТЬ
Место назначения
Источник
Код
Регистрация
Адрес

Инструкции типа 4: Регистр-Инструкции по передаче памяти (магазин)

МАГАЗИН
Место назначения
Источник
Код
Адрес
Регистрация

Пример
Теперь для выполнения одной и той же операции нам нужно пять инструкций:
Часто этот тип машины называют машиной загрузки/хранения. Потому что единственными инструкциями с адресами являются инструкции загрузки и хранения.
Некоторые машины допускают три инструкции нулевого адреса операнда. Это уменьшает количество инструкций MOV.

2. Предположим, что все операции неявно используют стек.

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

Инструкции типа 1: Операции стека ALU

Код операции
Код

Инструкции типа 2: Инструкции по управлению

Код операции
Состояние
Next/True
Код
Код
Адрес

Инструкции типа 3: Операции стека

ТОЛКАТЬ
Источник
Код
Адрес

Инструкции типа 4: Операции со стеком

ХЛОПОК
Источник
Код
Адрес

 

Пример

Теперь, чтобы выполнить ту же операцию, нам нужно пять инструкций:
PUSH [1]
PUSH [2]
SUB
POP [0]
JNZ 4

Это иногда называют стековой машиной, и такие машины действительно существуют, например. В транспьютере. Но они редки.

Преимущества и недостатки машин с нулевым адресом

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

Сравнение трех, двух, одной и нулевой адресных машин.

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

Пример Выражения

X=Y*(Y+Z)

Где X,Y и Z хранятся в ячейках памяти 0,1 и 2

Инструкции
Инструкция Извлекает
Доступ к Данным
Три адреса:
ДОБАВИТЬ [0],[1],[2]
МУЛЬТ [0],[0],[1]
2
6
Два адреса:
MOV [0],[1]
ADD [0],[2]
MULT [0],[1]
 
3
 
6
Один адрес:
MOV A,[1]
ADD A,[2]
MULT A,[2]
MOV [0],A
 
4
 
4
Загрузка/хранение:
MOV A,[1]
MOV B,[2]
ADD A,B
MULT A,B
MOV [0],A
 
 
5
 
 
3
Стек:
LD [1]
DUP
LD [2]
ADD
MULT
ST [0]
 
 
6
 
 
3

Какая машина будет быстрее. Будет зависеть от относительной скорости доступа к данным и извлечения инструкций. Однако это, вероятно. Будет машина загрузки/хранения.

На практике машины могут допускать множество различных типов инструкций. Например, Pentium-это машина с одним адресом. Но она также имеет инструкции с нулевым регистром адресов и некоторые операции со стеком.

Краткие сведения

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

Режимы адресации

Прямая адресация
До сих пор мы предполагали. Что все ссылки на память относятся к явно указанным ячейкам памяти. Такой способ обращения к памяти называется Прямой адресацией. Можно писать программы, которые используют только прямую адресацию. Но у таких программ есть серьезный недостаток — программа должна иметь возможность изменять свой собственный код.

Пример программы, использующей только прямую адресацию
, Представьте себе машину с двухбайтовыми инструкциями. Где первый байт-это код операции. А второй-8-битный адрес.

Набор инструкций машины

Операция Код
MOV A,[адрес] 00
MOV [адрес],A 01
ДОБАВИТЬ A,[адрес] 02
SUB A,[адрес] 03
Адрес JMPNZ 04
ОСТАНОВКА 05

Пример задачи
Добавьте по одному к каждому номеру в таблице. Начинающейся с заданного адреса и имеющей заданную длину.

Псевдокод
Следующая псевдопаск-программа выполнит эту задачу (предположим, что M-это память. А start и num-начальный адрес в памяти и количество записей в таблице)

процедура add_one(старт:байт,кол-во:байт); 
ВАР-центр,адрес:байт; 
начать 
по CTR:=числ; 
адрес:=начало; 
повторите  
м[адрес]:=г[адрес]+1; 
по адресу:=адрес+1; 
по CTR:=ХТР-1 
до ЦТР=0 
конец;

 

Программа на языке ассемблера:
Предположим, что start и num ранее были сохранены в двух ячейках памяти.
Следующая программа выполнит add_one на машине прямой адресации.
 

Адрес Код операции Операнд Язык ассемблера Псевдокод
00 00 22 MOV A,[num]  
02 01 23 MOV [ctr],A ctr:=num
04 00 24 MOV A,[start]
06 01 0B MOV [get+1],A адрес:=начало
08 01 0F MOV [put+1],A повторять
0A 00 00 get: MOV A,[0] temp:=M[адрес]
02 25 ДОБАВИТЬ A,[один] temp:=temp+1
01 00 put: MOV [0],A M[адрес]:=temp
10 00 0B MOV A,[get+1] temp:=адрес
12 02 25 ДОБАВИТЬ A,[один] temp:=temp+1
14 01 0B MOV [get+1],A  
16 01 0F MOV [put+1],A адрес:=temp
18 00 23 MOV A,[ctr]
03 25 SUB A,[один] ctr:=ctr-1
01 23 MOV [ctr],A  
04 JMP NZ,get пока ctr=0
20 05 00 ОСТАНОВКА остановка
22 00 num: DB 10

ctr: DB 0

байт num 

байт ctr

24 64 01 начало: DB 100

один: DB 1

начало байта 

 

 
Комментарии к этой программе
Временная переменная Эта переменная должна быть внутри программы. Потому что единственный способ ссылаться на память-это прямой адрес. И поэтому она хранится в get+1. К сожалению, наша программа использует Таким образом, если Это создает запутанную программу.

Часто в программе требуется константа, например. Для ctr:=ctr-1 необходима константа 1. Эта константа должна храниться в ячейке памяти. Такая константа называется литералом.

Новые режимы адресации


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

Новый набор команд С Косвенной и непосредственной Адресацией Регистра.

Операция Код Режим адресации
MOV A,[адрес] 00 Прямой
MOV [адрес],A 01 Прямой
ДОБАВИТЬ A,[адрес] 02 Прямой
SUB A,[адрес] 03 Прямой
Адрес JMPNZ 04  
ОСТАНОВКА 05  
MOV B,[адрес] 06 Прямой
MOV A,[B] 07 Регистр Косвенный
ДОБАВИТЬ A,n 08 Немедленный
ДОБАВИТЬ B,n 09 Немедленный
Регистр Косвенный
SUB A,n 0B Немедленный

 

Новая Программа на Ассемблере

 

Адрес Код операции Операнд Язык ассемблера Псевдокод
00 00 18 MOV A,[num]  
02 01 19 MOV [ctr],A ctr:=num
04 06 MOV B,[старт] адрес:=начало
06 07 00 get: MOV A,[B] повторная температура:=M[адрес]
08 08 01 ДОБАВИТЬ А,1 температура:=температура+1
00 MOV [B],A M[адрес]:=temp
09 01 ДОБАВИТЬ B,1 адрес:=адрес+1
0E 00 19 MOV A,[ctr]
10 0B 01 SUB A,1 ctr:=ctr-1
12 01 19 MOV [ctr],A  
14 04 06 JMP NZ,get пока ctr=0
16 05 00 ОСТАНОВКА остановка
18 0A 00 num: DB 10

ctr: DB 0

байт num 

байт ctr

64   начало: DB 100 начало байта

Эта программа значительно короче, ей легче следовать и она сама себя не модифицирует.
 

Описание общих режимов адресации

Адресация регистров
, например. ADD A,B Добавляет значение в регистре B к значению в регистре A и помещает результат в регистр A.
Оба операнда в этой инструкции используют адресацию регистров, значение. На которое ссылаются. Хранится в регистре в пределах datapath.
Этот режим адресации используется для доступа к временным или часто используемым переменным.

Режим адресации регистра
Немедленная адресация
, например. ADD A,23 Добавляет 23 к значению в регистре.
Значение 23 является частью инструкции и называется непосредственным.
Этот режим адресации используется для констант.
Режим немедленной адресации
* от 50% до 60% подходит в пределах 8 бит
* от 75% до 80% подходит в пределах 16 бит

Адресация смещения
, например ADD A,[B+16] Использует значение в регистре B+16 в качестве адреса значения. Которое добавляется в регистр A.

Этот режим имеет два общих применения. (обратите внимание. Что это значение может быть целым числом со знаком)

1. Доступ к локальным переменным

    При входе в процедуру часть памяти может быть выделена для локальных переменных. Если регистр содержит адрес начала этой памяти. То константа может использоваться для доступа к различным локальным переменным.

2. Индексирование глобальной таблицы.

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

Режим адресации смещения


Среднее значение 5 программ из SPECint92 и Среднее значение 5 программ из
SPECfp92 Ось X находится в степенях 2

 
Регистр косвенной адресации
, например, ДОБАВЬТЕ A,[B] Добавьте значение по адресу. Содержащемуся в регистре B. К значению в регистре A.

Этот режим используется для указания указателей на данные. Хранящиеся в памяти.

Режим косвенной адресации Регистра
Индексированная адресация
, например. ADD A,[B+C] Используйте B+C в качестве адреса значения для добавления в регистр A.

Этот режим часто используется для доступа к элементам таблицы или массива. Где B-адрес начала таблицы. А C-индекс таблицы.

Режим индексированной адресации
Прямая адресация
, например. ADD A,[200] Добавьте значение по адресу 200 в регистр A.

Используется для доступа к глобальным переменным. Которые будут иметь фиксированное местоположение в памяти.

Режим прямой Адресации

Косвенная адресация памяти
, например ADD A,@[200] Используйте значение по адресу памяти 200 в качестве адреса значения для добавления в регистр A.
Этот режим используется так же. Как и Register Indirect. И может быть найден в основном на старых машинах.

Режим косвенной адресации памяти
Индексируется со смещением.
Это комбинация индексирования и смещения. Она может быть использована для доступа к элементам массива.

Автоинкрементная и Авто декрементная адресация
Некоторые машины имеют режимы адресации. Которые автоматически добавляют или вычитают константу из регистра. Указанного в регистре Косвенной адресации. Это может произойти до или после использования регистра в качестве адреса.

Эти режимы могут использоваться для пошагового перебора элементов таблицы или массива. А также для выполнения операций стека. Где они не определены.

Масштабирование
Иногда элементы массива не являются отдельными машинными словами. В этом случае индекс в массиве должен быть умножен на размер элемента. Некоторые машины имеют режим адресации. Который будет выполнять это масштабирование.

Относительный (или относительный ПК)
Этот режим такой же, как индексированный или смещенный. Где используемый регистр является счетчиком программы. Он часто используется для указания назначения определенных команд ПЕРЕХОДА. Назначение команды ПЕРЕХОДА, скорее всего, будет находиться рядом с текущей инструкцией. Поэтому при использовании относительной адресации размер в памяти адреса назначения может быть уменьшен.

Краткое описание режимов адресации

Имя
Пример
Операция
Использование
Регистрация ДОБАВИТЬ R4,R3 R4:=R4+R3 Временные переменные
Немедленный ДОБАВИТЬ R4,3 R4:=R4+3 Константы
Смещение (на основе) ДОБАВИТЬ R4,[R1+100] R4:=R4+M[R1+100] Локальные переменные
Регистр Косвенный ДОБАВИТЬ R4,[R1] R4:=R4+M[R1] Указатели
Индексируется ДОБАВИТЬ R4,[R1+R2] R4:=R4+M[R1+R2] Массивы
Индексируется со смещением ДОБАВИТЬ R4,[R1+R2+8] R4:=R4+M[R1+R2+8] Массивы
Прямой ДОБАВИТЬ R4,[100] R4:=R4+M[100] Глобальные переменные
Память Косвенная ДОБАВИТЬ R4,@[100] R4:=R4+M[M[100]] Указатели
Автоматическое приращение ДОБАВИТЬ R4,[R2]+ R4:=R4+M[R2]

R2:=R2+d

Шагая через массив или стековые операции.
Авто-декремент ДОБАВИТЬ R4,-[R2] R2:=R2-d

R4:=R4+M[R2]

Stack ops
Масштабный ДОБАВИТЬ R1,[R2+R3*4] R4=:R4+M[R2+R3*4] Массивы структур
Родственник ДОБАВИТЬ R1,[R2+PC] R4:=R4+M[R2+PC] Статические Локальные переменные

 

До сих пор мы предполагали. Что существует только один тип данных. В действительности машинам приходится иметь дело с байтами. Полусловами. Словами и двойными словами.
Некоторые наборы команд позволяют каждой команде работать с любым размером данных. Другие разрешают доступ только к словам и. Возможно, к байтам.

Кодирование команд
Инструкции могут быть закодированы таким образом. Чтобы они были переменными по размеру (например. Pentium) или фиксированными (PowerPC). Инструкции переменного размера позволяют программе занимать меньше памяти. Но процессор должен быть более сложным. Чтобы иметь дело с переменной длиной. Гибридное кодирование заставляет инструкцию быть одной из нескольких фиксированных длин.