В этом разделе мы рассмотрим конструкции, выполняющие следующие манипуляции с данными: копирование, хранение, перемещение, обмен, ввод, вывод, удаление и установку.
2.3.1. Конструкции копирования и загрузки данных.
112. Копирование из адреса в регистр. LD reg, (ADDR) LD A, (ADDR)
LD reg, A
ИЛИ
LD HL,ADDR LD reg,(HL)
113. Загрузка числа во флаговый регистр. LD F, N LD rpl, N
PUSH HL POP AF
114. Копировать данные из адреса во флаговый регистр. LD F, (ADDR) LD HL, (ADDR)
PUSH HL POP AF
115. Скопировать в HL данные из адреса, содержащегося в
HL .
LD HL, (HL) LD A, (HL)
INC HL LD H, (HL) LD L, A
116. Загрузить в BC или DE данные из адреса, содержащегося
в HL.
LD rp, (HL) LD rpl, (HL)
INC HL LD rph, (HL) DEC HL
2.3.2. Конструкции, предназначенные для сохранения данных.
117. Копировать содержимое регистра в память.
ИЛИ
LD HL,ADDR LD (HL),reg
118. Копировать содержимое флагового регистра в память. LD (ADDR) , F PUSH AF
POP HL
LD (ADDR) , HL
ИЛИ
PUSH AF POP HL LD A, L LD (ADDR) , A
119. Копировать содержимое регистровой пары в ячейку памяти, адрес которой находится в HL.
LD (HL),rp LD (HL),rpl
INC HL LD (HL),rph DEC HL
2.3.3. Конструкции перемещения данных.
12 0. Перенос аккумулятора во флаговый регистр. LD F, A LD rpl, A
PUSH rp POP AF
Перенос флагового регистра в аккумулятор. PUSH AF POP rp LD A,rpl
Перенос данных из одной регистровой пары в другую LD rp2l,rp 11 LD rp2h,rp1h 123. Перенос указателя стека в HL.
LD HL,0 ADD HL , S P
Перенос указателя стека в индексный регистр. LD xy, 0 ADD xy, SP
Перенос содержимого регистровой пары в индексный
PUSH rp POP xy
12 6. Перенос содержимого индексного регистра в регистровую
пару.
LD rp, xy PUSH xy
POP rp
127. а) Перенос из IX в IY.
LD IY, IX PUSH IX
POP iy б) Перенос из IY в IX. LD IX,IY PUSH IY
POP IX
128. Перенос данных из HL в программный счетчик. LD PC, HL JP (HL)
12 9. Перенос данных из индексного регистра в программный счетчик.
LD PC, xy JP (xy)
130. Перенос данных из двух байтов памяти в программный счетчик (косвенный переход).
LD PC,(ADDR) LD HL,(ADDR)
JP (HL)
131. Заполнение области памяти данными, содержащимися в аккумуляторе. Адрес начала области - в HL. Длина области - в регистре В.
FILL: LD (HL),A - копирование акк-ра в память
INC HL - переход к следующему адресу
DJNZ FILL - повторить, если В<>0
124. LD xy, SP
125 . регистр. LD xy,rp
132. Обмен между регистрами через аккумулятор
EX reg1, reg2 LD A,reg1
LD reg1, reg2 LD reg2, A
133. Другие пути обмена между регистрами.
а) между BC и HL:
EX BC, HL PUSH BC
EX HL, (SP) POP BC
б) между произвольными регистровыми парами: EX reg1, reg2 PUSH rp1,
PUSH rp2 POP rp1 POP rp2
134. Обмен между указателями стека и HL.
EX SP, HL EX DE, HL - сохранить HL в DE
LD HL,0 - поместить указатель стека ADD HL,S P в регистр HL EX DE,HL - восстановить HL LD SP, HL - поместить HL в SP EX DE,HL - восстановить в HL значение SP Эта процедура может применяться, если пользователь организует свой машинный стек, отличный от системного, например, при одновременной работе с двумя программами. Они "прозрачны" друг для друга.
135. Обмен индексного регистра с регистровой парой. EX xy,rp PUSH xy
PUSH rp POP xy POP rp
13 6. Обмен индексных регистров. EX IX,IY PUSH IX
PUSH IY POP IX POP IY
137. Очистка аккумулятора.
SUB A или XOR A или LD A,0
Третий вариант работает медленнее, чем два первых и занимает больше памяти, но зато не влияет на флаги. Применяйте тот вариант, который Вам больше подходит.
138. Очистка регистра.
LD reg, 0
139. Очистка заданной ячейки памяти.
SUB A
LD (ADDR) , A
ИЛИ
LD HL,ADDR LD (HL),0
Второй вариант более медленный, но зато не затрагивает ни содержимое аккумулятора, ни флаги.
140. Очистка флага переноса.
AND A ИЛИ OR A
ИЛИ SCF
CCF
2.3.6. Конструкции установления заданного значения
141. Установить в аккумулятре FF. (Аналог LD A,FF)
SUB A DEC A
142. Установить FF в заданном адресе. LD (ADDR) , FF LD A, FF
LD (ADDR) , A
ИЛИ
LD HL,ADDR LD (HL) , FF