КАТЕГОРИИ: Архитектура-(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 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 – умножение чисел со знаком
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-деление чисел со знаком
После выполн команды деления флаги не определены, и если частное не помещ в отведен формат то генерир прерывание 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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |