Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр_1_ЭВМ и ПУ.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
238.08 Кб
Скачать

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

По форме вычитание в языке ассемблера аналогично сложению. Команда sub вычитает значения байтов или слов. Команда sbb делает тоже самое, но учитывает возможный заем при предыдущем вычитании многобайтовых или многословных значений: sub cx, bx ; axax-bx

Если размеры операндов превышают 16 битов, то используют следующую последовательность команд: sub ax, bx ; вычесть младшие 16 битов, ax=ax-bx

sbb dx, cx ; вычесть старшие 16 битов, dx=dx-cx-cf

Допускается вычитать два регистра или регистр и значение, записанное в памяти. Допускается вычитать непосредственные значения: sub ax, 1 ;axax-1

Хотя уменьшение на единицу рациональнее заменить быстрой командой dec, которая вычитает 1 из регистра или значения в памяти. Допускается уменьшать на 1 значения, представленные байтом или словом: dec [balance] ;[balance][balance]-1.

Команда aas преобразует содержимое регистра AL в правильную неупакованную десятичную цифру в младших четырех битах регистра AL и заполняет нулями старшие четыре бита. Она используется в контексте: sub al, bl ;вычесть неупакованные числа, alal-bl

aas ;преобразовать результат в неупакованное число

Если результат превышает 9, то команда aas вычитает 1 из содержимого регистра AH и устанавливает флаг CF в 1, в противном случае CF обнуляется. Остальные флаги считаются уничтоженными(AF, PF, ZF, SF, OF).

Команда DAS преобразует содержимое регистра AL в две правильные упакованные десятичные цифры. Она используется в контексте:

sub al, bl ;вычесть упакованное число bl из al

das ;преобразовать результат в упакованное число

Если результат превышает предельное значение для упакованных десятичных чисел (99), то команда das вычитает 1 из содержимого регистра al в две правильные десятичные цифры. Она используется в следующем контексте:

sub al, bl ;вычесть упакованные числа

das ;преобразовать результат в упакованное число

Если результат превышает предельное значение для упакованных чисел (99), то команда das вычитает 1 из содержимого регистра ah и устанавливает флаг CF в 1; в противном случае она его обнуляет. Остальные флаги считают уничтоженными.

Программа 2.1 представляет работу четырех команд—add, sub, inc и dec. Выполнить ассемблирование, компоновку и запуск программы под управлением Turbo Debuger, можно при помощи следующих команд:

Программа 2.1. ADDSUB.ASM

%TITLE «Использование команд add, sub, inc, dec»

IDEAL

MODEL small

STACK 256

DATASEG

exCode

DB

0

cout

DW

1

CODESEG

Start:

mov

ax, @data

; Установка в DS адреса

mov

ds, ax

;сегмента данных

mov

ax, 4

mov

bx, 2

add

ax, bx

; axax+bx

mov

cx, 8

add

cx, [count]

; [count]cx+[count]

inc

[count]

; [count] [count]+1

dec

[count]

; [count][count]-1

inc

ax

; axax+1

dec

cx

; cxcx-1

Exit:

mov

ah, 04Ch

;Ф-ция DOS/ Выход из программы

mov

al, [exCode]

;Возврат значения кода ошибки

int

21h

;Вызов DOS. Останов программы

END

Start

;Конец программы/точка выхода