Команды работы с адресами и указателями памяти
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

lea назначение,источник — загрузка эффективного адреса источника в регистр-назначение;

lea dx, x ; аналогично команде mov dx,offset x

lds назначение,источник — загрузка эффективного адреса источника в регистр назначения и загрузка указателя (адрес сегмента где содержится источник) в регистр сегмента данных ds;

les назначение,источник —-//-регистр дополнительного сегмента данных es;

lgs назначение,источник — -//- регистр дополнительного сегмента данных gs;

lfs назначение,источник — -//- регистр дополнительного сегмента данных fs;

lss назначение,источник — -//- регистр сегмента стека ss.

les dx,per1 ;полный указатель на per1 в пару es:dx

Команды работы со стеком

Для работы со стеком предназначены три регистра:

ss — сегментный регистр стека;

sp/esp — регистр указателя стека;

bp/ebp — регистр указателя базы кадра стека.

push источник — запись значения источник в вершину стека.


Алгоритм работы:

· уменьшить значение указателя стека esp/sp на 4/2 (в зависимости от значения атрибута размера адреса — use16 или use32);

· записать источник в вершину стека (адресуемую парой ss:esp/sp).

Размер записываемых значений — слово или двойное слово. Также в стек можно записывать непосредственные значения. В стек можно класть значение сегментного регистра cs. Другой интересный момент связан с регистром sp. Команда push esp/sp записывает в стек значение esp/sp по состоянию до выдачи этой команды

Команда push используется совместно с командой pop для записи значений в стек и извлечения их из стека

 pop назначение — запись значения из вершины стека по месту, указанному операндом назначение. Значение при этом “снимается” с вершины стека.

 


Push ax

Push bx

push cx

ss:bp
pop cx

pop bx

pop ax

push ax

pop bx            ; аналогично команде mov bx,ax

 

pusha - размещение в стеке регистров общего назначения в следующей последовательности: ax, cx, dx, bx, sp, bp, si, di

pushad - размещение в стеке регистров общего назначения в следующей последовательности: eax, ecx, edx, ebx, esp, ebp, esi, edi

pushf - размещение в вершине стека (ss:sp) содержимого регистра флагов flags

pushfd - размещение в стеке содержимого регистра флагов eflags.

 

p opa - извлечение из стека регистров общего назначения di, si, bp, sp, bx, dx, cx, ax

p opad - извлечение из стека регистров общего назначения edi, esi, ebp, esp, ebx, edx, ecx, eax

p opf - извлечение из стека слова и восстановление его в регистр флагов flags

p opfd - извлечение из стека двойного слова и восстановление его в регистр флагов eflags

Организация вычислений



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

Любая логическая команда меняет значение следующих флагов of, sf,zf,pf,cf (переполнение, знак, нуля, паритет, перенос)

and операнд_1,операнд_2 — операция логического умножения (И - конъюнкция).

оп1:=оп1 ٧ оп2

and ah, 0a1h; ah:=ah٧0ah

and bx, cx;             bx:=bx٧cx

and dx, x1;            dx:=dx٧x1

or операнд_1,операнд_2 — операция логического сложения (ИЛИ - дизъюнкцию)

or al, x1;             оп1:=оп1 & оп2

or eax,edx

or dx, x1

xor операнд_1,операнд_2 — операция логического исключающего сложения (исключающего ИЛИ ИЛИ-НЕ)

test операнд_1,операнд_2 — операция “проверить” (способом логического умножения).

Команда выполняет поразрядно логическую операцию И над битами операндов операнд_1 и операнд_2. Состояние операндов остается прежним, изменяются только флаги zf, sf, и pf, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния.

not операнд — операция логического отрицания. Команда выполняет поразрядное инвертирование (замену значения на обратное) каждого бита операнда. Результат записывается на место операнда.

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

model small .stack 100h .datax1      db   0c2hx2      db   022hy db   ? .code start: mov ax,@data mov ds,ax mov al, x1or       al, x2mov   y, al mov   ax,4c00h int       21 h

End start

Дата: 2019-12-22, просмотров: 272.