Программирование в машинных кодах и на языке ассемблера 1993 г.

Оперативная память - Команды обработки блоков памяти.


5.16. Команды обработки блоков памяти

 

Это очень мощные команды. Они предназначены для работы с целыми частями памяти. В этой группе 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 поиск по блоку памяти производится не снизу вверх, а сверху вниз.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Видео - Боевик 96-го года "Спина к спине".
О разном - Arhon рассуждает о причинах увядания геймдева на Спектруме.
Сюжет - Новелла к игре "Криминальное аббтство" (La abadia).
X-Files - Воздействие НЛО на здания, животных, людей.
Демопати - интерьвью взятое Kvazar на CC'999 у группы 4D (pROF и JTN).

В этот день...   21 ноября