[an error occurred while processing this directive]
|
Следующий фрагмент прекрасно работает, если адресуется к разным участкам памяти для входных данных и выходных данных (ar2!=ar3)
rpt #4-1
st a,*ar3+
||ld *ar2+,a
При использовании разных участков памяти интуитивно понятно, как работает команда, но что же происходит с командой ST||LD во втором случае? В описании команды сказано следующее: the LD reads the source operand at the memory location pointed to by AR2 before the ST writes to the same location. The ST reads the source operand of accumulator A before LD loads accumulator A.
Попробую изобразить два параллельных процесса в виде диаграммы (прошу сильно не пинать за псевдографику)
_____ _____
| | | |
| A' |==ST==>|*AR2+|
|_____| |_____|
_____ _____
| | | |
|*AR2+|==LD==>| A" |
|_____| |_____|один машинный цикл
------|-------------------|------> время
На диаграмме видно, что значения A'(исходное значение аккумулятора) и A"(окончательное значение аккумулятора) обрабатываются совершенно независимо (и паралллельно).Для исходной задачи нужен процесс ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ
_____ _____ _____
| | | | | |
|*AR2+|==LD==>| A |==ST==>|*AR2+|
|_____| |_____| |_____|
один машинный цикл
------|---------------------------------|------> время
Прошу экспертов и других заинтересованных лиц высказать свое мнение и поправить при необходимости мои рассуждения.
E-mail: info@telesys.ru