Страница Ивана Рощина > Статьи >

© Иван Рощин, Москва

ZXNet: 500:95/462.53
E-mail: bestview@mtu-net.ru
WWW: http://www.ivr.da.ru

По поводу релоцируемых программ

(«ZX-Ревю» 5—6/1997)
Дата последнего редактирования: 14.11.2002.

Прочитав в «ZX-Ревю» несколько статей, посвящённых релоцируемым программам, я заметил, что для определения базового адреса обычно используется следующий способ:

 CALL #007C  ; По этому адресу - RET.
 DEC  SP     ; Т.к. в стеке находится
 DEC  SP     ; адрес возврата.
 POP  HL     ; Снимаем адрес со стека.

У этого способа имеется несколько недостатков:

Есть способ, свободный от указанных выше недостатков:

 HALT    ; В стек запишется адрес
         ; следующей команды (для
         ; возврата из прерывания).
 DEC  SP ; Так же, как и в первом
 DEC  SP ; фрагменте,
 POP  HL ; снимаем адрес со стека.

При этом расход памяти составит лишь четыре байта вместо шести. В отличие от предыдущего примера, прерывания во время работы этого фрагмента программы должны быть разрешены (чтобы выполнилась команда HALT). Несмотря на это, между командами DEC SP прерывание не может произойти, т.к. после выполнения команды HALT остаётся ещё 1/50 секунды до следующего прерывания.

Другие мои статьи о различных приёмах оптимизации при программировании на ассемблере Z80:

1. 

«Z80: оптимизация загрузки констант в регистры». «Радиолюбитель. Ваш компьютер» 9/2000, 2/2001 (под псевдонимом BV_Creator).

2. 

«Ещё о программировании арифметических операций». «Радиолюбитель. Ваш компьютер» 12/2000, 1—4/2001.

3. 

«Влияние команды OUTD на флаг переноса». «Радиолюбитель. Ваш компьютер» 5/2001, «Радиомир. Ваш компьютер» 8/2003 (под псевдонимом BV_Creator).

4. 

«Оптимизация на примере intro „Start“». «Радиомир. Ваш компьютер» 7—10/2001.

5. 

«Менеджер вызова подпрограмм из различных банков памяти». «Радиомир. Ваш компьютер» 12/2001, 2/2002, 4/2002.

6. 

«Улучшение сжатия программ на ассемблере Z80». «Радиомир. Ваш компьютер» 4/2003.

7. 

«Процедура сравнения строк на ассемблере Z80». «Радиомир. Ваш компьютер» 6/2003.

Страница Ивана Рощина > Статьи >