Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Arhitektura_EVM_i_vychislitelnyh_sistem.doc
Скачиваний:
0
Добавлен:
30.07.2019
Размер:
126.98 Кб
Скачать

Уловный переход

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

Флаговый регистр

Каждый бит флагового регистра в разные моменты меняет свое значение. Если флаг выставлен, значит во флаговом бите 1, если нет, то 0. Основные флаги:

  • Of (overflow flag) – флаг переполнения

  • Cf (carry flag) – флаг переноса

  • Zf (zero flag) – флаг нуля (да или нет)

  • Pf (parity flag) – флаг четности/нечетности

  • Sf – флаг знака

Команда сравнения cmp работает по тому же принципу, что и sub: происходит вычитание, при этом, если выполнение команды sub привело к отрицательному числу, то флаги sf и zf меняются, если числа при вычитании были одинаковы, то zf = 0. Первый операнд при выполнении команды cmp не меняется

Операции условного перехода с анализом флагов

  • je (jmp equal) – прыжок, если a=b

  • jne (jmp not equal) – прыжок, если a!=b

  • jb (jmp big)

jo

Прыжок, если

of

=1

jc

cf

js

sf

jz

zf

jp

pf

jno

of

=0

jnc

cf

jns

sf

jnz

zf

jnp

pf


je

equal

=

jne

non equal

!=

jg

Gather

> (знак)

jl

Lower

< (знак)

ja

Above

> (без знака)

jh

below

< (без знака)




Логические операции

And – логическое «и» – проводится над двумя операндами. С помощью этой команды можно, как правило, установить определенные биты первого операнда в 0

Or – логическое «или» – проводится над двумя операндами. Позволяет установить определенные биты первого операнда в 1

Xor – «исключающее или» – проводится над двумя операндами. Позволяет проверять определенные биты первого операнда.

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

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

Стек – это конструкция, которая сопутствует каждой программе и является таким же сегментом, как сегмент кода/данных. Со стеком работает 3 регистра:

  1. ss – содержит адрес сегмента стека

  2. esp/sp – указывает на вершину стека, т.е. содержит адрес самого верхнего элемента всех конструкций

  3. ebp/bp – адрес базы кадра стека содержит в себе адрес того элемента стека, к которому необходимо обратиться произвольно

Основные свойства стека:

  1. Стек не может превышать размер в 64кб (Только в случае 16и разрядных регистров или в случае использование 16и разрядного ЦП)

  2. Стек не может быть больше 4Гб (в случае 32у разрядных регистров)

  3. Элементы стека работают по принципу LIFO (Last input First output)

Со стеком можно работать с помощью команд:

  • push <операнд> (выставляет операнд на вершину стека). При вставке каждого следующего значения в стек, стек расширяется в сторону дна, при этом предыдущий верхний элемент не перезаписывается, а всего лишь спускается ниже

  • pop <операнд> (забирает из стека самый верхний элемент и помещает его в операнд). Таким образом верхним элементом стека становится предыдущий