Система команд процессора i32. Способы адресации.




ЗНАЕТЕ ЛИ ВЫ?

Система команд процессора i32. Способы адресации.



Всего 8 адресаций оперативной памяти: 1. Регистровая. Операнды могут располагаться в любых регистрах общего назначения и сегментных регистрах. mov eax,ebx – содержимое регистра ebx пересылается в eax. 2. Непосредственная. Команды (все арифметические команды, кроме деления) позволяют указывать один из операндов в тексте программы, например mov eax,2 помещает в регистр EAX число 2. 3. Прямая. Если операнд - слово, то команда mov eax,es:0001 поместит это слово в регистр EAX. если в сегментном регистре ES, была описана переменная word_var размером в слово, можно записать ту же команду как mov eax,es:word_var. В таком случае ассемблер сам заменит слово «word_var» на соответствующий адрес. 4.Косвенная. Mov eax,[ebx] – содержимое регистра ebx берется как адрес источника. 5.По базе со сдвигом. mov eax,[ebx+2] - помещает в регистр EAX слово, находящееся в сегменте, указанном в DS, со смещением на 2 большим, чем число, находящееся в EBX. 6.Косвенная с масштабированием. C его помощью можно прочитать элемент массива слов, 2-ых слов или 4-ых слов, поместив номер элемента в регистр: mov ax,[esi*2]+2. Нельзя использовать SI, DI, BP или SP, которые можно было использовать в предыдущих вариантах. 7.По базе с индексированием. mov eax,[ebx+esi+2] - В регистр EAX помещается слово из ячейки памяти со смещением, равным сумме чисел, содержащихся в EBX и ESI, и числа 2. 8. По базе с индексированием и масштабированием Mov eax,[eax+4*eax+2] – Смещение может быть байтом или двойным словом. Если ESP или EBP используются в роли базового регистра, селектор сегмента операнда берется по умолчанию из регистра SS, во всех остальных случаях — из DS.


Система команд процессора i32. Машинная обработка. Байт способа адресации.

Каждая команда состоит из нескольких полей (до 6).

1.Префикс. – может содержать от 0 до 4 однобайтных префиксов. Это необязательная часть инструкции, позволяет изменить некоторые особенности ее выполнения.

2.Код операции. – действие команды, которое должен выполнить процессор (содержит или 1 или 2 байта).

3. Mod R/M. – байт способа адресации, показывает способы адресации.

mod r/o r/m

mod – режим адресации

R/O – указывает регистр или является продолжением кода команды.

R/M – указывает регистр или режим адресации.

 

Mod 00 – используется адресация без смещения; 01 – с 8-ми битными смещениями; 10 – с 8-ми битными или с 16-, либо с 32-битными смещениями; 11. R/M имеет различия между 16- и 32-битной адресацией.

 
[bx+si] [eax]
[bx+di] [ecx]
[bp+si] [edx]
[bp+di] [ebx]
[si] sib
[di] [ebp]
[bp] [esi]
[bx] [edi]

4. Поле SIB. – занимает 1 байт, используется для 32-битной адресации.

S I B

S – коэф. масштабирования; I – индексный регистр; B – регистр баз.

5.Смещение. – число, которое масштабируется и добавляется в регистр памяти. Может содержать 0,1,2,4 байта.

6.Непосредственный операнд. (0,1,2,4 байта).


Разветвляющий вычислительный процесс.

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

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

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

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

JCC – условный переход. Это набор команд, каждая из которых выполняет переход, если удовлетворяется соответствующее условие. Команды условного перехода: JA – если выше, JNBE – если не ниже или равно, JAE – если выше или равно, JB – если ниже, JC – если перенос, JBE – если ниже или равно, JE – если равно, JZ – если 0, JG – если больше JGE – если больше или равно, JL – если меньше, JNG – если не больше, JNE – если не равно, JNZ – если не 0, JNO – если нет переполнения, JO – если есть переполнение, JPO – если нечетное, JP – если есть четность, JS – если есть знак, JNS - если нет знака.

Циклический вычислительный процесс

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

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

Виды циклов

Безусловные циклы - циклы, выход из которых не предусмотрен логикой программы. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных) циклов. Для обеспечения бесконечного повторения проверка условия в таком цикле либо отсутствует, либо заменяется константным значением.

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

На языке Си:

while(<условие>)

{

<тело цикла>

}

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз.

На языке Си:

do

{

<тело цикла>

}

while(<условие>)

 





Последнее изменение этой страницы: 2016-04-26; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.156.34 (0.005 с.)