ZX Review #7-8-9-10
08 ноября 1997 |
|
Retro - 40 best procedures for: Search and replace strings.
8.7. Search and replace string Length: 85 Number of variables: 3 Checksum: 8518 Purpose: The program searches character string in the BASIC program and makes the replacement of each found string thong to the next line the same length. Variables: Name: old data start Length: 2 Cell: 23296 Comment: The address of the first byte replacement string. Name: string length Length: 1 Cell: 23298 Comment: The length of the replacement string. Name: new data start Length: 2 Cell: 23299 Comment: The address of the first byte replacement string. Subroutine call: RANDOMIZE USR address Error control: if the length line is 0 or BASIC program in memory is not, then the procedure returns immediately in BASIC. Comment: time This program depends on the length line and the length of the BASIC program. LISTING machine code Assembly label number to VVODA147. LD IX, (23296) 221 42 0 91 LD HL, (23635) 42 83 92 LD A, (23 298) 58 February 1991 LD E, A 95 CP 0254 0 RET Z 200 DEC HL 1943 NEWLIN INC HL 35 INC HL 35 INC HL 35 INC HL 35 JR RESET 24 23 CHECK INC HL 35 PUSH DE 213 LD DE, (23627) 237 91 75 92 AND A 167 SBC HL, DE 237 82 ADD HL, DE 25 POP DE 209 RET NC 208 LD A, (HL) 126 CP 13254 1913 JR Z, NEWLIN 40233 CALL 6326 205 182 1924 JR NZ, COMPAR 32 8 DEC HL 1943 RESET PUSH IX 221229 POP BC 193 LD D, 0 22 0 JR CHECK 24226 COMPAR LD A, (BC) 10 CP (HL) 190 JR NZ, RESET 32 245 INC BC 3 INC D 20 LD A, L 122 CP E 187 JR NZ, CHECK 32216 PUSH HL 229 LD D, 0 22 0 AND A 167 SBC HL, DE 237 82 LD D, E 83 LD BC, (23299) 237 75 March 1991 INC D 20 NEXT_CHINC HL 1935 DEC D 21 JR Z, FINISH 40 5 LD A, (BC) 10 LD (HL), A 119 INC BC 3 JR NEXT_C 24247 FINISH POP HL 225 JR RESET 24 215 2 How it works: In IX load address of the replacement string. This value should be higher RAMTOP. In HL load address of the beginning of program area, and the battery loaded length of the string is copied to the E-register for further use in program. If the string is equal to 0, the program returns in BASIC. Fits HL, indicating at the next byte pointer BASIC-line, and done transition to the RESET. The procedure CHECK HL increases, pointing to the next symbol. DE stored in the stack and loads the address of the variables. If HL is not less than DE, program end is reached, and after the restoration of DE from the stack the program returns to BASIC. In the battery symbol is loaded at the address in HL. If this value is a sign of ENTER, the program returns to NEWLIN. If the battery does not contain sign of NUMBER (character 14), made the transition to COMPAR, otherwise HL increases by 5, so that the HL indicates the fifth byte of the found. The procedure for the RESET BC loaded the address for search strings. Register D is set to 0 to store the number of characters per line, found to time. The program then returns to the CHECK. In the procedure COMPARE in the battery loaded character of the string pointed to a pair of registers, BC. If this value differs from the byte at the address in HL, program jumps to the RESET. BC increases, pointing to the next character in the string register D, the counter increases. If This value is not equal to the length line, the program returns to CHECK. If the string is found, HL stored on the stack, so the program starts searching for the next case from this address. In DE load string length and this value is subtracted from HL, giving meaning to one less than the starting address. Length of the string and then loaded into the D to use it as a counter. In BC loads the starting address of the replacement string, and register D is increased. Register HL increases, pointing to the next cell and the counter decreases. If the counter is 0, HL recovered from the stack and made the transition to the RESET for the next case. In battery loaded symbol, which indicates BC, and this value is placed in a cell at a HL. BC increases, indicating the next character, and the program returns to NEXT_CHAR.
Other articles:
Similar articles:
В этот день... 21 November