3. Program Control Instructions
- Program control instructions change or modify the flow of a program
Jump Group of instructions
Jump instructions are classified in to two groups
1. Unconditional Jump
- Control is transferred unconditionally to the
target label which points to the address of target
instruction
E.g. Jmp, call, ret
2. Conditional Jump
- Control is transferred to the target label if a certain
condition is met, otherwise execution continues
with next sequential instruction
- The condition are represented by flags
E.g. jc, jz, jnc, jnz
4. JMP - Unconditional Jump
• Three types : short jump, near jump, and far jump.
• The short jump is a two-byte instruction that allows jumps or branches
to memory locations within +127 and -128 bytes from the address
following the jump.
• A near jump is a three-byte instruction that allows a branch or jump
within ±32K bytes from the instruction in the current code segment.
• far jump is a 5 byte instruction that allows a jump to any memory
location within the real memory system.
• The short and near jumps are often called intrasegment jumps
• the far jumps are often called intersegment jumps.
The general form of the JMP instruction is
jmp label
where label is a program address indentifier
• This instruction unconditionally transfer control of the execution to the specified label
(address) using an 8 bit or 16 bit displacement or CS:IP.
• No flags are affected by this instruction.
• When this instruction is executed ,the CS & IP are unconditionally modified to a new
value of CS & IP corresponding to the location transferred
5. Short Jump
• Short jumps are called relative jumps because they can be moved to any
location in current code segment without a change
• A short jump to four
memory locations
beyond the address of
the next instruction.
• The short jump instruction appears in figure below.
• Example shows how short jump instructions
pass control from one part of the program
to another.
Example
jmp short next (use short directive to force short jump).
6. Near Jump
• The near jump is similar to the short jump, except that the distance is
farther.
• A near jump passes control to an instruction in the current code segment
located within ±32K bytes from the near jump instruction.
A near jump that adds the
displacement (0002H) to
contents of IP.
• The near jump is a 3-byte instruction that
contains an opcode followed by a signed
16-bit displacement.
E.g. jmp next
7. Far Jump
• A far jump instruction transfer control to the target location in different
code segment. This is performed by loading CS with segment address in
which the target exist & IP with the offset address of a instruction to
which control is to be transferred in the new code segment.
• The target address loaded in CS & IP are part of the instruction itself. This is a
5 byte instruction.
A far jump instruction replaces the contents of
both CS and IP with 4 bytes following the
opcode.
E.g. jmp far ptr skip
8. Conditional Jumps Instructions
• The conditional jump instruction transfer control to the address specified (target location)
if some condition is met or satisfied otherwise execution continues sequentially.
• The condition here means the status of the condition flags. The conditional jump
instructions test the following flag bits: sign(S), zero(Z), carry (C), parity(P), overflow(O).
Instruction Condition Tested Comment
JA C = 0 and Z = 0 Jump above
JAE C = 0 Jump above or equal to
JB C = 1 Jump below
JBE C = 1 or Z = 1 Jump below or equal to
JC C=1 Jump carry set
JE or JZ Z = 1 Jump equal to or jump zero
JG Z = 0 and S = 0 Jump greater than
JGE S = 0 Jump greater than or equal to
JL S ≠ 0 Jump less than
JLE Z = 1 or S ≠ 0 Jump less than or equal to
JNC C = 0 Jump carry cleared
JNE or JNZ Z = 0 Jump not equal to or jump not zero
JNO 0 = 0 Jump no overflow
JNS S = 0 Jump no sign
JNP/JPO P = 0 Jump no parity/jump parity odd
JO 0 = 1 Jump on overflow
JP/JPE P= 1 Jump on parity/jump parity even
JS S = 1 Jump on sign
If the condition under test is true, a branch to the label associated with the jump
instruction occurs..
If the condition is false, the next sequential instruction in the program executes.
For example, a JC will jump if the carry bit is set.
Editor's Notes
Controlling the program flow is a very important thing, this is where your program can make decisions according to certain conditions
Program control instructions change or modify the flow of a program.i.e. transfers control from the normal sequential execution to the specified destination or target instruction.
There are two type of program control instructions
Unconditional - The JMP instruction transfers control unconditionally (independent of any condition)to another instruction.
Conditional Jump Instructions: Transfers the program sequence to the described memory address only if the condition in satisfied.
Branches to a lable when specific flags condition are met
JMP is able to transfer control both forward and backward
Control will go to the given address in any condition. Address for the jump instruction can be either sort, near or far
After the jump the program will execute instructions at the jump label and will not return. Program instructions will not return to the next sequential instruction after the jup
Near jump: a near jump passes control to an instruction in the current code segment located within +-32Kbytes from the near jump instruction
Short jump address of the target must be within -128 to +127 bytes of the current IP
Far address may be with in the same segment or in another segment
Short jumps are called relative jumps because they can be moved to any location in current code segment without a change. This is because the jump address is not stored with the opcode. Instead of a jump address, a distance or displacement follows the opcode. The short jump displacement is a distance represented by a 1-byte signed number whose value ranges between +127 and -128.
When the microprocessor executes a short jump, the displacement is sign extended and added to the instruction pointer (IP/EIP) to generate the jump address within the current code segment. The short jump instruction branches to this new address for the next instruction in the program;