Двоично-десятичные числа
Процессор 8086 не имеет специальных инструкций, выполняющих арифметические операции над двоично-десятичными числами. Однако он предоставляет программисту команды десятичной коррекции операций сложения и вычитания и команды символьной коррекции операций сложения, вычитания, умножения и деления, которые облегчают обработку двоично-десятичных чисел.
Команды сложения и вычитания позволяют обрабатывать упакованные и распакованные двоично-десятичные числа, команды умножения и вычитания – только распакованные числа. В любом случае одна инструкция обрабатывает один байт двоично-десятичных данных, причём на одну арифметическую инструкцию приходится одна инструкция коррекции.
Один байт двоично-десятичных распакованных данных хранит одну десятичную цифру. Код цифры (от 0 до 9 включительно в шестнадцатеричном виде) находится в младшем полубайте. Значение старшего полубайта при выполнении операций десятичной коррекции (AAA, AAD, AAM
и AAS) обнуляется.
В одном байте двоично-десятичных упакованных данных хранятся две десятичные цифры. Старшая цифра занимает старший полубайт, а младшая – младший полубайт. Каждая цифра кодируется шестнадцатеричным значением от 0 до 9 включительно.
Система команд микропроцессора 8086 слабо подходит для обработки двоично-десятичных данных, поэтому в реальных программах соответствующие инструкции и форматы данных используются весьма редко. Математический сопроцессор 8087 в данном случае более удобен, поскольку позволяет обрабатывать одной инструкцией двоично-десятичные упакованные числа с количеством десятичных разрядов 18, однако описание сопроцессора выходит за рамки настоящей книги.