Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Арифметические команды

Установка байта при условии

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

Операции с регистр флагов

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

Команды предачи данных

MOV dst,src преслать src в dst

Возможные операнды:

Reg, reg; reg, mem; mem, reg; reg, data; mem, data

(data-непосредст операнд); sreg, reg; sreg, mem;

reg, sreg; mem, sreg (sreg-сегментн рег, кроме сегм рег кода-CS) –на рег флагов не влияют

XCHG dst,src –обменять dst и src (reg, mem; reg,reg)

Стековые команды

PUSH src – включить опреанд в стек

POP dst – извлеч оперенд из стека

Над 8 битн операнд не выполн

Reg 16/32; mem16/32; sreg (в коман POP кроме CS)

С.286 проц PUSH data

PUSHA – сохран в стеке все РОН

POPA – извлеч из стека все РОН

С.386 проц

PUSHAD – для всех общих регистр

POPAD

LEA reg,mem – вычисление эффективного адреса (в рег загруж смещен определ 2-ым операндом)

Array db 5 dup (2);под массив 5 элем

LEA si,Array (mov si, offset Array)

lea eax,[ebx+ecx*8] (иначе eax←ebx+ecx*8)

LDS reg,mem (загузить адрес использ DS)

LES, LSS, с.386 LFS, LGS

Пример:

1) data segment array dl 1,2,3,4,5 data ends

code segment …

mov ax,data mov ds,ax, mov si,offset array

2) exe-прогр

data segment

array dl 1,2,3,4,5 ADDR_ARRAY dd array

ADDR1 dw offset array ADDR1 dw segment array

 

PUSHF(16 б) – поместить flags из стека

POPF(16 б) – загруз flags в стек

PUSHFD(32 б) – поместить eflags из стека (.386)

POPFD(32 б) – загруз eflags в стек (.386)

LANF – загруз флаги сост в AH (ah←мл байт flags)

SANF – загруз флаги сост из AH (мл байт flags← ah)

STC - Установить флаг переноса (CF←1).

CLC – Сбросить флаг переноса (CF←0).

CMC - Инвертир флаг переноса (СF).

STD - Установить флаг направления (DF←1, так что при последующих строковых операциях регистры DI и SI будут уменьшаться.)

CLD - Сбросить флаг направления

 

22.Команды ввода/ вывода

IN al/ax, port/dx-Считать данные из порта

OUT port/dx, al/ax - Записать данные в порт

(port- адрес порта вв/выв в виде 8б беззначн числа (0..255); dx – рег содерж адрес порта

 

MOWSX reg16/reg32, reg8(16)/mem8(16) пересылка с расширением знака (.386)

MOWZX reg16/reg32, reg8(16)/mem8(16)пересылка с расширением нулями (.386)

Al =80h

movzx bx,al (0080h)

movsx cx,al (FF80h)

 

SETcc reg/mem8 - yстановка байта по условию (.386)

Если услов выполн то в приемник занос 1, иначе 0

Setns dl – ели нет знака (sf=0, dl←1)

Setc al – если перенос (cf=1, al←1)

BSWAP reg32 - Обмен байт внутри регистра (.486)

Обращает порядок байт в 32-бит регист 0-7↔24-31, 8-15↔16-23

mov eax,12345678h

bswap eax; теперь в еах находится 78563412h

CMOVcc reg,reg/mem(8,16,32) yсловная пересылка данных (P6)

cmp ах,bх; сравнить ах и bх

cmovl ax,bx; если ах < bх, скопировать bх в ах

XLAT адрес

XLATB Трансляция в соответствии с таблицей

al←M{ES:(E)BX+AL}(омещает в AL байт из таблицы в памяти по адресу ES:BX (или ES:EBX) со смещен относительно начала таблицы, равным AL.)

table db 16dup(?)…

mov bx,offset table

mov ax, 01; код

xlat

 

 

Сложение:

ADD dst,src (dst←dst+src) 4 байта

(reg, reg; reg, mem; mem, reg; reg, data; mem, data)

Изменяет CF,AF,OF,PF,SF,CF

ADC dst,src (dst←dst+src+CF) сложить с переносом

INC reg/mem- увелич на 1(не влияет на CF)
inc al
inc byte str[si] (1б)
inc word ptr (2б)

inc dword ptr (4б)

Вычитание:

SUB dst,src (dst←dst-src)

SBB dst,src (dst←dst-src-CF)для многобайтов операции с займом

CMP dst,src (dst-src) – по результ вычитан устанавлив флаги но dst,src не меняются

NEG dst (reg/mem) (dst←0-dst) – смена знака

DEC dst(reg/mem) уменьш на 1 (dst←dst-1)

Умножение:

MUL reg/mem

IMUL reg/mem – умножение чисел со знаком

тип src второй операнд результат
байт al ah_al
слово ax dx:ax
двойное слово eax edx:eax

CF=OF=0 или CF=OF=1

с. 286 IMUL приемн, источник, непоср операнд

(reg16,reg/mem16, data)

с. 386 IMUL reg32,reg/mem32, data

dst ←src*data

с. 386 IMUL reg16,reg/mem16(reg32,reg/mem32)

dst ←dst*src (сохран только младш часть результ)

Деление:

DIV reg/mem

IDIV reg/mem-деление чисел со знаком

тип делит делимое результат
частн остат
байт ax al ah
слово dx_ax ax dx
двойное слово edx_eax eax edx
         

После выполн команды деления флаги не определены, и если частное не помещ в отведен формат то генерир прерывание 0 – ошибка деления

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

СWB – конвертир байта в слово (расшир байт в al до слова в ax)

СWD – конвертиров слова в двойное слово (слово в ax превр в двойное слово, мтадш полов остается в ax(биты 0-15), а старшая располаг в dx(биты 16-31)) –устанавтив все биты рег dx в значение = велич старш бита рег ax

CDQ -конвертир двоиного слова в учетвер – устанавтив все биты рег edx в значение = велич старш бита рег eax

CWDE -конвертир слова в двойное слово – ax расшир до eax

XADD dst,src (reg/mem,reg(8,16,32)) – обменять и сложить (dst↔src и dst←dst+src)(.486)

CMPXCHG dst,src (reg/mem,reg(8,16,32)) – сравнить и обменять между собой(.486)

acc (AL, АХ, ЕАХ)-аккомулятор

если acc=dst, то ZF←1 и dst←scr, иначе ZF←0 и acc←dst.

CMPXCHG8B dst (mem64) cравнить и обменять восемь байт (.586) acc=EDX:EAX (младшее двойное слово в ЕАХ, старшее – в EDX) src= ЕСХ:ЕВХ (восьмибайтная переменная в памяти). Если acc =src то dst ← ЕСХ:ЕВХ, иначе acc ←dst

 

<== предыдущая лекция | следующая лекция ==>
Способы адресации операндов | Команды логических операций
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 693; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.