MOV ri, rj | ri rj | <B1> | ri | rj |
По этой команде в регистр ri загружается копия данных, содержащихся в регистре rj. В качестве регистров могут выступать: аккумулятор (А), РОН B,C,D,E,H,L , имеющие свой трехразрядный двоичный код.
Команда выполняется за один цикл, содержащий 5 тактов. В качестве одного из регистров можно выбрать память (M). В этом случае команда выполняется за 2 цикла (7 тактов), при этом данные пересылаются в регистр из ячейки ЗУ с адресом, хранящимся в паре регистров HL , или в обратном направлении.
Примеры:
015A) MOV B, A
По этой команде данные, находящиеся в аккумуляторе/регистр будут переданы в регистр В. После выполнения команды в аккумуляторе и в регистре В содержатся одни и те же данные
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
015A | ||
А | DB | DB |
В | AF | DB |
PC | 015A | 015B |
После выполнения команды содержимое регистра признаков останется без изменения.
016A) MOV M, A
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
016A | ||
H | 0E | 0E |
L | AD | AD |
A | 5B | 5B |
0EAD | 5B | |
PC | 016A | 016B |
Непосредственная пересылка
MVI ri, Данные | ri <B2> <B1> | ri | |||
<B2> | Данные | ||||
По этой команде в регистр ri загружаются данные, которые находятся во втором байте команды. Команда двухбайтовая, выполняется за два машинных цикла (7 тактов). Если в качестве регистра используется память (M), т.е. ri =M ,то данные пересылаются в ячейку памяти [(H)(L)].В этом случай команда выполняется за 3 цикла (10 тактов). При выполнении команды содержимое триггеров признаков не меняется.
Пример:
0148) MVI B, 25
По этой команде данные, находящиеся во втором байте команды (25 Н) загружаются в регистр В, имеющий двоичный код 000.
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
В | B5 | |
PC | 014A |
Непосредственная загрузка пары регистров
LXI ri, Данные | ri <B3> < B1> | ri | |||
ri+1 <B2> <B2> | Мл. байт данных (7-0) | ||||
<B3> | Ст. байт данных (15-8) | ||||
ri –код старшего регистра пары (B, D, H).
При ri = 110: SP <B3><B2>, то есть загружается указатель стека.
По этой команде в 16-разрядную пару регистровBC, DE или HL заносятся данные, содержащиеся во втором и третьем байтах команды, причем данные заносятся соответственно в младший и старший регистры пары. Это 3-х байтовая команда, выполняемая за три цикла (10 тактов). При выполнении команды содержимое триггеров признаков не меняется.
Пример:
0124) LXI H, 48A7
По этой команде данные, находящиеся во втором байте команды (число А7 Н) будут переданы в регистр L, а число, записанное в третьем байте (48 Н) - в регистр Н. Содержимое ячеек памяти при этом не меняется, как и регистр признаков.
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
A7 | A7 | |
H | DE | |
L | AD | A7 |
PC |
Запоминание/загрузка аккумулятора и пары HL
а)
STAX B | [(B)(C)] (A) <B1> |
б)
STAX D | [(D)(E)] (A) <B1> |
в)
LDAX B | (A) [(B)(C)] <B1> |
г)
LDAX D | (A) [(D)(E)] <B1> | |||
По командам группы а) и б) содержимое аккумулятора запоминается в оперативной памяти по адресу, хранимому в паре регистров ВС (а) или DE (б). По командам группы в) и г) содержимое оперативной памяти из ячейки, адресом которой является содержимое пары регистров ВС (в) или DE (г), загружается в аккумулятор.
Команды группы а - г являются однобайтовыми и выполняются за два машинных цикла (7 тактов). Для того, чтобы можно было воспользоваться этими командами, в соответствующую пару регистров необходимо предварительно загрузить нужный адрес.
Примеры:
00B1) STAX D
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
00B1 | ||
А | ||
D | ||
E | ||
E3 | ||
PC | 00B1 | 00B2 |
По этой команде содержимое аккумулятора (A)=49H будет скопировано в ячейку памяти с адресом 6699 Н, хранимым в паре регистров DE.
0800) STAX B
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
B | 0A | 0A |
C | ||
A | ||
0A11 | BE | |
FL | ||
PC |
0801) LDAX B
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
0A | 0A | |
B | 0A | 0A |
C | ||
A | BE | |
0A11 | BE | BE |
FL | ||
PC |
0802) LDAX D
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
1A | 1A | |
D | ||
E | ||
E3 | E3 | |
A | E3 | |
FL | ||
PC |
д)
STA Адрес | [<B3><B2>] (A) <B1> | |||
<B2> | Мл. байт адреса | |||
<B3> | Ст. байт адреса |
е)
LDA Адрес | (A) [<B3><B2>] <B1> | ||||
<B2> | Мл. байт адреса | ||||
<B3> | Ст. байт адреса | ||||
По командам д) и е) содержимое аккумулятора запоминается в ячейке памяти, адрес которой приводится во втором и третьем байтах команды (д), или содержимое ячейки памяти, адрес которой приводится во втором и третьем байтах команды, передается в аккумулятор (е).
Команды этой группы трехбайтовые, выполняются за 4 цикла (13 тактов).
1F00) STA 0F1C
По этой команде содержимое аккумулятора скопируется в ячейке памяти с адресом 0F1C
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
1F00 | ||
1F01 | 1C | 1C |
1F02 | 0F | 0F |
0F1C | 2A | |
A | ||
PC | 1F00 | 1F03 |
После выполнения операции и в ячейке 0F1C и в аккумуляторе будет записано одно и то же число.
0803) LDA 0F1C
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
1C | 1C | |
0F | 0F | |
0F1C | 2A | 2A |
A | 2A | |
PC | ||
FL |
ж)
SHLD Адрес | [<B3><B2>] (L) <B1> | |||
[<B3><B2>+1] (H) <B2> | Мл. байт адреса | |||
<B3> | Ст. байт адреса |
з)
LHLD Адрес | (L) [<B3><B2>] <B1> | ||||
(H) [<B3><B2>+1] <B2> | Мл. байт адреса | ||||
<B3> | Ст. байт адреса | ||||
По командам этой группы происходит передача данных из пары регистров HL в две соседние ячейки оперативной памяти (ж) или в обратном направлении (з). 16-разрядный адрес первой ячейки приводится во втором и третьем байтах команды; адрес второй ячейки вычисляется в МП с помощью инкремента (увеличения на единицу) содержимого второго и третьего байтов команды.
Команды этой группы трехбайтовые, выполняются за 5 циклов(16 тактов). При выполнении этих команд содержимое триггеров признаков не изменяется.
0F41) SHLD 32AF
При выполнении этой команды содержимое пары регистров HL будет скопировано в соседних ячейках памяти 32AF и 32B0. При этом содержимое (HL) не изменяется.
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
0F41 | ||
0F42 | AF | AF |
0F43 | ||
32AF | 4B | 5D |
32B0 | 8D | 3F |
H | 3F | 3F |
L | 5D | 5D |
PC | 0F41 | 0F44 |
0806) LHLD 6AFF
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
2A | 2A | |
FF | FF | |
6A | 6A | |
H | FD | |
L | AF | |
6AFF | ||
6B00 | FD | FD |
FL | ||
PC |
Ввод из пары регистров в стек
PUSH ri | <B1> | ri | ||
ri –код старшего регистра пары (B, D, H).
[SP-1] ( ri); [SP-2] (ri+1); SP (SP)-2.
По этой команде содержимое указателя стека (SP) автоматически уменьшается на 1 и в ячейку памяти, адрес которой равен [SP-1]запишется содержимое старшего регистра пары РОН. Затем содержимое указателя стека еще раз уменьшится на 1 и в соседнюю ячейку памяти с адресом [SP-2] запишется содержимое младшего регистра выбранной пары РОН. После второго уменьшения содержимое указателя стека останется без изменения до следующего обращения к нему. Для пар регистров ВС, DE, HL старшими являются регистры В, D, H. Содержимое регистра признаков не меняется. Выполняется за 3 цикла (11 тактов).
Пример:
01BE) PUSH D
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
01BE | D5 | D5 |
SP | 0BB0 | 0BAE |
0BAE | 6E | |
0BAF | ||
D | ||
E | 6E | 6E |
PC | 01BE | 01BF |
080A) PUSH H
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
080A | E5 | E5 |
SP | 0BAE | 0BAC |
0BAC | A5 | |
0BAD | FC | |
H | FC | FC |
L | A5 | A5 |
FL | ||
PC | 080A | 080B |
Ввод А и F в стек
PUSH PSW | <B1> | F5 | |
[SP-1] (A); [SP-2] (F); SP (SP)-2
По этой команде содержимое указателя стека (SP) автоматически уменьшается на 1 и в ячейку памяти с адресом [SP-1] записывается содержимое аккумулятора (А). Затем содержимое указателя стека вновь уменьшается на 1 и является адресом ячейки памяти [SP-2], куда записывается содержимое регистра признаков (F). После этого содержимое указателя стека не меняется до очередного обращения к нему.
Команды 4.5.5 и 4.5.6 используются при входе в подпрограмму, когда необходимо сохранить содержимое некоторых регистров.
Команда выполняется за три цикла (11 тактов). При этом содержимое регистра признаков не меняется.
Примеры:
02A1) PUSH PSW
Адрес | Код до выполнения операции | Код после выполнения операции |
02A1 | F5 | F5 |
A | ||
FL | ||
SP | FF09 | FF07 |
FF07 | XX | |
FF08 | XX | |
PC | 02A1 | 02A2 |
080B) PUSH PSW
Адрес | Код до выполнения операции | Код после выполнения операции |
080B | F5 | F5 |
A | A6 | A6 |
FL | ||
SP | 0BAC | 0BAA |
0BAA | ||
0BAB | A6 | |
PC | 080B | 080C |