Консультация № 65418
03.12.2006, 21:56
0.00 руб.
0 2 2
Здравствуйте.
Дали задание – написать на ассемблере программу для МК51 (эмулятор AVSim51).
Задача: поместить в регистр B среднее арифметическое массива 8-ми разрядных двоичных чисел в адресах 20H-2FH.

Все бы хорошо, но при сложении 16ти однобайтных чисел (если брать максимально-допустимое для них значение) может получиться 12ти разрядное число, и напрямую командой DIV AB его не разделить.
Есть идея перевести сумму из двоичной в двоично-десятичную систему, записать в DPTR (тысячи и сотни в DPH,а десятки и единицы в DPL), потом их обратно в двоичную систему и уже потом делить по частям. Вот только программка получается уж больно здоровой.
Нет ли более простого способа решить?
Заранее спасибо

Обсуждение

Неизвестный
03.12.2006, 23:06
общий
это ответ
Здравствуйте, PROD!
Советую вам почитать книгу Тавернье К. PIC-микроконтроллеры. Практика применения.djvu. не удивляйтесь, но алгоритм он и в африке алгоритм(глава 4 стр. 136 Деление 16 разрядных чисел). Кстати в МПАСМ вообще нет такого оператора DIV, я думаю не составит труда адаптироваться.
Неизвестный
04.12.2006, 18:46
общий
это ответ
Здравствуйте, PROD!
Диапазон 20H-2FH задает 16 чисел, для вычисления СА надо делить на 16. Эквивалент делению на 16 это сдвиг вправо 4 раза (один сдвиг деление на 2).
Либо можно поменять тетрады в байтах. От младшего взять старшую тетраду она будет младшей у результата, а от старшего байта младшую, она будет старшей у результата.
Форма ответа