Слайд 2План:
Обработка двоичных данных
Беззнаковые и знаковые данные
Умножение
Сдвиг регистровой пары DX: АХ
![План: Обработка двоичных данных Беззнаковые и знаковые данные Умножение Сдвиг регистровой пары DX: АХ](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-1.jpg)
Слайд 3Обработка двоичных данных
Сложение и вычитание
Переполнение
![Обработка двоичных данных Сложение и вычитание Переполнение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-2.jpg)
Слайд 4Сложение и вычитание
Команды ADD и SUB выполняют сложение и вычитание байтов или
![Сложение и вычитание Команды ADD и SUB выполняют сложение и вычитание байтов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-3.jpg)
слов, содержащих двоичные данные.
Пример:
MOV AX,WORDA
ADD AX,WORDB
MOV WORDB,AX
Слайд 5Переполнения
ADD AL,20H
CBW ;Расширение AL до AX
ADD AX,20H ;Прибавить к AX
![Переполнения ADD AL,20H CBW ;Расширение AL до AX ADD AX,20H ;Прибавить к AX](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-4.jpg)
Слайд 6Беззнаковые и знаковые данные
Команды ADD и SUB не делают разницы между знаковыми
![Беззнаковые и знаковые данные Команды ADD и SUB не делают разницы между](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-5.jpg)
и беззнаковыми величинами, они просто складывают и вычитают биты.
Слайд 7Беззнаковое Знаковое
1111 1001 249 -7
+ + + +
0000 0010 2 +2
-----------------------
1111
![Беззнаковое Знаковое 1111 1001 249 -7 + + + + 0000 0010](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-6.jpg)
1011 251 -5
Слайд 8Умножение
Байт на байт
Слово на слово
Беззнаковое умножение
Знаковое умножение
Повышение эффективности умножения
Многословное умножение
Умножение двойного слова
![Умножение Байт на байт Слово на слово Беззнаковое умножение Знаковое умножение Повышение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-7.jpg)
на слово
Умножение двойного слова на двойное слово
Слайд 9Операция умножения для беззнаковых данных выполняется командой MUL, а для знаковых -
![Операция умножения для беззнаковых данных выполняется командой MUL, а для знаковых -](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-8.jpg)
IMUL
Байт на байт Множимое находится в регистре AL, а множитель в байте памяти или в однобайтовом регистре. После умножения произведение находится в регистре AX. Операция игнорирует и стиpает любые данные, которые находились в регистре AH.
Слово на слово Множимое находится в регистре AX, а множитель - в слове памяти или в регистре. После умножения произведение находится в двойном слове, для которого требуется два регистра: старшая (левая) часть произведения находится в регистре DX, а младшая (правая) часть в регистре AX. Операция игнорирует и стирает любые данные, которые находились в регистре DX.
Слайд 10MUL MULTR
MUL CL ;Байт-множитель: множимое в AL, произвед. в AX
MUL BX ;Слово-множитель:множимое
![MUL MULTR MUL CL ;Байт-множитель: множимое в AL, произвед. в AX MUL](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-9.jpg)
в AX, произвед. в DX:AX
Слайд 11Беззнаковое умножение: Команда MUL
Команда MUL (MULtiplication - умножение) умножает беззнаковые числа.
![Беззнаковое умножение: Команда MUL Команда MUL (MULtiplication - умножение) умножает беззнаковые числа.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-10.jpg)
Слайд 12Знаковое умножение: Команда IMUL
Команда IMUL (Integer MULtiplication - умножение целых чисел) умножает
![Знаковое умножение: Команда IMUL Команда IMUL (Integer MULtiplication - умножение целых чисел) умножает знаковые числа.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-11.jpg)
знаковые числа.
Слайд 13Повышение эффективности умножения
Умножение на 2:
SHL AL,1
Умножение на 8:
MOV CL,3
SHL AX,CL
![Повышение эффективности умножения Умножение на 2: SHL AL,1 Умножение на 8: MOV CL,3 SHL AX,CL](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-12.jpg)
Слайд 14Многословное умножение
1365
х
12
------
2730
1365
------
16380
![Многословное умножение 1365 х 12 ------ 2730 1365 ------ 16380](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-13.jpg)
Слайд 15 13 65
х х
12 12
--- ---
26 130
13 65
--- ---
156 780
![13 65 х х 12 12 --- --- 26 130 13 65 --- --- 156 780](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-14.jpg)
Слайд 17Умножение двойного слова на слово
Процедура E10XMUL умножает двойное слово на слово. Множимое,
![Умножение двойного слова на слово Процедура E10XMUL умножает двойное слово на слово.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-16.jpg)
MULTCND, состоит из двух слов, содержащих соответственно шест.3206 и шест.2521. Определение данных в виде двух слов (DW) вместо двойного слова (DD) обусловлено необходимостью правильной адресации для команд MOV, пересылающих слова в регистр AX. Множитель MULTPLR содержит шест.6400.
Слайд 18Область для записи произведения, PRODUCT, состоит из трех слов.
Первая команда MUL
![Область для записи произведения, PRODUCT, состоит из трех слов. Первая команда MUL](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-17.jpg)
перемножает MULTPLR и правое cлово поля MULTCND; произведение - шест.0E80 E400 записывается в PRODUCT+2 и PRODUCT+4.
Вторая команда MUL перемножает MULTPLR и левое слово поля MULTCND, получая в результате шест. 138A 5800.
Слайд 19Произведение 1: 00000E80E400
Произведение 2: 138A5800
—
Результат: 138A6680E400
![Произведение 1: 00000E80E400 Произведение 2: 138A5800 — Результат: 138A6680E400](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-18.jpg)
Слайд 20Умножение двойного слова на двойное слово
слово 2 слово 2
слово 2 слово 1
слово
![Умножение двойного слова на двойное слово слово 2 слово 2 слово 2](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-19.jpg)
1 слово 2
слово 1 слово 1
Каждое произведение в регистрах DX и AX складывается с соответствующим словом в окончательном результате.
Слайд 21Сдвиг регистровой пары DX:AX
Сдвиг влево на 4 бита
MOV CX,04 ;Инициализация на 4
![Сдвиг регистровой пары DX:AX Сдвиг влево на 4 бита MOV CX,04 ;Инициализация](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1123711/slide-20.jpg)
цикла C20:
SHL DX,1 ;Сдвинуть DX на 1 бит влево
SHL AX,1 ;Сдвинуть AX на 1 бит влево
ADC DX,00 ;Прибавить значение переноса
LOOP C20 ;Повторить Сдвиг вправо на 4 бита
MOV CX,04 ;Инициализация на 4 цикла D20:
SHR AX,1 ;Сдвинуть AX на 1 бит вправо
SHR DX,1 ;Сдвинуть DX на 1 бит вправо
JNC D30 ;В случае, если есть перенос,
OR AH,10000000B ; то вставить 1 в AH D30:
LOOP D20 ;Повторить