ZX Pilot #35
27 ноября 1999 |
|
Coding - code optimization techniques.
C O D I N G (C) SERGIUS PUZZLER - Dad, and Th me de lat with this garbage? - Yes, simply Zaksor his son ... P. Fuzz. I'll be brief. If you frequently use a lot here this construction: ... M_FLAG1 EQU +1 LD A, FLAG OR A CALL NZ, PROGA ... but want to simplify it and save a little, then I suggest you the following: ... M_FLAG1 SCF; (or OR A) CALL C, PROGA ... Savings of 2 bytes multiplied the number of such structures in your program. - Not so much - you exclaim, - but I've not promised - will be response. SCF include a carry flag and work CALL C. OR A turn off the flag - CALL C naturally does not work. A controlled with a flag like this, Makar: ; ON FLAG LD A, # 37; SCF - FC = 1 LD (M_FLAG1), A ... ; OFF FLAG LD A, # B7; OR A - FC = 0 LD (M_FLAG1), A ... ; TOGGLE FLAG LD A, (M_FLAG1) XOR # 80 LD (M_FLAG1), A ... Nothing new okromya XOR # 80, which switches the seventh bit in the cell at M_FLAG1 tinkering with SCF in OR A, or vice versa. If you have many addresses like M_FLAG1, then, for programming convenience, I offer the following: ... LD HL, **; address of the selected flag CALL * _FLG; * - SET / RES / XOR ... ... SET_FLG; INCLUDE RES 7, (HL) RET RES_FLG; OFF SET 7, (HL) RET XOR_FLG; SWITCH LD A, (HL) XOR # 80 LD (HL), A RET ... Each procedure call SET / RES / XOR teperecha takes into RAM 6/6/6 bts, and held - 5/5/8 bts. Thus the average We did not win, but not lost but, hopefully, become easier to program. And yet another procedure SET / RES / XOR (11 bts), ipolzuemaya for 3 or more flags at the same time, saves. Now a little about one another. In Miracle # 3 If my memory serves me (yes seems to be no one) has an article about optimizing your code. Its author, PSV / Dream Team, led one procedure that requires clarification. To speed up the cycle of the form: ... LD BC, COUNT LOOP ... cycle body ... DEC BC; works LD A, B; enough OR C; slowly JR NZ, LOOP ... He offered to do so: ... LD BC, COUNT LOOP ... cycle body ... DEC C JR NZ, LOOP DEC B JR NZ, LOOP ... There is no doubt that this version works faster, but it is checked (even in the mind) has identified an incorrect setting counter BC. Let me explain: if we run the following procedure (idiot actually has nothing to do with): ... LD HL, 0 LD BC, # 0101, 257 (DEC) LOOP INC HL; cycle body DEC C JR NZ, LOOP DEC B JR NZ, LOOP ... at the exit of HL we find the value equal to 1, instead of the expected - 257. Conclusion: after setting the counter BC, it is necessary to adjust - to increase by 256. And here is the final version: ... LD BC, COUNT INC B; missing team LOOP ... cycle body ... DEC C JR NZ, LOOP DEC B JR NZ, LOOP ... Still not very tired? :) Yes? No? Press "Y" for Yes or "N" for No. A better fit stress. Right marker on the monitor. See you soon. In Kaa ... SP.WH!
Other articles:
Similar articles:
В этот день... 21 November