Команда MUL вычисляет произведение двух целых беззнаковых чисел, хранящихся в регистрах А и В. Младшая часть произведения размещается в А, а старшая – в регистре-расширителе В. Если содержимое В оказывается равным нулю, то флаг OV сбрасывается, иначе – устанавливается. Флаг переноса всегда сбрасывается.
Например, если аккумулятор содержал число 200 (0C8H), а расширитель 160 (0A0H), то в результате выполнения команды MUL АВ получится произведение 32000 (7D00H). Аккумулятор будет содержать нуль, а расширитель - 7DH, флаг OV будет установлен, а флаг С – сброшен.
1. Пусть требуется умножить целое двоичное число на константу. Исходное число размещается в резидентной памяти данных (РПД), адрес младшего байта находится в регистре R0. Формат числа в байтах хранится в R0:
CONST EQU 123
MOV A,#0 ; Сброс аккумулятора
L: ADD A,@R0 ; Загрузка множимого
MOV B,#CONST ; Загрузка множителя
MUL AB ; Умножение
MOV @R0,A ; Запись младшего байта частичного произведения
INC R0 ; Приращение адреса
MOV A,B ; Пересылка старшего байта частичного произведения в аккумулятор
XCH A,@R0 ; Предварительное формирование очередного байта произведения
DJNZ R1,L ; Цикл, если не все байты исходного числа умножены на константу
Полученное произведение размещается на месте исходного числа и занимает в РПД на один байт больше. |