- •Лабораторная работа №1. Использование арифметических и логических команд процессора при составлении программ на языке ассемблера
- •2.1.2 Команды вычитания
- •2.1.3 Использование команд neg и cmp
- •2.1.4 Умножение и деление беззнаковых чисел
- •Программа 2.2. Muldiv.Asm
- •2.1.5 Умножение и деление знаковых значений
- •2.2 Логические команды процессора
- •2.2.1 Логические операторы
- •2.2.2 Сдвиги битов
2.1.2 Команды вычитания
По форме вычитание в языке ассемблера аналогично сложению. Команда sub вычитает значения байтов или слов. Команда sbb делает тоже самое, но учитывает возможный заем при предыдущем вычитании многобайтовых или многословных значений: sub cx, bx ; axax-bx
Если размеры операндов превышают 16 битов, то используют следующую последовательность команд: sub ax, bx ; вычесть младшие 16 битов, ax=ax-bx
sbb dx, cx ; вычесть старшие 16 битов, dx=dx-cx-cf
Допускается вычитать два регистра или регистр и значение, записанное в памяти. Допускается вычитать непосредственные значения: sub ax, 1 ;axax-1
Хотя уменьшение на единицу рациональнее заменить быстрой командой dec, которая вычитает 1 из регистра или значения в памяти. Допускается уменьшать на 1 значения, представленные байтом или словом: dec [balance] ;[balance][balance]-1.
Команда aas преобразует содержимое регистра AL в правильную неупакованную десятичную цифру в младших четырех битах регистра AL и заполняет нулями старшие четыре бита. Она используется в контексте: sub al, bl ;вычесть неупакованные числа, alal-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
; axax+bx
mov
cx, 8
add
cx, [count]
; [count]cx+[count]
inc
[count]
; [count] [count]+1
dec
[count]
; [count][count]-1
inc
ax
; axax+1
dec
cx
; cxcx-1
Exit:
mov
ah, 04Ch
;Ф-ция DOS/ Выход из программы
mov
al, [exCode]
;Возврат значения кода ошибки
int
21h
;Вызов DOS. Останов программы
END
Start
;Конец программы/точка выхода
