Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Формат предложения ассемблера

[имя метки:] КОП [операнд1] [,операнд2] [;комментарии]

Команды пересылки данных

mov <операнд назначения>,<операнд-источник>

можно Нельзя Должно быть
mov ах, вх; ах:=вх mov ах,0а2h; ах:= 0а2h mov per1,ax mov ax,bh mov per1, per2   mov ds,per1   mov cs,ds   mov cs,ax; пара cs:ip содержит адрес следующей команды mov ah, bh mov al, per2 mov per1,al mov ax, per1 mov ds,ax mov ax,ds либо push ds mov cs,ax pop cs  

 

xchg <операнд1>,<операнд2>; двунаправленный обмен данными а:=в; в:=с; с:=а

xchg dl,dh; меняет местами данные


Команды ввода-вывода в порт

in аккумулятор,номер_порта — ввод в аккумулятор из порта

out порт,аккумулятор — вывод содержимого аккумулятора в порт

Команды работы с адресами и указателями памяти

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

 

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

push ad - размещение в стеке регистров общего назначения в следующей последовательности: 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.data x1      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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...