Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР№3.doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
49.15 Кб
Скачать

Лабораторная работа №3 использование арифметических команд. Ввод операндов с клавиатуры и вывод результата на экран Теоретические сведения

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

Используются для выполнения арифметических операций над целыми двоичными числами со знаком и без знака, над двоично-десятичными числами в упакованном и распакованном форматах. Знаковые двоичные числа могут занимать байт или слово и находиться в диапазоне –128…127 и –32768…32767 соответственно. Беззнаковые двоичные числа могут принимать значения из диапазона 0…255 (байты) 0…65535 (слова).

Команды обработки десятичных чисел нами рассматриваться не будут.

В результаты выполнения большинства арифметических команд устанавливаются флаги. Например, флаг ZF устанавливается в 1, если результат операции нулевой. Флаг CF устанавливается в 1, если при сложении чисел без знака возник перенос единицы за пределы старшего бита результата или при заимствовании единицы при нахождении разности чисел. Флаг OF устанавливается в 1, если при выполнении арифметической операции возникает переполнение, то есть результат выходит за пределы диапазона. Флаг PF устанавливается в 1, если младшие 8 бит результата содержат четное количество двоичных единиц. Флаг SF устанавливается в 1, если результат отрицательный.

Команды сложения.

1) add приемник, источник – команда сложения

Источник складывается и приемником, результат помещается в приемник.

mov ax,5

add ax,10 ;в результате ax=15

2) adc приемник, источник – команда сложения с переносом

Источник складывается и приемником и со значением флага CF, результат помещается в приемник.

Данная команда используется для сложения больших чисел, располагающихся в нескольких ячейках. Такие числа складываются с помощью нескольких команд сложения, начиная с младшей части с помощью команды ADD, а остальные с помощью команды ADC.

3) inc операнд – инкрементирование, то есть увеличение на 1

Значение операнда увеличивается на 1. В отличие от команд ADD и ADC, флаг СF не устанавливается.

mov сx,5

inc cx ;в результате cx=6

Команды вычитания.

1) SUB приемник, источник – команда вычитания

Из приемника вычитается источник, результат помещается в приемник.

mov ax,15

sub ax,10 ;в результате ax=5

2) SBB приемник, источник – команда вычитания с переносом

Из приемника вычитается источник и значение флага CF, результат помещается в приемник

Данная команда используется для вычитания больших чисел, аналогично сложению с переносом.

3) DEc операнд – декрементирование, то есть уменьшение на 1

Значение операнда уменьшается на 1. Флаг СF не изменяется.

mov сx,5

dec cx ;в результате cx=4

4) NEG приемник – число, противоположное приемнику, записывается в приемник

При выполнении сложения и вычитания ассемблер не различает числа со знаком и без знака. Он просто складывает соответствующие разряды чисел и, при необходимости, значение флага CF. Знаковая интерпретация является прерогативой программиста.

Команды умножения

1) MUL операнд – умножение чисел без знака

Второй операнд подразумевается по умолчанию. Правила умножения:

  • если операнд – байт, то операнд из команды умножается на значение, находящееся в регистре AL, а результат помещается в AX;

  • если операнд – слово, то операнд из команды умножается на значение, находящееся в регистре AХ, старшее слово результата помещается в DX, а младшее – в АХ;

  • в качестве операнда не может быть задано непосредственное значение, а только регистр или ячейка памяти.

Значения флагов CF и OF равны 0, если результат умножения получился маленький, то есть той же длины, что и сомножители. Иначе эти флаги устанавливаются в 1.

a dw 5

b dw 6

...

mov ax, a

mul b ;в результате ах=30

2) IMUL операнд – умножение чисел со знаком

Команды деления

1) DIV операнд – деление чисел без знака

Операнд в команде – это делитель. Делимое задается неявно по умолчанию, аналогично умножению. Правила деления:

  • если операнд – байт, то значение, находящееся в регистре AХ, делится на операнд, результат помещается в AL, а остаток – в AH;

  • если операнд – слово, то значение, находящееся в регистрах DX:AХ делится на операнд, результат помещается в AX, а остаток – в DX;

  • в качестве операнда не может быть задано непосредственное значение, а только регистр или ячейка памяти.

a db 50

b db 10

...

mov ah, 0

mov al, a

div b ;в результате аl=5, ah=0

При делении на 0 либо если частное превышает возможный размер (не помещается в отведенное для него место), возникает ошибка «Деление на 0» («Zero divide») и аварийное завершение программы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]