Это очень мощные команды. Они предназначены для работы с
целыми частями памяти. В этой группе 8 команд. Четыре команды предназначены для
перемещения блоков памяти из одного места в другое и четыре команды для поиска
заданного байта в заданной области.
5.16.1. Команды перемещения блоков.
В этой подгруппе 4 команды: LDIR, LDI, LDDR, LDD.
Команда LDIR
Ее код ED B0, т.е. это двухбайтная команда. Служит для
перемещения блоков памяти. Для ее работы необходимо, чтобы:
·
в регистровой паре HL находился адрес начала перемещаемого
блока;
·
в регистровой паре DE находился адрес того места, куда
должен перемещаться блок;
·
в паре BC находилась длина перемещаемого блока.
Команда может перемещать блоки в памяти как сверху вниз,
так и снизу вверх, но если перемещение памяти происходит с частичным наложением
нового блока на старый, то тогда возможно перемещение только сверху вниз, иначе
пересылаемые байты запортят те, которые еще не были пересланы.
Команда LDDR
Ее код ED B8, а назначение - то же, что и у команды LDIR.
Регистры HL, DE, BC - выполняют те же функции и должны
быть выставлены так же, как и для команды LDIR.
Разница состоит в том, что если по команде LDIR
сначала пересылается первый байт, затем второй и т.д., то по команде LDDR
- сначала последний, затем предпоследний и т.д. Таким образом, если перемещение
идет с наложением нового блока на старый, то этой командой можно пересылать
блоки снизу вверх.
Команда LDI
Ее код ED A0. Действие этой команды такое же, как и у
команды LDIR, но если команда LDIR выполняет перемещение блока
целиком байт за байтом до тех пор, пока в регистре BC не будет достигнут
ноль, то команда LDI перемещает только один байт. Если при этом в BC
не достигнут ноль, то флаг P/V равен 1, если достигнут, то флаг P/V
равен нулю. По результатам проверки этого флага программист может принять
решение о продолжении действия команды LDI или прекращении. Одним
словом, если команда LDIR выполняет перенос каждого последующего байта
автоматически, то LDI – не автоматически.
Команда LDD
Ее код ED A8. Это такой же неавтоматический аналог LDDR,
как LDI - аналог LDIR.
Время выполнения команд LDD и LDI -
фиксированное и занимает 16 тактов микропроцессора. Время же действия
автоматических команд LDIR и LDDR - неопределенно, так как оно зависит
от размера блока, подлежащего перемещению. Чем он больше, тем больше и время,
но его можно оценить - это 21 такт на перемещение каждого байта, кроме
последнего, на который необходимы 16 тактов. Можно оценить, например, время на
переброску экрана, т.е. 6912 байтов: 6911*21+16=145147 тактов, что при частоте
3.5 МГц составляет, примерно, 0.04 сек.
5.16.2. Команды поиска.
В этой подгруппе 4 команды: CPIR, CPDR, CPI
и CPD.
Команда CPIR
Ее код - ED B1.
Команда просматривает заданную область памяти в поисках
первого встреченного места нахождения заданной величины. Заданный байт должен
быть установлен заранее в регистре А. В регистровой паре HL,
устанавливается начальный адрес, с которого начинается поиск, а в регистре BC
- длина блока, подлежащего проверке.
Команда исполняется до тех пор, пока либо в какой-либо
ячейке не будет найден байт, равный содержимому регистра А, либо пока не
будет исчерпана вся заданная область и в регистре BC не останется ноль.
Многократное повторение команды выполняется автоматически. Поиск ведется снизу
вверх. Если в результате поиска нужный байт найден, то действие команды
прекращается. В регистре HL будет искомый адрес, при этом включается
флаг нуля (Z) и выключается флаг знака (S).
Команда CPDR
Ее код - ED B9.
Действие аналогично команде CPIR, но здесь блок
просматривается сверху вниз. Эта команда также автоматическая.
Команда CPI
Ее код - ED A1.
Команда аналогична CPIR, но в отличие от нее не
является автоматической. Здесь после каждого сравнения очередного байта
программист может принять решение о прекращении или продолжении поиска в
зависимости от состояния флагов регистра F.
Если содержимое проверяемой ячейки и аккумулятора
совпадут, включается флаг нуля, в противном случае он выключен. Если в
процессе поиска нужный байт еще не найден, а содержимое BC уменьшилось
до нуля, то включается флаг переполнения/четности (P/V), в противном
случае он включен.
Поиск по команде CPI выполняется снизу вверх, как
и по команде CPIR.
Команда CPD
Ее код ED 9.
Действие команды аналогично командам CPDR и CPI,
но в отличие от CPDR она неавтоматическая, а в отличие от CPI
поиск по блоку памяти производится не снизу вверх, а сверху вниз.