Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Помогите с задачей (МК51)


Автор: luberppl 23.6.2014, 08:39
Записать в регистр DPTR сумму наибольших чисел массивов 20Н-27Н и 28Н-2FH двоично-десятичных чисел. Помогите разобрать пошагово что делать. 

Автор: tzirechnoy 23.6.2014, 17:24
1) Я так понял, что есть два массива, в каждом хранятся однобайтные двоично-десятичные числа.
2) И надо в каждом из двух массивов найти наибольшэе число. По счастью, сравнение двоично-десятичных чисел в точности соответствует сравнению обычных беззнаковых чисел. Так что пройти массив, записывая в какой-то регистр максимум. Массива два, так что можно просто взять два разных регистра.
3) Дальшэ зависит от того, нужно нам в DPTR двоично-десятичное или обычное двоичное число. Если двоично-десятичное -- то банально, складываем как обычно 16-битовые числа, только после каждого сложэния (их два будет -- сначала числа друг с другом, а потом 0 с 0 для получения старшэго бита) выполняем команду DAA.

А если двоичное -- то логичнее всего перевести каждое из двух BCD в двоичное число. Записываешь значение в аккумулятор, 4 раза очищаешь флаг переноса + RRC, результат умножаешь на 10. Затем значению делаешь AND 0x0F, добавляешь. Всё -- в аккумуляторе однобайтовое правильное число. Записываешь обратно, потом складываешь обычные числа (учитывая carry) и записываешь результат в DPTR.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)