- •Организация памяти.
- •Прграммная модель мп.
- •Ввод - вывод.
- •Внутренние операции мп.
- •Организация обмена с ву.
- •Прерывания.
- •Система команд и режимы адресации мп.
- •Программирование мп.
- •Команды передачи данных.
- •Команды арифметических операций.
- •Команды логических операций и сдвигов.
- •Команды передачи управления.
- •Команды управления мп.
- •Примеры программ.
- •Директивы.
- •Структура ассемблерной программы.
- •Пример оформления программы.
- •2. Порядок выполнения работы.
- •3.Варианты заданий:
- •Контрольные вопросы.
- •5 Содержание отчета.
- •6 Список литературы.
Команды арифметических операций.
Арифметические операции выполняются над целыми числами четырех типов: знаковыми и беззнаковыми двоичными, упакованными и неупакованными десятичными. Ограничимся рассмотрением операций с двоичными числами.
Числа занимают 1 или 2 байта, в беззнаковых все разряды значащие, в знаковых старший разряд определяет знак числа 0 - положительное, 1 - отрицательное. Знаковые числа хранятся в дополнительном коде. Диапазон значений -128 +127 для байтовых и -32768 +32767 для двухбайтовых. Признаки (особенности) результата арифметических операций записываются в регистр флагов.
СЛОЖЕНИЯ.
ADD dst, src ; dst := (dst) + (src) Команда складывает содержимое источника и приемника и помещает результат в приемник. Например:
Используется индексная
адресация. Перед выполнением операции
должны быть определены аргументы -
первый аргумент в регистре AX,
второй в ячейке с адресом (DS)
* 16 + (DI)
+ 8. Результат в AX.
Складываются два отрицательных числа.
Результат больше 2 байт. Устанавливаются
флаги переноса CF
= 1 и отрицательного результата SF
= 1
(AX) = FFF0
(DI) = 3000
(DS) = 1000
(13008) = 1000
AX = 0FF0.
ADD CX, 123h Непосредственная адресация. Складывается число и содержимое
(CX)= 123h регистра CX. Результат в CX.
(CX) = 246h, все флаги =0
ADС dst, src ; dst := (dst) + (src) + (CF) Сложение с переносом. К младшему биту результата сложения прибавляется значение флага переноса CF. Например:
Индексная адресация.
Складывается содержимое ячейки с
адресом (DS)
* 16 + (DI),
регистра AX
и флага CF.
Результат в ячейку памяти. (123000)
= 5h,
все флаги нулевые.
(AX) = 2h
(DI) = 0300
(DS) = 1200
(12300) = 2h
(CF) = 1
INC dst ;dst := dts + 1 Увеличивает содержимое регистра или ячейки памяти на 1. Команда не изменяет флаг CF. Например:
INC SI
(SI) = FFFF
(SI) = 0, CF = 0.
ВЫЧИТАНИЯ.
Аналогичны сложению, только операция другая. Флаги переноса становятся флагами заема и устанавливаются в 1 когда уменьшаемое меньше вычитаемого.
SUB dst, src ; dst := (dst) - (src) Команда вычитает содержимое источника из приемника и помещает результат в приемник. Например:
Базовая адресация. Из
содержимого регистра CL
вычитается содержимое ячейки с адресом
(SS)
* 16 + (BP)
+ 8. Т. к. используется регистр BP
обращение происходит к сегменту стека.
Результат записывается в CL.
Результат положительный, значит SF
= 0 и не было заема, значит CF
= 0.
(CL) = 30h
(BP) = FFFE
(SS) = 1000
(20006) = 20h
(CL) = 10h
SBB dst, src ; dst := (dst) - (src) - (CF) Команда вычитания с заемом. Из разности вычитает еще значение флага CF. Например:
Базовая адресация, но
через регистр BX.
Значит обращение будет происходить к
ячейке в сегменте данных с адресом
(DS)
* 16 + (BX)
+ 40.
(BX) = 2000h
(DS) = 1000h
(21000) = 2000h
(CF) = 1
(2100) = CAAA, CF = 1 (уменьшаемое меньше вычитаемого) и SF = 1 (отрицательный результат)
DEC dst ;dst := dts - 1 Уменьшает содержимое регистра или ячейки памяти на 1. Команда не изменяет флаг CF. Например:
DEC AL
(AL) = 10h
(AL) = F СРАВНЕНИЯ
CMP dst
Похожа на команды вычитания, но изменяет только состояния флагов, а результат нигде не запоминается. Например:
CMP DX, [SI + 10]
(DX) = 5h
(DS) = 2000
(SI) = 8000
(28010) = 28h
(DX) = 5h, (28010) = 28h, устанавливаются флаги SF(знак) = 1 и CF(перенос) =1.
УМНОЖЕНИЯ
Имеются две команды умножения: для знаковых и беззнаковых чисел.
MUL src ; ac := (ac) * (src) Беззнаковое умножение адресуемого операнда и содержимого регистра AX (AL при операциях над байтами). Произведение длиной 4 байта хранится в регистрах DX - AX (или в паре AH -AL при операциях над байтами). Флаги OF (переполнение) и CF(перенос) устанавливаются в 1 если старшая половина произведения (регистр DX) ненулевая. Остальные флажки не определены. Например:
MUL AX ;Регистровая адресация. Возводим в квадрат содержимое AX
(AX) = 1000h
(AX) = 0h, (DX) = 100h, Флаги CF = 1, OF = 1.
MUL DL ;Умножаем байт из регистра DL на байт в регистре AL. Содержимое AH
(DL) = 20 игнорируется, т. к. работаем с байтами.
(AX) = A510
(AX) = 200, или тоже самое (AH) = 02h, (AL) = 00h. Флаги CF = 1, OF = 1 т. к. старший байт произведения не нулевой.
IMUL src ; работает со знаковыми числами
ДЕЛЕНИЯ
Их тоже две, знаковая и беззнаковая.
DIV src ;Деление пары DX - AX (или AH - AL для операций над байтами) на содержимое адресуемого операнда. Частное записывается в регистр AX (AL) , остаток в DX (AH). Состояние всех флажков не определено. Если частное превышает разрядность регистра или происходит деление на ноль, генерируется внутренне прерывание типа 0. Например:
DIV CL ;Деление слова в AX на байт в CL
(AX) = 002Dh
(CL) = 06h
(AX) = 0307h Результат деления в (AL) = 07h, остаток в (AH) = 03h