In assembler language the prefix is invoked by placing the appropriate repeat (REP) mnemonic before the primitive.
Figure 5-7 REP prefix Name Mnemonic and Format Termination Condition Repeat string operation REP String Primitive* (CX)=0 until CX=0 Repeat string operation REPE String primitive** (CX)=0 or (ZF)=0 while equal or zero or REPZ Repeat string operation REPNE String primitive** (CX)=0 or (ZF)=0 while not equal or or not zero REPNZ *MOVS,LODS or STOS **CMPS or SCAS Note: In all cases (CX) <- (CX)-1 with each operation.As an example of the use of the REP prefix let us reconsider the program sequence for moving a string within memory given in Fig. 5-2(b).By replacing the explicit loop
MOVE: MOVS STRING2, STRING1 LOOP MOVE with REP MOVS string2, STRING1not only is the code simplified, but the execution time is reduced from
18 + 17 = 35 clock cycles per iteration to 9 + 17 = 26 clock cyclesfor the first iteration and 17 clock cycles for each subsequent iteration.
MOV BX, TABLE SIZE ;LOAD NO.OF ENTRIES INTO BX LES DI, TABLEPT ;LOAD OFFSET AND SEGMENT ADDRESS ;OF THE ARRAY TO BE SEARCHED MOV DX, DI ;SAVE OFFSET IN DX LDS SI, SYMBOLPT ;LOAD OFFSET AND SEGMENT ADDRESS ;OF THE SYMBOL TOBE SEARCHED FOR CLD ;START FROM THE FIRST ENTRY LOOP1: MOV CX, 8 REPE CMPSB ;COMPARE TWO CORRESPONDING JE FOUND ;CHARACTERS UNTIL NO MATCH ADD DX, 20 ;POINT TO THE NEXT TABLE ENTRY MOV DI, DX MOV SI, OFFSET SYMBOL ;POINT TO THE FIRST CHARACTER DEC BX JNE LOOP1 NOT FOUND: . . FOUND: . . Figure 5-8 Search a table for a given name with eigthcharacters MOV CX, LENGTH ASCII_STG ;INITIALIZE SEARCH MOV AL, '$' MOV DI, OFFSET ASCII_STG CLD LOOP1: REPNZ SCAS ASCII_STG ;SEARCH FOR '$' AND JNZ DONE MOV BYTE PTR[DI-1],'_' ;REPLACE WITH '_' JMP SHORT LOOP1 DONE: . . . Figure 5-9 Replace each "$" in a character string with a "_"
PRETHODNA FOLIJA | SADRZAJ | SLEDECA FOLIJA |