ST6 и ST7 — это линейки 8-битных микроконтроллеров от STMicroelectronics . Они обычно используются в небольших встраиваемых приложениях, таких как стиральные машины .
Хотя они используют схожие периферийные устройства и продаются как часть одной и той же линейки продуктов, [1] [2] эти две архитектуры на самом деле совершенно разные.
Оба имеют 8-битный аккумулятор, используемый для большинства операций, плюс два 8-битных индексных регистра (X и Y), используемых для адресации памяти. Также оба имеют 8-битные инструкции, за которыми следует до 2 байт операндов, и оба поддерживают манипуляции и ветвления на отдельных битах памяти.
На этом сходство заканчивается.
ST6 — это архитектура Гарварда с 8-битным (256 байт) адресным пространством данных и отдельным 12-битным (4096 байт) программным пространством. Операнды всегда имеют длину 1 байт, а некоторые инструкции поддерживают два операнда, например «переместить 8-битный немедленный адрес в 8-битный адрес памяти». Вызовы подпрограмм выполняются с использованием отдельного аппаратного стека. Регистры данных (но не счетчик программ или флаги) отображаются в памяти.
Режимы адресации ST6 ограничены непосредственным 8-битным абсолютным адресом памяти и косвенными режимами регистра (X) и (Y).
ST7 — это архитектура фон Неймана с одним 16-битным (64 КБ) адресным пространством. Первые 256 байт ОЗУ ( нулевая страница ) обладают дополнительной гибкостью. Нет двухоперандных инструкций, за исключением «тестового бита и перехода». Его регистры не отображены в память, и он использует ОЗУ общего назначения (плюс регистр указателя стека ) для вызовов подпрограмм.
ST7 поддерживает широкий спектр режимов адресации, включая базовый+индексный и двойной косвенный.
ST6 имеет 64 байта ОЗУ и 4096 байт ПЗУ программ . Доступ к большим объемам осуществляется переключением банков в нижней части 2К ПЗУ.
Фактически адресное пространство ОЗУ составляет 256 байт, разделенных следующим образом:
В адресное пространство не отображен 12-битный программный счетчик и связанный с ним аппаратный стек (глубиной четыре или шесть уровней в зависимости от модели). Имеется только два бита состояния ( перенос и ноль ), и они сгруппированы на основе режима процессора, с отдельными битами состояния для нормальной работы, работы с прерываниями и немаскируемыми прерываниями .
Первые четыре ячейки ОЗУ общего назначения также известны как регистры X, Y, V и W, и некоторые инструкции могут обращаться к ним, используя специальные режимы короткой адресации. Регистры X и Y служат индексными регистрами и могут использовать режимы косвенной адресации (X)
и (Y)
.
Набор инструкций состоит из одного байта кода операции, за которым следуют до двух однобайтовых операндов. Набор инструкций можно обобщить следующим образом:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | б2 | б3 | Мнемонический | С | З | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
компенсировать | ОПЦ | 0 | — | — | Условные переходы (5-битные, относительно ПК) | ||||||||
компенсировать | 0 | 0 | 0 | — | — | адрес JRNZ | Перейти к ПК + simm5, если Z == 0 | ||||||
компенсировать | 1 | 0 | 0 | — | — | адрес JRZ | Перейти к ПК + simm5, если Z == 1 | ||||||
компенсировать | 0 | 1 | 0 | — | — | адрес JRNC | Перейти к ПК + simm5, если C == 0 | ||||||
компенсировать | 1 | 1 | 0 | — | — | адрес JRC | Перейти к ПК + simm5, если C == 1 | ||||||
имм4 | с | 0 | 0 | 1 | имм8 | — | Безусловные переходы (12-битные абсолютные) | ||||||
имм4 | 0 | 0 | 0 | 1 | имм8 | — | ЗВОНИТЕ imm12 | Нажмите ПК, перейдите к 12-битному адресу | |||||
имм4 | 1 | 0 | 0 | 1 | имм8 | — | JP imm12 | Перейти к 12-битному адресу | |||||
— | 0 | 0 | 1 | 0 | 1 | — | — | (сдержанный) | |||||
рег | с | 1 | с | 1 | 0 | 1 | — | — | Операции регистра (по X, Y, V или W) | ||||
рег | 0 | 1 | 0 | 1 | 0 | 1 | — | — | Рег. INC | З | Регистр приращения. Z установлен, C — нет. | ||
рег | 1 | 1 | 0 | 1 | 0 | 1 | — | — | LD A, рег. | З | A := {X, Y, V или W} | ||
рег | 0 | 1 | 1 | 1 | 0 | 1 | — | — | DEC рег. | З | Декрементный регистр. Z установлен, C — нет. | ||
рег | 1 | 1 | 1 | 1 | 0 | 1 | — | — | LD рег ,А | З | {X, Y, V или W} := A | ||
код операции | 0 | 1 | 1 | 0 | 1 | — | — | Разные операции | |||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | адрес | имм8 | LDI-адрес, imm8 | Установить ОЗУ на 8-битное непосредственное значение | ||
1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | — | — | (сдержанный) | |||
0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | — | — | РЕТИ | Возврат из прерывания. Вскрытие ПК, восстановление флагов. | ||
1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | — | — | РЕТ | Возврат из подпрограммы. Извлечение ПК из аппаратного стека. | ||
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | — | — | КОМ А | З | С | Дополнение: C := msbit(A); A := ~A |
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | — | — | РЛК А | С | А := А + А + С | |
0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | — | — | ОСТАНАВЛИВАТЬСЯ | Остановить процессор, часы, большинство периферийных устройств до следующего прерывания | ||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | — | — | ЖДАТЬ | Остановить процессор до следующего прерывания; тактирование продолжается | ||
кусочек | ОПЦ | 0 | 1 | 1 | адрес | ? | Битовые операции (только абсолютный адрес) | ||||||
кусочек | 0 | 0 | 0 | 1 | 1 | источник | simm8 | JRR бит , источник , адрес | С | C := src.bit; переход к PC+simm8 в случае сброса (очистки) | |||
кусочек | 1 | 0 | 0 | 1 | 1 | источник | simm8 | JRS бит , источник , адрес | С | C := src.bit; перейти к PC+simm8, если установлено | |||
кусочек | 0 | 1 | 0 | 1 | 1 | летнее время | — | RES бит , dst | Сброс (установить на 0) dst.bit | ||||
кусочек | 1 | 1 | 0 | 1 | 1 | летнее время | — | SET бит , dst | Установить (на 1) dst.bit | ||||
код операции | данные | 1 | 1 | 1 | ? | — | Операции АЛУ с ОЗУ или непосредственные | ||||||
код операции | 0 | 0 | 1 | 1 | 1 | — | — | (Х) | Операнд — (X) | ||||
код операции | 0 | 1 | 1 | 1 | 1 | — | — | (Й) | Операнд — (Y) | ||||
код операции | 1 | 0 | 1 | 1 | 1 | имм8 | — | имм8 | Операнд — 8-битный непосредственный ( только исходный код ) | ||||
код операции | 1 | 1 | 1 | 1 | 1 | адрес | — | адрес | Операнд — 8-битный адрес ОЗУ. | ||||
0 | 0 | 0 | источник | 1 | 1 | 1 | ? | — | LD A, источник | З | A := источник | ||
1 | 0 | 0 | летнее время | 1 | 1 | 1 | ? | — | ЛД дст ,А | З | dst := A ( немедленно запрещено ) | ||
0 | 1 | 0 | источник | 1 | 1 | 1 | ? | — | ДОБАВИТЬ А, источник | З | С | А := А + ист. | |
1 | 1 | 0 | источник | 1 | 1 | 1 | ? | — | SUB A, источник | З | С† | А := А − ист. | |
0 | 0 | 1 | источник | 1 | 1 | 1 | ? | — | CP A, источник | З | С† | А − источник | |
1 | 0 | 1 | источник | 1 | 1 | 1 | ? | — | И А, источник | З | А := А & источник | ||
0 | 1 | 1 | летнее время | 1 | 1 | 1 | ? | — | INC dst | З | dst := dst + 1 ( немедленно запрещено ) | ||
1 | 1 | 1 | летнее время | 1 | 1 | 1 | ? | — | дек . время | З | dst := dst − 1 ( немедленно запрещено ) |
†: ^ ab Сбивает с толку тот факт, что разные модели семейства ST6 используют разные соглашения для значения бита переноса после вычитания. Процессоры ST60 используют соглашение «перенос», которое очищает бит, если вычитание выходит за пределы, в то время как процессоры ST62 и ST63 используют соглашение «заимствование», которое устанавливает бит в этом случае. [3] : 21–22,42
ST7 имеет шесть регистров: аккумулятор, индексные регистры X и Y, указатель стека, счетчик программ и регистр кода условия. Кроме того, двойная косвенная адресация позволяет использовать нулевую страницу ОЗУ в качестве дополнительных регистров. Необычной, но полезной функцией является то, что прерывание помещает четыре из этих регистров в стек (A и X, а также обычные PC и CC), а возврат прерывания восстанавливает их.
Инструкции ALU делятся на две категории: двухоперандные и однооперандные.
Инструкции с двумя операндами используют аккумулятор в качестве первого источника. Режим адресации определяет второй источник, который может быть:
Местом назначения обычно является аккумулятор, но несколько инструкций изменяют второй источник. (В таких случаях немедленные операнды запрещены.)
Инструкции с одним операндом используют указанный операнд как для источника, так и для назначения. Операнд может быть:
Регистр плюс смещение вычисляют сумму полной ширины, поэтому 8-битная форма может адресовать память до 255+255 = 510.
В дополнение к вышесказанному, существуют три префиксных байта, которые могут быть добавлены к любой инструкции, для которой они имеют смысл:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | б2 | б3 | Мнемонический | Описание |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | с | кусочек | в | адрес | ? | Битовые операции | |||
0 | 0 | 0 | 0 | кусочек | 0 | адрес8 | soff8 | BTJT addr8 , # бит , метка | Переход к ПК + soff8, если исходный бит истинен (установлен) | ||
0 | 0 | 0 | 0 | кусочек | 1 | адрес8 | soff8 | BTJF addr8 , # бит , метка | Перейти к PC + soff8, если исходный бит ложный (очистить) | ||
0 | 0 | 0 | 1 | кусочек | 0 | адрес8 | — | BSET addr8 , # бит | Установить указанный бит на 1 | ||
0 | 0 | 0 | 1 | кусочек | 1 | адрес8 | — | BRES addr8 , # бит | Сбросить (очистить) указанный бит в 0 | ||
0 | 0 | 1 | 0 | состояние | soff8 | — | Условные переходы (8-битное относительное смещение) | ||||
0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | soff8 | — | этикетка JRA | Ветвь всегда (истина) |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | soff8 | — | этикетка JRF | Ветка никогда (ложь) |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | soff8 | — | Этикетка JRUGT | Переход, если беззнаковое больше (C=0 и Z=0) |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | soff8 | — | Метка JRULE | Переход, если беззнаковое меньше или равно (C=1 или Z=1) |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | soff8 | — | этикетка JRNC | Переход, если нет переноса (C=0) |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | soff8 | — | этикетка JRC | Переход, если перенос (C=1) |
0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | soff8 | — | этикетка JRNE | Переход, если не равно (Z=0) |
0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | soff8 | — | Метка JREQ | Ветвь, если равно (Z=1) |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | soff8 | — | Этикетка JRNH | Переход, если нет полупереноса (H=0) |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | soff8 | — | этикетка JRH | Переход при полупереносе (H=1) |
0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | soff8 | — | лейбл JRPL | Ветвь, если плюс (N=0) |
0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | soff8 | — | этикетка JRMI | Ветвь, если минус (N=1) |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | soff8 | — | этикетка JRNM | Переход, если маска не прерывания (M=0) |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | soff8 | — | лейбл JRM | Переход, если прерывания замаскированы (M=1) |
0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | soff8 | — | Ярлык JRIL | Переход, если линия прерывания низкая |
0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | soff8 | — | этикетка JRIH | Переход, если линия прерывания высокая |
0 | режим | код операции | ? | — | Инструкции с одним операндом | ||||||
0 | 0 | 1 | 1 | код операции | адрес8 | — | ОП адрес8 | 8-битный абсолютный адрес | |||
0 | 1 | 0 | 0 | код операции | — | — | ОП А | Аккумулятор | |||
0 | 1 | 0 | 1 | код операции | — | — | ОП X | Регистр X (регистр Y с префиксом) | |||
0 | 1 | 1 | 0 | код операции | адрес8 | — | ОП (адрес8,X) | 8-битный адрес плюс X | |||
0 | 1 | 1 | 1 | код операции | — | — | ОП (Х) | Индексировано без смещения | |||
0 | режим | 0 | 0 | 0 | 0 | ? | — | Операнд NEG | Отрицание в дополнительном коде | ||
0 | режим | 0 | 0 | 0 | 1 | ? | — | (сдержанный) | |||
0 | режим | 0 | 0 | 1 | 0 | ? | — | (сдержанный) | |||
0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | — | — | МУЛЬ X,A | X:A := X × A. (MUL Y,A с префиксом) |
0 | режим | 0 | 0 | 1 | 1 | ? | — | CPL- операнд | Дополнение до единицы, логическое НЕ | ||
0 | режим | 0 | 1 | 0 | 0 | ? | — | SRL- операнд | Сдвиг вправо логический. Старший бит очищен, младший бит для переноса. | ||
0 | режим | 0 | 1 | 0 | 1 | ? | — | (сдержанный) | |||
0 | режим | 0 | 1 | 1 | 0 | ? | — | Операнд RRC | Сдвиг вправо через перенос, (операнд:C) := (C:операнд) | ||
0 | режим | 0 | 1 | 1 | 1 | ? | — | Операнд SRA | Сдвиг вправо арифметический. Msbit сохранен, lebit для переноса. | ||
0 | режим | 1 | 0 | 0 | 0 | ? | — | Операнд SLL | Сдвиг влево. Msbit для переноса. | ||
0 | режим | 1 | 0 | 0 | 1 | ? | — | RLC операнд | Поворот влево через перенос. | ||
0 | режим | 1 | 0 | 1 | 0 | ? | — | Операнд DEC | Уменьшение. (N и Z установлены, перенос не изменяется) | ||
0 | режим | 1 | 0 | 1 | 1 | ? | — | (сдержанный) | |||
0 | режим | 1 | 1 | 0 | 0 | ? | — | операнд INC | Приращение. (N и Z установлены, перенос не изменяется) | ||
0 | режим | 1 | 1 | 0 | 1 | ? | — | Операнд TNZ | Тест не равен нулю. Установите N и Z на основе операнда. | ||
0 | режим | 1 | 1 | 1 | 0 | ? | — | Операнд SWAP | Поменять местами половины операнда (4-битный поворот). | ||
0 | режим | 1 | 1 | 1 | 1 | ? | — | CLR- операнд | Установите операнд на 0. N и Z установите на фиксированные значения. операнд. | ||
1 | 0 | 0 | код операции | — | — | Различные инструкции. Ни одна из них не устанавливает коды условий неявно. | |||||
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — | — | ИРЭТ | Возврат из прерывания (выталкивание CC, A, X, PC) |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | — | РЕТ | Возврат из подпрограммы (pop PC) |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | — | ЛОВУШКА | Прерывание принудительной ловушки |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | — | — | (сдержанный) | |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | — | — | ПОП А | Извлечь А из стека |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | — | — | ПОП X | Извлечь X из стека |
1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | — | — | ПОП СС | Извлечь коды условий из стека |
1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | — | — | (сдержанный) | |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | — | — | НАЖМИ А | Вставить A в стек |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | — | — | НАЖМИТЕ X | Поместить X в стек |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | — | — | НАЖМИТЕ CC | Поместить коды условий в стек |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | — | — | (сдержанный) | |
1 | 0 | 0 | 0 | 1 | 1 | 0 | — | — | — | (сдержанный) | |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | — | — | ОСТАНОВИТЬ | Остановить процессор и часы |
1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | — | — | ВиДи | Ожидание прерывания, остановка процессора, но не часов |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | — | — | ПДД | Префикс инструкции; поменять местами X и Y в следующей инструкции |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | — | — | ПИИ | Префикс инструкции; PDY плюс PIX |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | — | — | ПИКС | Префикс инструкции; использовать 8-битную косвенную память для операнда |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | — | — | ЛД X,Y | X := Y. С PDY делает "LD Y,X". |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | — | — | ЛД С,Х | S := X. Загрузить указатель стека. |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | — | — | ЛД С,А | S := A. Загрузить указатель стека. |
1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | — | — | ЛД Х,С | Х := С. |
1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | — | — | ЛД Х,А | Х := А. |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | — | — | РЦФ | Сбросить (очистить) флаг переноса |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | — | — | СКФ | Установить флаг переноса |
1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | — | — | ОПРАВА | Сбросить маску прерываний (включить прерывания) |
1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | — | — | СИМ-карта | Установить маску прерываний (отключить прерывания) |
1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | — | — | РСП | Сбросить указатель стека (в начало ОЗУ) |
1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | — | — | НОП | Нет операции. (=LD A,A) |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | — | — | ЛД А,С | А := С |
1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | — | — | ЛД А,Х | А := Х. |
1 | режим | код операции | ценить | ? | Инструкции с двумя операндами A := A операнд | ||||||
1 | 0 | 1 | 0 | код операции | имм8 | — | ОП # imm8 | 8-битный непосредственный операнд (запрещено использовать в качестве назначения) | |||
1 | 0 | 1 | 1 | код операции | адрес8 | — | ОП адрес8 | 8-битный абсолютный адрес | |||
1 | 1 | 0 | 0 | код операции | аддри | addrlo | ОП адрес16 | 16-битный абсолютный адрес | |||
1 | 1 | 0 | 1 | код операции | аддри | addrlo | ОП ( addr16 ,X) | Индексировано с 16-битным смещением | |||
1 | 1 | 1 | 0 | код операции | адрес8 | — | ОП ( addr8 ,X) | Индексировано с 8-битным смещением | |||
1 | 1 | 1 | 1 | код операции | — | — | ОП (Х) | Индексировано без смещения | |||
1 | режим | 0 | 0 | 0 | 0 | ценить | ? | SUB A, операнд | A := A − операнд | ||
1 | режим | 0 | 0 | 0 | 1 | ценить | ? | CP A, операнд | Сравнить A − операнд | ||
1 | режим | 0 | 0 | 1 | 0 | ценить | ? | SBC A, операнд | Вычитание с заемом A := A − операнд − C | ||
1 | режим | 0 | 0 | 1 | 1 | ценить | ? | CP X, операнд | Сравнить X − операнд | ||
1 | режим | 0 | 1 | 0 | 0 | ценить | ? | И А, операнд | A := A & операнд, побитовое И | ||
1 | режим | 0 | 1 | 0 | 1 | ценить | ? | BCP A, операнд | Побитовая проверка A и операнда | ||
1 | режим | 0 | 1 | 1 | 0 | ценить | ? | LD A, операнд | Загрузить A := операнд | ||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | имм8 | — | (зарезервировано, =LD #imm8,A) | |
1 | режим | 0 | 1 | 1 | 1 | ценить | ? | Операнд LD ,A | Сохранить операнд := A | ||
1 | режим | 1 | 0 | 0 | 0 | ценить | ? | XOR A, операнд | A := A ^ операнд, исключающее ИЛИ | ||
1 | режим | 1 | 0 | 0 | 1 | ценить | ? | АЦП А, операнд | A := A + операнд + C, сложить с переносом | ||
1 | режим | 1 | 0 | 1 | 0 | ценить | ? | ИЛИ А, операнд | A := A | операнд, включительно или | ||
1 | режим | 1 | 0 | 1 | 1 | ценить | ? | ДОБАВИТЬ X, операнд | А := А + операнд | ||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | имм8 | х | (зарезервировано, =JP #imm8) | |
1 | режим | 1 | 1 | 0 | 0 | ценить | ? | JP операнд | PC := операнд, безусловный переход | ||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | soff8 | — | Метка CALLR | PUSH PC, PC := PC + операнд |
1 | режим | 1 | 1 | 0 | 1 | ценить | ? | Операнд CALL | Нажмите ПК, ПК := операнд | ||
1 | режим | 1 | 1 | 1 | 0 | ценить | ? | LD X, операнд | Загрузить X := операнд | ||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | имм8 | — | (зарезервировано, =LD #imm8,X) | |
1 | режим | 1 | 1 | 1 | 1 | ценить | ? | Операнд LD ,X | Сохранить операнд := X |