Скачать презентацию Команды пересылки и арифметические команды Лекция 4 Скачать презентацию Команды пересылки и арифметические команды Лекция 4

4. Команды пересылки и арифметические команды.ppt

  • Количество слайдов: 63

Команды пересылки и арифметические команды Лекция 4 Команды пересылки и арифметические команды Лекция 4

План лекции Команды пересылки данных n Косвенная адресация памяти n Команды работы со стеком План лекции Команды пересылки данных n Косвенная адресация памяти n Команды работы со стеком n Команды сложения n Команды вычитания n Команды умножения n Команды деления n Команды распространения знака n

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

Команды пересылки данных n Команда MOV: MOV Приемник, Источник n Приемник = Источник Команды пересылки данных n Команда MOV: MOV Приемник, Источник n Приемник = Источник

Команды пересылки данных Приемник – регистр или переменная n Источник – регистр, переменная или Команды пересылки данных Приемник – регистр или переменная n Источник – регистр, переменная или константа n Переменная в Ассемблере – это адрес ячейки памяти n Невозможно переслать данные напрямую из переменной в переменную (только через регистры) n

Команды пересылки данных Длина операндов должна быть одинаковая n Если длина разная, используется директива Команды пересылки данных Длина операндов должна быть одинаковая n Если длина разная, используется директива PTR: n ¨ BYTE PTR a – переменная а рассматривается как однобайтовая ¨ WORD PTR a+2 – содержимое ячейки памяти по адресу а+2 рассматривается как двухбайтовая величина

Команды пересылки данных n Команда XCHG: XCHG Приемник, Источник Приемник, источник – регистр или Команды пересылки данных n Команда XCHG: XCHG Приемник, Источник Приемник, источник – регистр или переменная n Две переменных быть не могут n

Команды пересылки данных n Команда LEA – загружает в регистр адрес ячейки памяти: LEA Команды пересылки данных n Команда LEA – загружает в регистр адрес ячейки памяти: LEA Приемник, Источник Load Effective Address n Приемник – регистр (16 или 32 -разрядный) n Источник – переменная n

Команды пересылки данных n a Пример: DW LEA 1000 EAX, a Команды пересылки данных n a Пример: DW LEA 1000 EAX, a

Косвенная адресация памяти Косвенная адресация памяти

Косвенная адресация памяти n a Примеры 1 и 2: DD LEA MOV 100 EBX, Косвенная адресация памяти n a Примеры 1 и 2: DD LEA MOV 100 EBX, a EAX, [EBX]

Косвенная адресация памяти Косвенная адресация памяти

Косвенная адресация памяти Косвенная адресация памяти

Косвенная адресация памяти n Пример: MOV BYTE PTR [EBX], 100 WORD PTR [EBX], 100 Косвенная адресация памяти n Пример: MOV BYTE PTR [EBX], 100 WORD PTR [EBX], 100

Косвенная адресация памяти Косвенная адресация памяти

Косвенная адресация памяти Косвенная адресация памяти

Команды работы со стеком Команды работы со стеком

Команды работы со стеком PUSH – сохранить информацию в стеке n POP – извлечь Команды работы со стеком PUSH – сохранить информацию в стеке n POP – извлечь информацию из стека n PUSHAD – помещает в стек все основные регистры процессора: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI n POPAD – извлекает указанные регистры из стека в обратном порядке n

Команды работы со стеком n ESP – указатель стека, изменяется в сторону младших адресов Команды работы со стеком n ESP – указатель стека, изменяется в сторону младших адресов

Команды работы со стеком n Примеры 3 и 4: Команды работы со стеком n Примеры 3 и 4:

Команды работы со стеком a DD ? b DW ? d DD ? PUSH Команды работы со стеком a DD ? b DW ? d DD ? PUSH POP PUSH MOV POP EAX // поместить в стек 4 байта a AX // поместить в стек 2 байта b 100 h EAX, [ESP] // прямой доступ к стеку d, EAX

Команды работы со стеком n Необходимо следить за последовательностью операций со стеком, чтобы избежать Команды работы со стеком n Необходимо следить за последовательностью операций со стеком, чтобы избежать ошибок: PUSH. . . POP AX EAX

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

Команды сложения складывают в двоичной системе сложения n Командам безразлично, знаковые это числа или Команды сложения складывают в двоичной системе сложения n Командам безразлично, знаковые это числа или нет n

Команды сложения В результате команд устанавливаются следующие флаги: n CF = 1 – бит Команды сложения В результате команд устанавливаются следующие флаги: n CF = 1 – бит переноса есть n PF = 1 – четное число единиц n SF = 1 – старший (знаковый) бит = 1 n ZF = 1 – результат равен нулю n OF = 1 – переполнение имеет место

Команды сложения n Переполнение имеет место, если знаки операндов одинаковы, а знак результата не Команды сложения n Переполнение имеет место, если знаки операндов одинаковы, а знак результата не совпадает со знаком операндов

Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон?

Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? n (+5) + (– Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? n (+5) + (– 5) = ?

Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? n (+5) + (– Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? n (+5) + (– 5) = ? n (+5) + (+4) = ?

Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? n (+5) + (– Команды сложения Примеры сложения: n 4‑разрядные знаковые числа n Диапазон? n (+5) + (– 5) = ? n (+5) + (+4) = ? n (– 5) + (– 4) = ?

Команды сложения n Команда ADD (Addition) ADD Приемник, Источник ¨ Приемник = Приемник + Команды сложения n Команда ADD (Addition) ADD Приемник, Источник ¨ Приемник = Приемник + Источник ¨ Приемник – регистр, переменная ¨ Источник – регистр, переменная, константа ¨ Невозможно чтобы оба операнда были переменными

Команды сложения a b d DW DW DW MOV ADD MOV 100 ? AX, Команды сложения a b d DW DW DW MOV ADD MOV 100 ? AX, a BX, b AX, BX d, AX

Команды сложения n Необходимо следить, чтобы результат попадал в диапазон типа! ¨ контроль слагаемых Команды сложения n Необходимо следить, чтобы результат попадал в диапазон типа! ¨ контроль слагаемых ¨ контроль флага переполнения OF

Команды сложения n Команда ADC ADС Приемник, Источник ¨ Addition with Carry flag ¨ Команды сложения n Команда ADC ADС Приемник, Источник ¨ Addition with Carry flag ¨ Приемник = Приемник + Источник + CF ¨ Используется для сложения чисел большой разрядности

Команды сложения n Пример. Сложить два 16 -разрядных числа с использованием 8 -разрядных регистров Команды сложения n Пример. Сложить два 16 -разрядных числа с использованием 8 -разрядных регистров = число 1 = число 2 AL = AL + BL AH = AH + BH + CF

Команды сложения a DW b DW MOV MOV ADD ADC 1000 2000 AL, BYTE Команды сложения a DW b DW MOV MOV ADD ADC 1000 2000 AL, BYTE PTR a AH, BYTE PTR a + 1 BL, BYTE PTR b BH, BYTE PTR b + 1 AL, BL AH, BH

Команды сложения n Команда INC Операнд ¨ Increment ¨ Операнд = Операнд + 1 Команды сложения n Команда INC Операнд ¨ Increment ¨ Операнд = Операнд + 1 ¨ Операнд – регистр или переменная

Команды вычитания n Команда SUB Приемник, Источник ¨ Subtract – вычитание ¨ Приемник = Команды вычитания n Команда SUB Приемник, Источник ¨ Subtract – вычитание ¨ Приемник = Приемник – Источник

Команды вычитания n Команда SBB Приемник, Источник ¨ Subtract with Borrow CF ¨ Приемник Команды вычитания n Команда SBB Приемник, Источник ¨ Subtract with Borrow CF ¨ Приемник = Приемник – Источник – CF

Команды вычитания n Команда DEC Операнд ¨ Decrement ¨ Операнд = Операнд – 1 Команды вычитания n Команда DEC Операнд ¨ Decrement ¨ Операнд = Операнд – 1

Команда сравнения n Команда CMP (Compare) CMP Приемник, Источник ¨ Приемник – Источник ¨ Команда сравнения n Команда CMP (Compare) CMP Приемник, Источник ¨ Приемник – Источник ¨ Команда не изменяет приемник, но при выполнении команды флаги меняются ¨ Используется в командах условного перехода

Команда изменения знака n Команда NEG Приемник ¨ Negative – изменение знака ¨ Приемник Команда изменения знака n Команда NEG Приемник ¨ Negative – изменение знака ¨ Приемник = –Приемник ¨ Приемник – регистр или переменная

Команды умножения n Команда MUL Операнд ¨ Умножение – Multiply ¨ беззнаковое умножение Команды умножения n Команда MUL Операнд ¨ Умножение – Multiply ¨ беззнаковое умножение

Команды умножения 1) Если операнд однобайтовый AX : = AL * Операнд 2) Если Команды умножения 1) Если операнд однобайтовый AX : = AL * Операнд 2) Если операнд двухбайтовый : = AX * Операнд 3) Если операнд четырехбайтовый : = EAX * Операнд

Команды умножения n Может ли быть переполнение, как при сложении? Команды умножения n Может ли быть переполнение, как при сложении?

