ZX-Ревю 1997 №1-2 1997 г.

Этюды - несколько полезных советов для написания оптимальных процедур.


(с) Василий.

Hello, Inforcom. Я хочу на страницах вашего журнала обратиться к вашим читателям, посылающим свои процедуры в раздел Этюды.

Уважаемые "производители" этюдов! Прежде чем посылать в журнал свои процедуры постарайтесь сначала оптимизировать их, сделать проще и эффективнее. Не торопитесь! Пусть Ваша процедура прекрасно работает, пусть даже в ней заложена хорошая и нужная идея, но если ее можно сделать короче в 1,5 раза, и если она ужасна по своей структуре, то какой же это "перл" и, тем более, "алмаз" Этим самым Вы портите замечательную идею ААИванова. Я конечно же имею в виду не все про-

_ZX-PeniP >y/1"g

ЭТЮДЫ

цедуры - некоторые из них воистину шедевры, но речь идет не о них.

В качестве примера (я мог взять любой другой) привожу на ваш суд свое собственное решение процедуры Redefine Keys (аналогичную процедуре А.Шокало и написанную мной еще полгода назад). Она занимает всего 14 байт (у А.Шокало 23 байта). Вот она: REDEF LD BC,#7FFE С1 RRC В

IN А,(С) CPL

AND 31 JR Z,C1 LD С,A RET

Сравните ее с процедурой А.Шокало (ZX РЕВЮ 96/4-5). Как Вы видите она гораздо короче, проще и понятнее. Старший байт порта в регистре В, бит нажатой клавиши установлен в С.

И в заключение даю в таблице пару советов, посвященных оптимизации программ (уж это то должен знать каждый, кто работает в ас

Предлагаю вам также переделанную мною процедуру TRANSF (2 TRANSF

байт против 46).

CALL

CO

RLCA

RLCA

RLCA

LD

E.A

LD

A,B

CPL

CALL

CO

ADD

A.E

LD

E,A

LD

A, 44

SUB

E

LD

L,A

LD

H,2

LD

A.(HL)

RET

LD

H,#FF

INC

H

RRA

JR

NC.CC

LD

A,H

RET

СО СС

семблере):

Команда

Команда на которую можно заменить

Примечание. Следует учитывать при замене

xor #ff

cpl

Инверсия регистра A. CPL не изменяет, в отличии от XOR, флаги CY, Z, P/V, S

ср 0

and a (or а)

При проверке на 0, СР 0 можно заменить на AND А. Флаг Z устанавливается точно также.

and х ср 0 jr z,lll

and х jr z,lll,

где x=n,A,B,C,D,E,H, L,(hl),(ix+d),(iy+d)

ср 0 делать не обязательно, см 2.

Id а,0

xor a, sub a

При SUB А и XOR А портятся флаги, поэтому использование их не всегда возможно. (Команда LD флаги не портит)

scf ccf

and a

Обнуление флага CY. AND А портит другие флаги и это следует учитывать

ret z

jr z,mmm

Выигрыша в размере нет, но

jr mmm

ret

Вашу процедуру будет легче читать(видно конец процедуры)!

P.S. Предлагаю конкурс. Придумайте процедуру календарь. В регистре DE задается год, в регистре А - число. Нужно получить в регистре

А день недели (0...6 или 1...7, где 0 и 7

- воскресенье).

*********************************************************




СОДЕРЖАНИЕ:


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

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




Похожие статьи:

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