MOVE dst, src - Перемещение данных
Описание:
Перемещение данных из определенного источника (src) в определенный получатель (dst). Ниже приведена таблица определенных источников и получателей. Также, так как src может быть 8- битными (байт) или 16- битными (слово) данными, то ниже приводятся правила, определяющие передачу данных.
Затрагиваемые флаги состояния:
S, Z (если dst является Acc, AP или APC)
C, E (если dst является PSF)
Выполнение команды:
dst <-- src
Код команды:
Коды спецификатора источника
| src |
бит кодирования(f ssssssss) |
Разрядность (16 или 8) |
Описание |
| #k |
0 kkkk kkkk |
8 |
kkkkkkkk = непосредственные данные (литерал) |
| MN[n] |
1 nnnn 0NNN |
8/16 |
nnnn выбирает один первых 16 регистров в модуле NNN;где NNN= от 0 до 5. Доступ ко вторым 16 регистрам осуществляется с использованием регистра PFX[n]. |
| AP |
1 0000 1000 |
8 |
Указатель аккумулятора |
| APC |
1 0001 1000 |
8 |
Управление указателем аккумулятора |
| PSF |
1 0100 1000 |
8 |
Регистр флагов состояния процессора |
| IC |
1 0101 1000 |
8 |
Регистр прерываний и контроля |
| IMR |
1 0110 1000 |
8 |
Регистр масок прерываний |
| SC |
1 1000 1000 |
8 |
Управляющий системный регистр |
| IIR |
1 1011 1000 |
8 |
Регистр идентификации прерываний |
| CKCN |
1 1110 1000 |
8 |
Регистр управления синхронизацией |
| WDCN |
1 1111 1000 |
8 |
Регистр сторожевого таймера |
| A[n] |
1 nnnn 1001 |
8/16 |
nnnn выбирает один из 16 аккумуляторов |
| Acc |
1 0000 1010 |
8/16 |
Активный аккумулятор = A[AP]. Обновление AP осуществляется при помощи APC |
| A[AP] |
1 0001 1010 |
8/16 |
Активный аккумулятор = A[AP]. Не изменяет AP |
| IP |
1 0000 1100 |
16 |
Указатель команд |
| @SP-- |
1 0000 1101 |
16 |
16- битное слово @SP, уменьшение SP после выполнения команды |
| SP |
1 0001 1101 |
16 |
Указатель стека |
| IV |
1 0010 1101 |
16 |
Вектор прерываний |
| LC[n] |
1 011n 1101 |
16 |
n выбирает 1 или 2 регистр следящего счетчика |
| @SPI-- |
1 1000 1101 |
16 |
16- битное слово @SP, уменьшение SP после выполнения команды, INS=0 |
| @BP[Offs] |
1 0000 1110 |
8/16 |
Память данных @BP[Offs] |
| @BP[Offs++] |
1 0001 1110 |
8/16 |
Память данных @BP[Offs]; увеличение OFFS после выполнения команды |
| @BP[Offs--] |
1 0010 1110 |
8/16 |
Память данных @BP[Offs]; уменьшение OFFS после выполнения команды |
| OFFS |
1 0011 1110 |
8 |
Смещение указателя кадра относительно основного указателя (BP) |
| DPC |
1 0100 1110 |
16 |
Управляющий регистр указателя данных |
| GR |
1 0101 1110 |
16 |
Регистр общего назначения |
| GRL |
1 0110 1110 |
8 |
Младший байт регистра GR |
| BP |
1 0111 1110 |
16 |
Указатель кадра основного указателя (BP) |
| GRS |
1 1000 1110 |
16 |
Поменянные местами байты регистра GR |
| GRH |
1 1001 1110 |
8 |
Старший байт регистра GR |
| GRXL |
1 1010 1110 |
16 |
Младший байт регистра GR с расширением знака |
| FP |
1 1011 1110 |
16 |
Указатель кадра (BP[Offs]) |
| @DP[n] |
1 0n00 1111 |
8/16 |
Память данных @DP[n] |
| @DP[n]++ |
1 0n01 1111 |
8/16 |
Память данных @DP[n], увеличение DP[n] после выполнения команды |
| @DP[n]-- |
1 0n10 1111 |
8/16 |
Память данных @DP[n], уменьшение DP[n] после выполнения команды |
| DP[n] |
1 0n11 1111 |
16 |
n выбирает 1 из двух указателей данных |
Коды спецификатора получателя
| dst |
бит кодирования (ddd dddd) |
Разрядность (16 или 8) |
Описание |
| NUL |
111 0110 |
8/16 |
Null (виртуальный) получатель. Предназначен для использования в качестве приемника бит, позволяющий помочь программно увеличить/уменьшить указатель. |
| MN[n] |
nnn 0NNN |
8/16 |
nnnn выбирает один из 8 первых регистров в модуле NNN; где NNN= от 0 до 5. Доступ к следующим 24 регистрам осуществляется с использованием префиксного регистра PFX[n]. |
| AP |
000 1000 |
8 |
Указатель аккумулятора |
| APC |
001 1000 |
8 |
Регистр управление указателем аккумулятора |
| PSF |
100 1000 |
8 |
Регистр флагов состояния процессора |
| IC |
101 1000 |
8 |
Регистр прерываний и управления |
| IMR |
110 1000 |
8 |
Регистр масок прерываний |
| A[n] |
nnn 1001 |
8/16 |
nnn выбирает один из 8 первых аккумуляторов: A[0]...A[7] |
| Acc |
000 1010 |
8/16 |
Активный аккумулятор = A[AP] |
| PFX[n] |
nnn 1011 |
8 |
nnn выбирает один из 8 префиксных регистров |
| @++SP |
000 1101 |
16 |
16- битное слово @SP, увеличение SP перед выполнением команды |
| SP |
001 1101 |
16 |
Указатель стека |
| IV |
010 1101 |
16 |
Вектор прерываний |
| LC[n] |
11n 1101 |
16 |
n выбирает один из двух регистров следящего счетчика |
| @BP[Offs] |
000 1110 |
8/16 |
Память данных @BP[Offs] |
| @BP[++Offs] |
001 1110 |
8/16 |
Память данных @BP[Offs]; увеличение OFFS перед выполнением команды |
| @BP[--Offs] |
010 1110 |
8/16 |
Память данных @BP[Offs]; уменьшение OFFS перед выполнением команды |
| OFFS |
011 1110 |
8 |
Смещение указателя кадра относительно основного указателя (BP) |
| DPC |
100 1110 |
16 |
Управляющий регистр указателя данных |
| GR |
101 1110 |
16 |
Регистр общего назначения |
| GRL |
110 1110 |
8 |
Младший байт регистра GR |
| BP |
111 1110 |
16 |
Указатель кадра основного указателя (BP) |
| @DP[n] |
n00 1111 |
8/16 |
Память данных @DP[n] |
| @++DP[n] |
n01 1111 |
8/16 |
Память данных @DP[n], увеличение DP[n] перед выполнением команды |
| @--DP[n] |
n10 1111 |
8/16 |
Память данных @DP[n], уменьшение DP[n] перед выполнением команды |
| DP[n] |
n11 1111 |
16 |
n выбирает один из двух указателей данных |
| 2- ух цикловый доступ к получателю при помощи префиксного регистра PFX[n] (см. специальные замечания) |
| SC |
000 1000 |
8 |
Системный управляющий регистр |
| CKCN |
110 1000 |
8 |
Регистр управления синхронизацией |
| WDCN |
111 1000 |
8 |
Регистр управления сторожевым таймером |
| A[n] |
nnn 1001 |
16 |
nnn выбирает один из 8 вторых аккумуляторов A[8]...A[15] |
| GRH |
001 1110 |
8 |
Старший байт регистра GR |
Правила пересылки данных:
dst (16-bit) <-- src (16-bit): dst[15:0] <-- src[15:0]
dst (8-bit) <-- src (8-bit): dst[7:0] <-- src[7:0]
dst (16-bit) <-- src (8-bit): dst[15:8] <-- 00h *
dst[7:0] <-- src[7:0]
dst (8-bit) <-- src (16-bit): dst[7:0] <-- src[7:0]
*Замечание: Для этого типа пересылки данных для определения отдельного старшего байта данных может использоваться регистр PFX[0].
Пример(ы):
MOVE A[0], A[3] ; A[0] < A[3]
MOVE DP[0], #110h ; DP[0] < #0110h (используется регистр PFX[0])
; MOVE PFX[0], #01h (интеллектуальное префиксирование)
; MOVE DP[0], #10h
MOVE DP[0], #80h ; DP[0] < #0080h (регистр PFX[0] не нужен)
Специальное замечание: Для пересылки 16- битных данных или для 2- ух циклового доступа к получателю необходимо загрузить данные в регистр PFX [n], что автоматически выполняется ассемблером. Поэтому к исходному тексту добавляется еще одна команда. Примеры автоматического добавления кода пересылки днных в регистр PFX [n] приводятся ниже.
| Входной код |
Выходной код, сформированный ассемблером |
| MOVE DP[0], #0100h |
MOVE PFX[0], #01h |
| MOVE A[15], A[7] |
MOVE PFX[2], anysrc |
| MOVE A[7], A[7] |
| MOVE A[8], #3040h |
|
| MOVE PFX[2], #30h |
MOVE A[0], #40h |
|