Команды умножения Длина произведения всегда в два раза больше длины множителей! n Если произведение Команды умножения Длина произведения всегда в два раза больше длины множителей! n Если произведение помещается в размер множителей (например EDX=0), то CF = OF = 0 Иначе, CF = OF = 1 n Остальные флаги не определены n

Команды умножения n Команда IMUL (1) IMUL Операнд ¨ Integer multiply ¨ Знаковое умножение Команды умножения n Команда IMUL (1) IMUL Операнд ¨ Integer multiply ¨ Знаковое умножение ¨ Формат совпадает с MUL

Команды умножения n Команда IMUL (2) IMUL Операнд 1, Операнд 2 ¨ Операнд 1 Команды умножения n Команда IMUL (2) IMUL Операнд 1, Операнд 2 ¨ Операнд 1 = Операнд 1 * Операнд 2 ¨ Операнд 1 – регистр (16 или 32 -разрядный) ¨ Операнд 2 – регистр, переменная, константа ¨ Длина второго операнда (кроме констант) должна совпадать с длиной первого

Команды умножения n Команда IMUL (3) IMUL Операнд 1, Операнд 2, Операнд 3 ¨ Команды умножения n Команда IMUL (3) IMUL Операнд 1, Операнд 2, Операнд 3 ¨ Операнд 1 = Операнд 2 * Операнд 3 ¨ Операнд 1 – регистр (16 или 32 -разрядный) ¨ Операнд 2 – регистр или переменная ¨ Операнд 3 – константа ¨ Размер всех операндов должен быть одинаков

Команды умножения n Использовать двух- и трехадресную формы можно только в том случае, если Команды умножения n Использовать двух- и трехадресную формы можно только в том случае, если результат точно помещается в операнд-приемник!

Команды умножения n Пример умножения: проект MUL Команды умножения n Пример умножения: проект MUL

Команды деления n Команда DIV: DIV Делитель ¨ Беззнаковое деление ¨ Операнд – регистр Команды деления n Команда DIV: DIV Делитель ¨ Беззнаковое деление ¨ Операнд – регистр или переменная ¨ Константы не допускаются!

Команды деления n Команда IDIV: IDIV Делитель ¨ Знаковое деление ¨ Операнд – регистр Команды деления n Команда IDIV: IDIV Делитель ¨ Знаковое деление ¨ Операнд – регистр или переменная ¨ Константы не допускаются!

Команды деления n Таблица операндов для команд деления Команды деления n Таблица операндов для команд деления

Команды деления n Устанавливаются флаги CF = OF = 1, если: ¨ происходит деление Команды деления n Устанавливаются флаги CF = OF = 1, если: ¨ происходит деление на ноль ¨ частное не помещается в отведенный для него регистр n В обоих случаях вырабатывается прерывание «Деление на ноль» и выполнение программы останавливается

Команды деления a WORD ? b DWORD ? rez WORD ? ost WORD ? Команды деления a WORD ? b DWORD ? rez WORD ? ost WORD ? div_16 PROC MOV AX, WORD PTR b MOV DX, WORD PTR b+2 DIV a MOV rez, AX MOV ost, DX RET div_16 ENDP

Команды распространения знака n a b Пример: правильно? DW ? MOV AX, a MOV Команды распространения знака n a b Пример: правильно? DW ? MOV AX, a MOV CX, 10 DIV CX MOV b, AX

Команды распространения знака n Делимое не подготовлено к делению! Команды распространения знака n Делимое не подготовлено к делению!

Команды распространения знака n При делении беззнаковых чисел нужно в старшую часть делимого занести Команды распространения знака n При делении беззнаковых чисел нужно в старшую часть делимого занести ноль: MOV DX, 0 или лучше: XOR DX, DX

Команды распространения знака n n n При делении знаковых чисел следует распространить знак Команды Команды распространения знака n n n При делении знаковых чисел следует распространить знак Команды распространения знака копируют знаковый бит в старшую часть операнда Если знаковый бит равен нулю, то старшая часть заполняется нулями, если знаковый бит равен единице, то старшая часть заполняется единицами

Команды распространения знака n CBW (Convert Byte To Word): AL → AX n CWD Команды распространения знака n CBW (Convert Byte To Word): AL → AX n CWD (Convert Word To Double word): AX →

Команды распространения знака n CDQ (Convert Double word To Quad Word): EAX → <EDX: Команды распространения знака n CDQ (Convert Double word To Quad Word): EAX → n CWDE (Convert Word To Double word Expand): AX → EAX

Команды распространения знака Пример: (+51): Byte → Word (CBW) : n 0011 → 0000 Команды распространения знака Пример: (+51): Byte → Word (CBW) : n 0011 → 0000 0011 (– 51): Byte → Word (CBW) : 1100 1101 → 1111 1100 1101