Консультация № 177962
21.04.2010, 08:01
0.00 руб.
0 3 1
Уважаемые эксперты, помогите с программой:
Составить программу проверки эл-ов массива на 0. Числа располагаются во внутренней памяти, начиная с адреса 10H по 3FH.
Надо зафиксировать адреса нулевых эл-ов массива и запомнить их во внутренней памяти.
Коды программы должны начинаться с 0000H, байтовые переменные - с 08H, стек - с 60H, битовые переменные - с 20H, внешнее ОЗУ - с 0000H. Микроконтроллер MCS-51.
Заранее благодарю.

Обсуждение

давно
Посетитель
7438
7205
21.04.2010, 10:49
общий
С какого адреса хранить адреса нулевых эл-ов массива? Учтите, что их может быть максимум 30h (10h-3fh)
Начиная с 40h до стека всего 20h. Можно, например, стеку отдать адреса с 70h, тогда влезет
Кроме того, исходный массив можно разместить с 8h, тогда он будет до 37h, результирующий массив: 38h-67h, стек - с 68h
За Вами решение...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
21.04.2010, 17:59
общий
Лысков Игорь Витальевич:
Я думаю, что можно стек тогда с 70h.
давно
Посетитель
7438
7205
22.04.2010, 10:09
общий
это ответ
Здравствуйте, beyonda.
Дополнительно посчитал еще и количество нулевых элементов
Код:

mov sp, #70h ;переносим вершину стека
mov r0, #10h ;адрес, где исходный массив
mov r1, #40h ;адрес, куда будем писать адреса нулевых элементов
mov r4, #30h ;количество элементов исходного массива
loop: ;цикл
mov a, @r0 ;читаем очередной элемент
jnz next ;если не нуль, то обходим
mov a, r0 ;адрес нулевого элемента!
mov @r1, a ;пишем
inc r1 ;адрес следующего элемента массива нулевых элементов
next:
inc r0 ;адрес следующего элемента исходного массива
djnz r4, loop ;r4=r4-1; циклим, пока r4!=0
;посчитаем число нулевых элементов
mov a, r1 ;адрес конца
clr c ;сбросим С (для subb)
subb a, #40h ;a = конец - начало - C
mov r2, a ;сохраним длину в r2
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа