- •I. Основные функциональные регистры: регистры общего назначения, указатель команд, регистр флагов, регистр сегментов
- •Регистры состояния и управления
- •II. Опции транслятора tasm и редактора связей tlink
- •III. Типы данных
- •IV. Директивы управления листингом
- •V. Структура программы на ассемблере
- •VI. Изучение форматов команд
- •Пересылка операнда
- •Add (сложение)
- •Вычитание
- •Увеличить операнд на 1
- •Уменьшение операнда на единицу
- •Умножение целочисленное без учета знака
- •Деление беззнаковое
- •And (Логическое и)
- •Логическое включающее или
- •Инвертирование операнда
- •Логическое исключающее или ascii-коррекция после сложения
- •Размещение операнда в стеке
- •Извлечение операнда из стека
- •Команды организации циклов
- •Управление циклом по cx
- •VII Макросредства языка ассемблера
Деление беззнаковое
Схема команды: div делитель
Назначение: выполнение операции деления двух двоичных беззнаковых значений.
Алгоритм работы: Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде:
если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;
если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;
если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.
Применение: Команда выполняет целочисленное деление операндов с выдачей результата деления в виде частного и остатка от деления. При выполнении операции деления возможно возникновение исключительной ситуации: 0 — ошибка деления. Эта ситуация возникает в одном из двух случаев: делитель равен 0 или частное слишком велико для его размещения в регистре eax/ax/al.
mov ax,10234 mov bl,154 div bl ;ah=остаток, al=частное
|
Результатом команды деления являются значения частного и остатка. Варианты местоположения и размеров операндов операции деления показаны в табл. 2.
Таблица 2. Расположение операндов и результата при делении
Делимое |
Делитель |
Частное |
Остаток |
16 бит в регистре ax |
8 бит регистр или ячейка памяти |
Байт в регистре al |
Байт в регистре ah |
32 бит dx — старшая часть ax — младшая часть |
Слово 16 бит регистр или ячейка памяти |
Слово 16 бит в регистре ax |
Слово 16 бит в регистре dx |
64 бит edx — старшая часть eax — младшая часть |
Двойное слово 32 бит регистр или ячейка памяти |
Двойное слово 32 бит в регистре eax |
Двойное слово 32 бит в регистре edx |
Для деления чисел со знаком предназначена команда idiv (integer divide).
idiv <делитель>
Для этой команды справедливы все рассмотренные положения, касающиеся команд и чисел со знаком.
Команды логических операций
And (Логическое и)
Схема команды: and приемник,источник
Назначение: операция логического умножения для операндов приемник и источник размерностью байт, слово или двойное слово.
Алгоритм работы:
выполнить операцию логического умножения над операндами источник и приемник: каждый бит результата равен 1, если соответствующие биты операндов равны 1, в остальных случаях бит результата равен 0;
записать результат операции в приемник;
установить флаги.
Применение: Команда and используется для логического умножения двух операндов. Результат операции помещается по адресу первого операнда. Эту команду удобно использовать для принудительной установки или сброса определенных битов операнда. Например, преобразуем двузначное упакованное BCD-число в его символьный эквивалент.
u_BCD db 25h ;упакованное BCD-число s_ch dw 0 ;место для результата ... xor ax,ax ;очистка ax mov al,u_BCD shl ax,4 ;ax=0250 mov al,u_BCD ;ax=0225 ;преобразование в символьное представление: and ax,3f3fh ;ax=3235h mov s_ch,ax
|
OR (logical OR)
