📄 loop.htm
字号:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><HTML><HEAD><TITLE>80386 Programmer's Reference Manual -- Opcode LOOP</TITLE></HEAD><BODY><B>up:</B> <A HREF="c17.htm">Chapter 17 -- 80386 Instruction Set</A><BR><B>prev:</B><A HREF="LODS.htm"> LODS/LODSB/LODSW/LODSD Load String Operand</A><BR><B>next:</B><A HREF="LSL.htm"> LSL Load Segment Limit</A><P><HR><P><H1>LOOP/LOOPcond -- Loop Control with CX Counter</H1><PRE>Opcode Instruction Clocks DescriptionE2 cb LOOP rel8 11+m DEC count; jump short if count <> 0E1 cb LOOPE rel8 11+m DEC count; jump short if count <> 0 and ZF=1E1 cb LOOPZ rel8 11+m DEC count; jump short if count <> 0 and ZF=1E0 cb LOOPNE rel8 11+m DEC count; jump short if count <> 0 and ZF=0E0 cb LOOPNZ rel8 11+m DEC count; jump short if count <> 0 and ZF=0</PRE><H2>Operation</H2><PRE>IF AddressSize = 16 THEN CountReg is CX ELSE CountReg is ECX; FI;CountReg := CountReg - 1;IF instruction <> LOOPTHEN IF (instruction = LOOPE) OR (instruction = LOOPZ) THEN BranchCond := (ZF = 1) AND (CountReg <> 0); FI; IF (instruction = LOOPNE) OR (instruction = LOOPNZ) THEN BranchCond := (ZF = 0) AND (CountReg <> 0); FI;FI;IF BranchCondTHEN IF OperandSize = 16 THEN IP := IP + SignExtend(rel8); ELSE (* OperandSize = 32 *) EIP := EIP + SignExtend(rel8); FI;FI;</PRE><H2>Description</H2>LOOP decrements the count register without changing any of the flags.Conditions are then checked for the form of LOOP being used. If theconditions are met, a short jump is made to the label given by the operandto LOOP. If the address-size attribute is 16 bits, the CX register is usedas the count register; otherwise the ECX register is used. The operandof LOOP must be in the range from 128 (decimal) bytes before theinstruction to 127 bytes ahead of the instruction.<P>The LOOP instructions provide iteration control and combine loop indexmanagement with conditional branching. Use the LOOP instruction byloading an unsigned iteration count into the count register, then code theLOOP at the end of a series of instructions to be iterated. Thedestination of LOOP is a label that points to the beginning of theiteration.<H2>Flags Affected</H2>None<H2>Protected Mode Exceptions</H2>#GP(0) if the offset jumped to is beyond the limits of the current codesegment<H2>Real Address Mode Exceptions</H2>None<H2>Virtual 8086 Mode Exceptions</H2>None<P><HR><P><B>up:</B> <A HREF="c17.htm">Chapter 17 -- 80386 Instruction Set</A><BR><B>prev:</B><A HREF="LODS.htm"> LODS/LODSB/LODSW/LODSD Load String Operand</A><BR><B>next:</B><A HREF="LSL.htm"> LSL Load Segment Limit</A></BODY>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -