КАТЕГОРИИ: Архитектура-(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) |
Извлечение из стека
ЗАНЕСЕНИЕ В СТЕК КОМАНДЫ РАБОТЫ СО СТЕКОМ. 10,11,12,13,14,15
PUSH операнд-слово Копирует значение операнда в ячейку стека.
PОР операнд-слово Копирует значение ячейки стека в операнд.
Начиная с 80286 появились новые команды: · PUSHA (операндов не имеет) Заносит в стек AX, CX, DX, BX, SP, BP, SI, DI · POPA (операндов не имеет) Извлекает из стека DI, SI, BP, SP (отбрасывается), BX, DX, CX, AX · PUSHF (операндов не имеет) Копирует в стек регистр флагов · POPF (операндов не имеет) Восстанавливает регистр флагов из стека ИТОГИ РАЗДЕЛА 1. Команды пересылки – самые многочисленные в ассемблере («Ассемблер – это наука про команду MOV» А.Х.Пеэтвере) 2. Команды «пересылки» данных - это команды копирования (источник данных не разрушается). 3. Ограничения на операнды и особенности исполнения команд пересылок данных происходят, в основном, из-за особенностей доступа элементов компьютера к шине данных и шине адреса. 4. Некоторые команды пересылки очень специализированы (PUSH, POP, XLAT), а некоторые выглядят парадоксально (XCHG).
Раздел 08. АРИФМЕТИЧЕСКИЕ КОМАНДЫ ПЛАН РАЗДЕЛА Команды сложения двоичных чисел. Команды вычитания двоичных чисел. Команды беззнакового и знакового умножения двоичных чисел. Команды беззнакового и знакового деления двоичных чисел. Команда смены знака числа NEG. Команды знакового расширения целых чисел. CMP – команда сравнения чисел. КЛАССИФИКАЦИЯ ЦЕЛОЧИСЛЕННЫХ АРИФМЕТИЧЕСКИХ КОМАНД
КОМАНДЫ СЛОЖЕНИЯ ДВОИЧНЫХ ЧИСЕЛ inc операнд — операция инкремента, то есть увеличения значения операнда на 1; Пример: INC SI add операнд_1,операнд_2 — команда сложения с принципом действия: Пример: ADD DX, 7 ADC операнд_1,операнд_2 — команда сложения с учетом флага переноса C F. Принцип действия команды: Пример: ADC DX, 0; фактически это DX = DX + CF ПРИМЕР НА СЛОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ Сложить два байта (AL и ячейку памяти) и результат поместить в АХ, поскольку сумма может оказаться шире 8 бит. .model small .code;сегмент кода ; G = 1111 1110 b ADD AL, G; AX = 0000 0000 0000 1111 b; флаг CF = 1 mov ax, 4c00h;стандартный выход
КОМАНДЫ ВЫЧИТАНИЯ ДВОИЧНЫХ ЧИСЕЛ DEC операнд — операция декремента, Пример: DEC DI SUB операнд_1,операнд_2 — команда вычитания; ее принцип действия: Пример: SUB AX, BX SBB оп_1,оп_2 — команда вычитания (! ЗАПОМНИТЬ!) Если при этом БЫЛ ЗАЁМ, то Пример: SBB DX, AX УМНОЖЕНИЕ ЧИСЕЛ БЕЗ ЗНАКА MUL сомножитель_1 Один операнд-сомножитель. Второй операнд (сомножитель_2) задан неявно.
ПРИМЕР НА УМНОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ Умножить два байта (AL и ячейку памяти), а старшую и младшую части произведения поместить раздельно в две однобайтовых переменных. .model small .stack 256 .data;сегмент данных REZ_L db 45 REZ_H db 0 .code;сегмент кода main:;точка входа в программу ... xor ax,ax mov al,25
mul REZ_L jnc m1;если нет переполнения (CF=0), то на m1 mov rez_h,ah;старшую часть результата в rez_h m1: mov rez_l,al exit: mov ax,4c00h;стандартный выход int 21h end main;конец программы
УМНОЖЕНИЕ ЧИСЕЛ СО ЗНАКОМ IMUL оп_1 [, оп_2 [, оп_3] ]
ДЕЛЕНИЕ ЧИСЕЛ БЕЗ ЗНАКА div делитель Один операнд - делитель (reg | mem). Второй операнд (Делимое) задано неявно.
Возможна исключительная ситуация: «деление на 0». Она возникает либо когда делитель равен 0, либо когда частное СЛИШКОМ ВЕЛИКО для его размещения в регистре AX | AL.
ДЕЛЕНИЕ ЧИСЕЛ СО ЗНАКОМ Справедливо ВСЁ, что относится к БЕЗзнаковому делению командой DIV. Разница в том, что операнды деления и ЧАСТНОЕ рассматриваются как ЗНАКОВЫЕ числа. ПРИМЕР … D5 db -5 … Mov AX, 128 IDIV D5; 128 / (-5) = остаток 3 и частное (-25) … После этой команды AX = 0000 0011 1110 0111. 0000 0011 = 3, а 1110 0111 = -25 в дополнительном коде
СМЕНА ЗНАКА: NEG источник Выполнить вычитание (0 – источник) и поместить результат на место источника; Если источник=0, то его значение не меняется. ПРИМЕР: MOV AL, 2 NEG AL; AL = 0FEh, это - 2 в дополнительном коде. Не путайте эту команду с NOT операнд, которая ИНВЕРТИРУЕТ операнд, то есть меняет биты 0 на 1 КОМАНДЫ ЗНАКОВОГО РАСШИРЕНИЯ CBW (Convert Byte to Word) Берёт число в AL (ширина 8 бит) и заполняет биты AH копиями знакового бита AL. Получается число шириной 16 бит, такое же по величине и знаку как было в AL! Пример 1: До выполнения команды ; АХ = 1001 1001 0111 1010 (AL = 122) CBW;; АХ = 0000 0000 0111 1010 (AX = 122) Пример 2: До выполнения команды ; АХ = 1001 1001 1111 1010 (AL = -6) CBW;; АХ = 1111 1111 1111 1010 (AX = -6) CWD (Сonvert Word to Doubleword) Берёт число в AX (ширина 16 бит) и заполняет биты DX копиями знакового бита AX. Получается число в DX:AX шириной 32 бита, такое же по величине и знаку как было в AХ! Примеры: 1) До выполнения команды: DX = неважно какой, АХ = 0001 1001 0111 1010 Выполняется CWD. Стало: DX = 0000 0000 0000 0000, АХ = 0001 1001 0111 1010 До выполнения команды:
DX = неважно какой, АХ = 1101 1001 0111 1010 Выполняется CWD. Стало: DX = 1111 1111 1111 1111, АХ = 1101 1001 0111 1010
КОМАНДА СРАВНЕНИЯ CMP (СoMPare = сравнить) CMP оп1,оп2 Работает так: А) выполнить вычитание (оп1-оп2); Б) в зависимости от результата установить флаги, Состояние флагов после выполнения команды:
(«R» означает, что значение флага определяется результатом операции) ИТОГИ РАЗДЕЛА 1. Мы рассмотрели арифметические команды, которые работают ТОЛЬКО с ДВОИЧНЫМИ ЦЕЛЫМИ числами. 2. По двоичной записи числа невозможно отличить знаковое число от беззнакового. Поэтому выбор логики выполнения арифметической операции над числами (знаковая или беззнаковая) возлагается на программиста. Для этого в системе команд процессора предусмотрены РАЗНЫЕ команды умножения и деления для знаковых и беззнаковых чисел.
Раздел 09. СРЕДСТВА ПОБИТОВОЙ ОБРАБОТКИ ДАННЫХ ПЛАН РАЗДЕЛА 1. КЛАССИФИКАЦИЯ КОМАНД ПОБИТОВОЙ ОБРАБОТКИ.
Дата добавления: 2014-01-07; Просмотров: 367; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |