Префиксные операции
Все команды микроконтроллеров семейства MAXQ являются 16 битными и выполняются за один цикл. Однако для некоторых действий может потребоваться и больше одного цикла. Например, при операциях, требующих для правильной передачи установки старших индексов регистров. В этих случаях предварительно необходимо загрузить регистр модуля PFX необходимым значением, которое будет использовано следующей командой. Модуль PFX содержит данные только в течение одного цикла, после чего обнуляется.
Это приводит к тому, что некоторые команды реально выполняются за два цикла.
- При выполнении 16- разрядной адресации (например, загрузка регистра с 16- разрядным адресом из аккумулятора), в предыдущем цикле в модуль PFX должен быть загружен старший байт 16- разрядного непосредственного значения, но только в том случае, если этот старший байт не является нулевым. Имеется одно исключение - после включения питания абсолютное значение адресата устанавливается равным 00xxh. В этом случае в PFX необходимо записать нулевое значение. Иначе команда перехода не будет осуществлена по абсолютному адресу.
- При выборе регистров с индексами больше чем 07h в пределах модуля в качестве получателей или регистров с индексами больше чем 0Fh в пределах модуля в качестве источников, в предыдущем цикле регистры PFX [n] также должны быть загружены. Это может быть объединено с предыдущим случаем.
Вообще, префиксные операции могут быть установлены ассемблером автоматически, так как это требуется. Например, команда
move DP[0], #1234h
фактически транслируется как
move PFX[0], #12h
move DP[0], #34h
Однако операция
move DP[0], #0055h
не требует префиксной операции, несмотря на то, что регистр DP[0] является 16-разрядным.
Объясняется это тем, что префиксные значения по умолчанию нулевые, поэтому строка
move PFX[0], #00h
не требуется.
|