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 |
|