КАТЕГОРИИ: Архитектура-(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) |
Арифметические команды
Команды пересылки Команды языка машины Значения полей mod и mem в формате регистр-память. Формат регистр–память (и память-регистр).
Операнд A2 может иметь один из приведённых ниже трёх видов:
В случае 1 физический адрес (полный адрес ячейки) вычисляется центральным процессором по формуле: Aфиз:= (B*16 + A)mod 2 20 , где B – значение одного из сегментных регистров. В случае 2 физический адрес вычисляется по формуле: Aфиз:= (B*16 + (A + <M1>)mod 216)mod 220 , где вместо <M1> подставляется содержимое регистра-модификатора (одного из четырёх указанных). В случае 3 физический адрес вычисляется по формуле: Aфиз:= (B*16 + (A + <M1> + <M2>)mod 216)mod 220, где M1 - любой из регистров BX или BP, а M2 – любой из регистров SI или DI. Использование регистров BX и BP (как и SI и DI) одновременно в качестве модификаторов запрещено.
Внутреннее представление формата команды регистр–память: 8 бит 2 бита 3 бита 3 бита 8 бит 8 бит
mod – поле модификатора, mem – поле способа адресации, a8 и a16 – одно- или двухбайтовое смещение, d и w – биты направления и размера аргумета.
Рассмотрим синтаксис машинных команд и семантику их выполнения центральным процессором. Для удобства команды будем записывать так, как это принято в языке Ассемблер.
Команды пересылки – одни из самых распространённых команд в языке машины. Все они пересылают один или два байта из одного места памяти в другое. Введём следующие условные обозначения: r8 – любой короткий регистр AH,AL,BH,BL,CH,CL,DH,DL; r16 – любой из длинных регистров AX,BX,CX,DX,SI,DI,SP,BP; m8, m16 – операнды в основной памяти длиной 1 и 2 байта соответственно; i8, i16 – непосредственные операнды в самой команде длиной 1 и 2 байта соответственно; SR – один из сегментных регистров SS, DS, ES; m32 – операнд в основной памяти длиной 4 байта.
mov op1, op2; op1:= op2 Существуют следующие допустимые форматы операндов команды пересылки:
Команда пересылки не меняет флаги в регистре FLAGS.
Команды сложения и вычитания: add op1, op2 – сложение, sub op1, op2 -вычитание: op1:= op1 ± op2 adc op1, op2 – сложение с учётом флага переноса, sbb op1, op2 – вычитание с учётом флага переноса: op1:= op1 ± op2 ± CF Таблица допустимых операндов для этих команд:
В результате выполнения операций изменяются следующие флаги: CF – флаг переноса, OF – флаг переполнения, ZF – флаг нулевого результата, SF – флаг знака результата.
Команды умножения и деления целых чисел.
В младшей модели семейства есть следующие команды умножения и деления, в них явно задаётся только второй операнд (второй сомножитель или делитель). Первый операнд всех команд этого класса явно в команде не указывается и находится в фиксированном регистре, принимаемом по умолчанию. mul op2 – беззнаковое умножение, imul op2 – знаковое умножение, div op2 – беззнаковое целочисленное деление, idiv op2 – знаковое целочисленное деление. Вычисления производится по формулам: Умножение для коротких операндов: AX:= AL * op2 Деление для коротких операндов: AL:= AX div op2
AH:= AX mod op2 Умножение для длинных операндов: (DX,AX):= AX * op2 Деление для длинных операндов: AX:= (DX,AX) div op2 DX:= (DX,AX) mod op2 В этих командах операнд op2 может иметь формат r8,r16,m8 или m16. Команды умножения устанавливаются флаги переполнения и переноса.
Дата добавления: 2014-01-05; Просмотров: 472; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |