Перемещение данных
Перемещение непосредственных данных в прямую страницу
Перемещение непосредственных данных в прямую страницу (MOV imd) является трехбайтовым четырехцикловым режимом, используемым, в общем случае, для инициализации переменных и регистров на прямой странице. Операнд байта, следующего непосредственно за операционным кодом, сохраняется в ячейке прямой страницы, адресованной вторым, следующим за операционным кодом, байтом. Команда MOV, использующая этот режим адресации, не воздействует на содержимое аккумулятора. Приведенный ниже пример показывает, что исключение аккумулятора из процесса пересылки данных сокращает количество рабочих циклов, по сравнению с аналогичными процессами пересылки непосредственных данных на прямую страницу, с 9 циклов до 4.
Машинный код Метка Операция Операнд Комментарий
*Перемещение данных с использованием аккумулятора
B750 (два цикла) PSHA ; Сохранение текущего значения A
A622 (два цикла) LDA #$22 ; A = $22
B7F0 (три цикла) STA $F0 ; Сохранение $22 в $F0
B650 (два цикла) PULA ; Восстановление значения A
Всего 9 циклов
* Перемещение данных без использования аккумулятора
6E22F0 (четыре цикла) MOV #$22, $F0 ; Состояние ячейки $F0 = $22
Перемещение данных из прямой страницы в прямую страницу
Перемещение данных из прямой страницы в прямую страницу является трехбайтовым пятицикловым режимом адресации, используемым, в общем случае, для перемещения данных из регистра в регистр в пределах прямой страницы. Операнд в ячейке прямой страницы, адресуемой байтом следующим непосредственно за операционным кодом, сохраняется в ячейке прямой страницы адресованной вторым, следующим за операционным кодом, байтом. Команда MOV, использующая этот режим адресации, не воздействует на содержимое аккумулятора. Как и в предшествовавшем режиме адресации, исключение аккумулятора из процесса пересылки данных сокращает количество циклов выполнения с 10 до 5, по сравнению с аналогичными процессами пересылки данных внутри прямой страницы (см приведенный ниже пример). Такой режим адресации существенно ускоряет выполнение программ с большим количеством пересылок регистр-регистр.
Машинный код Метка Операция Операнд Комментарий
*Перемещение данных с использованием аккумулятора
B750 (два цикла) PSHA ; Сохранение текущего значения A
B6F0 (три цикла) LDA $F0 ; Получение содержимого $F0
B7F1 (три цикла) STA $F1 ; Ячейка $F1 = $F0
B650 (два цикла) PULA ; Восстановление значения A
Всего 10 циклов
* Перемещение данных без использования аккумулятора
4EF0F1 (пять циклов) MOV $F0, $F1 ; Перемещение содержимого $F0 в
; $F1
Перемещение индексированных данных в прямую страницу с постинкрементом
Перемещение индексированных данных, адрес ячейки которых указан в индексном регистре, в прямую страницу с постинкрементом индексного регистра (MOV ix+d) является двухбайтовым четырехцикловым режимом адресации используемым, в первую очередь, пересылки таблиц, адресованных индексным регистром, в регистр прямой страницы. Таблицы могут быть расположены в любом месте 64-килобайтовой карты памяти и могут иметь любой размер. Эта команда не воздействует на содержимое аккумулятора. Операнд, адресованный индексным регистром (H:X), сохраняется в ячейке прямой страницы, адресованной байтом, следующим за операционным кодом. После перемещения данных содержимое H:X инкрементируется.
Данный режим адресации очень эффективен при пересылке содержимого буфера, организованного в RAM, в регистр последовательной передачи, как это показано на приведенном ниже примере.
В таблице 10 перечислены команды пересылок память-память.
Примечание: Выполнение команды перемещения индексированных данных в прямую страницу с постинкрементом инкрементирует H, если инкремент происходит при нахождении X в состоянии $FF.
В примере показана активируемая прерыванием подпрограмма обслуживания SCI передачи, поддерживающая кольцевой буфер.
Машинный код Метка Операция Операнд Комментарий
SIZE EQU 16 ; Длина кольцевого буфера RX
SCSR1 EQU $16 ; Статус SCI регистра 1
SCDR EQU $18 ; SCI регистр приема данных
ORG $70
PTR_OUT RMB 2 ; Указатель отсутствия данных в
; кольцевом буфере
PTR_IN RMB 2 ; Указатель наличия данных в
; кольцевом буфере
RX_B RMB SIZE ; Кольцевой буфер
*
*Подпрограмма обработки прерывания заполненного SCI регистра приема данных
*
ORG $6E00
55 72 RX_INT LDHX PRT_IN ; Загрузка указателя
B6 16 LDA SCSR1 ; Пустое считывание SCSR1 как
; сброса RDRF
5E 18 MOV SCDR ,X+ ; Перемещение нового байта из
; SCI регистра данных. Очистка
; RDRF. Постинкремент H:X.
65 00 64 CPHX #RX_B + SIZE ; Закончена выдача кольцевого
; буфера?
23 03 BLS NOLOOP ; Если нет, то продолжить
45 00 54 LDHX #RX_B ; Иначе сброс старта буфера
35 52 NOLOOP STHX PTR_IN ; Сохранение нового значения
; указателя
80 RTI ; Возврат
Таблица 10. Команды перемещения данных память-память
Мнемоника |
Команда |
MOV |
Переместить непосредственный операнд в прямоадресуемую ячейку памяти (Move Immediate Operand to Direct Memory Location) |
MOV |
Переместить прямоадресуемый операнд в другую прямоадресуемую ячейку памяти (Move Direct Memory Operand to Another Direct Memory Location) |
MOV |
Переместить индексированный операнд в прямоадресуемую ячейку памяти (Move Indexed Operand to Direct Memory Location) |
MOV |
Переместить прямоадресуемый операнд в индексированную ячейку памяти (Move Direct Memory Operand to Indexed Memory Location) |
|