The training course assembler
(C) WLODEK BLACK
007h. TEAM 16-bit hop.
They are not very many:
_______________________________________________
LD HL, d16 LD HL, (addr) LD (addr), HL
LD DE, d16 - "- -" LD BC, d16 - "- -" LD IX, d16 - "- -" LD IY,
d16 - "- -" LD SP, d16 - "- -" (D16 - 16-bit constant).
_______________________________________________
LD SP, HL
LD SP, IX
LD SP, IY
___________
EX DE, HL - share the values of HL and DE.
____________________________________________
EX (SP), HL - HL share values and a word from the top of the
stack.
EX (SP), IX
EX (SP), IY
______________________________________________________________
Team with a pair HL the shortest and most effective.
Addition to the theme of "eight-forwarding."
Command group transfers.
This group of commands is very modest in number but very
important because of the tremendous performance of its member
only 4 commands:
LDIR (Load with Increment of Register)
LDDR (Load with Decrement of Register)
LDI
LDD
All these commands use register pair HL, DE and BC
and a register of flags F:
HL = address of "source"
DE = address of the "where"
BC = number of bytes sent.
LDIR operates on the basis of the increment, that is,
"Increment" - each elementary stage of the operation sends
bytes and This current source and destination addresses are
incremented by 1. Count on a pair of BC reduces its value to
1.Strogy alignment LDIR operations on the workflow is as
follows: 1. Is taken from an address byte (HL);
2. Byte is stored at (DE);
3. HL and DE are increased by 1;
4. BC value is reduced by 1;
5. Checked to see if BC zero. If so, then reset to 0
Flag P / V, and the operation is completed. If not, then:
6. Program counter is decreased by 2 (the length of the command
code); 7. The command code is read again from memory, and the
process repeats from step 1.
Penetrating the subtleties of the above sequence, you can do
A number of important conclusions:
- At the exit of LDIR: HL and DE indicate the address to the
unit
more addresses all forwarded the block and the host region
STI; flag P / V is 0;
- Register-battery will not change its current
of values;
- LDIR is not an elementary team and, in fact, complex
operator of the cycle. The fact that after the transfer of
each byte
command code is read again from memory entails for
At least two consequences. One of them is obvious: forward
block codes in memory with overlapping command itself LDIR
impossible.
The second consequence of the more tricky: the work of the
team can exceed LDIR discontinuity interrupts (sounds ugly,
but how else to say?).
Team LDDR sends a block of codes in the direction of decreasing
addresses; otherwise it is similar LDIR. The presence of teams
like LDIR, and LDDR can effectively transmit block codes with
partial superposition of the field receiver on the source
region.
LDI and LDD carry forward only one byte for a single call to
the team. On completion of sending the whole unit can be judged
the flag P / V - in which case it will be reset to 0.
Command group forward - the only operating transfer from memory
to memory, bypassing the 8-bit general purpose registers.
(C) WLODEK BLACK