ZX-Ревю 1995 №1 1994 г.

Маленькие хитрости - Нюанс в использовании команд переброски.


МАЛЕНЬКИЕ ХИТРОСТИ

Нюанс в использовании команд переброски

Н.Новгород, 1995.

Сообщаю один интересный фактик . Команды блоковых операций микропроцессора Z80 (LDIR, LDDR, CPIR, CPDR и им подобные) считы-ваются процессором из памяти в каждом цикле выполнения, то есть так же, как и простые команды. Пример:

8000 210070 LD HL,#7000 8003 110170 LD DE,#7001 8006 01FF8F LD BC,#8FFF 8009 75 LD (HL),L

800A EDBO LDIR 800C C9 RET

Если при вызове этой программы стек установлен ниже #7000 или выше #9000, то по команде RANDO

(С) IWN,

MIZE USR 32768 выполнится очистка памяти не по адресам #8000-#FFFF, а всего лишь #7000-#800А.

Это происходит потому, что N раз процессор считывает из памяти код команды LDIR (#ED #В0), И последний раз - #00 #В0 (то есть NOP и OR В, которые и выполняет), а затем - команду RET.

При этом возникает огромное поле для экспериментов на тему защиты, ''извращенных" методов переброски блоков, когда блок при переброске накладывается на уже переброшенную свою часть, которая модифицировала команду LDIR (LDDR), заменив ее, например, на LDDR (LDIR) или на какой-нибудь ЭР (например #18 #В0).

Примечание: к сожалению, не было возможности проверить этот факт на советских аналогах Z80.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Coding - Принцип упаковки анимаций в демо JAM.
Письмо №280 - Балашов
Программирование - Несколько коротких и быстрых процедур: Плавающая стрелка, Турбо-лоадер, Скрин-сейвер RADUGA, Четыре волновых бегущих строчки как у RST7, Печать 16-битных чисел, 128 bytes intro.

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