Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура ЭВМ и вычислительных систем.docx
Скачиваний:
4
Добавлен:
22.12.2018
Размер:
41.95 Кб
Скачать

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

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 <операнд> (забирает из стека самый верхний элемент и помещает его в операнд). Таким образом верхним элементом стека становится предыдущий

Использование стека в процедурах. Организация процедуры

.code

megatron proc //megatron – название процедуры, proc – служебное слово

mov ax,z

add ax,4

ret

megatron endp //конец процедуры

start: //точка входа, до – программа, но она не выполняется

mov ax,@data //совмещение сегмента данных с сегментом кода

mov ds,ax

mov bx,2

mov cx,2

cmp bx,dx //Сравнение посредствам вычитания. Если 0 => флажок поднимается

je ok

mov ax,ucooh

int 21h

OK:

call megatron //call – аргумент, вызов процедуры

mov ax, ucooh //адрес передается стеку

int 21h

Адресация и виды адресации

Адресация – принцип обращения к операнду в памяти.

  1. Регистровая адресация – метод адресации, при котором второй операнд находится в регистре

  2. Непосредственная адресация – принцип, при котором в качестве второго операнда пишется фактическое значение

  3. Прямая адресация – принцип, при котором в качестве второго операнда указывается конкретный адрес памяти, по которому этот операнд расположен

Адрес операндов памяти состоит из адреса сегмента + адреса смещения внутри сегмента. Адрес сегмента находится в сегментом регистре, а смещение – тот адрес, который отсчитывается от адреса сегмента. Если какой-либо другой сегментный регистр будет содержать адрес сегмента, то нужно явно указывать при адресации этот сегмент: .code / num 1 dw 4 / mov ax, cx:num1. Обратная операция при прямой адресации так же возможна, если, например, нужно записать число из регистра в поле памяти:

.data

num 1 dw 4

.code

start:

mov ax,9

mov num1,ax

  1. Регистровая / косвенная (без индексная) – этот вид адресации является косвенным, т.к. в качестве адреса будет использоваться регистр, содержащий этот адрес. Такой регистр должен быть помещен в квадратные скобки []

! В качестве регистров, содержащих адреса, в этом типе используются bx, bp !

! Если же в качестве регистров, содержащих адреса использоватьsi, di адресация будет индексной !

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

  1. Offset – позволяет получить адрес интересующего сегмента

  2. Lea – загрузка эффективного адреса

.data

Num1 dw8

.code

Start

Mov ax,14

Mov bx,6

Mov ds:[bx],ax

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

  • [bx]+4

  • 4[bx]

  • 4+[bx]

! Если в качестве регистра, содержащего адрес использовать bx, si, di, то считается, что по умолчанию работаем в сегменте данных !