| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. |