В этом куске программы регистр, названный Temp1 используется дважды. Первый раз он он добавляет 0 в старший байт регистровой пары Z, то есть в ZH. Потом через него выводят значение R0 на PORTB. Но из-за этого в середине программы, каждый новый цикл, приходится записывать в Temp1 0. Но ведь можно вынести ldi Temp1,0 за метку чтения массива и выполнять это действие только 1 раз. А внутри этой части добавить новый регстр, например, Temp2 и его использовать для записи R0?
Вопрос в следующем. Что лучше, использовать на один РОН больше и избавиться от лишней строчки или же делать как здесь?
UPD: Поскольку сообщение перешло на новую страницу, для удобства дублирую сюда кусок программы.
ldi Temp,0 ;инициализация регистра
;внутренней адресации массива
ReadArray:
ldi ZH,High(MyArray*2) ;загрузка адреса 0-го
ldi ZL,Low(MyArray*2) ;элемента в рег. пару Z
ldi Temp1,0
add ZL,Temp ;прибавление
adc ZH,Temp1 ;внутр. адреса
lpm ;загрузка из ПЗУ
mov Temp1,R0 ;копирование
out PortB,Temp1 ;вывод в порт
inc Temp ;увелич. внутр. адреса
rjmp ReadArray ;в начало цикла
MyArray:
.db 12,16,3,4,10,17,255,37,158,14,13,98
.db 14,85,30,9,145,52,64,49,119,72,209,46
Взято здесь


