Branch Instruction:

  • The branch instruction is used to transfer the control of the program to a new address. This branch can be Conditional or Unconditional. Once the branch is taken the execution of instructions will take place from this new address called branch address. Usually the Conditional branch is taken after the ADD, SUB, INC, DEC  and the instructions used to implement the LOOP.  When these types of instructions are executed, the CS and IP registers get loaded with new values of CS and IP corresponding to the location where a branch is required. The branch instruction can be one of the following types.
  • Unconditional Jump instructions: JMP, CALL, RET, INT N, INTO, IRET, LOOP,
  • Conditional Jump instructions: JA/JNBE, JAE/JNB, JB/JNAE, JC, JNC, JE /JZ, JNE /JNZ, JO, JNO, JP/JPE, JG/JNG, JNP/JPO, JG/JNLE, JA /JNL, JL/JNGE, JLE/JNG, JS, JNS

Unconditional Jump instructions

CALL : Unconditional call call a subroutine (procedure) from the main program. Address of procedure may be Specified Directly or indirectly. Two types are:
Near Call:  within +/- 32k DISP.
Far Call : anywhere outside the segment
In both case CS and IP Change to new address
RET : Return from procedure On execution, the previously stored content of IP and CS Along with flags are retrieved into the CS, IP and Flag registers from the stack and execution of the main programs continues further
INT N : Interrupt Type N When executed, the type byte N is multiplied by 4 and the contents of the IP and CS of the interrupt service routine will be taken from memory Block in 0000 segment.
INTO : Interrupt in overflow This instruction is executed when the overflow flag is set, This is equivalent to a Type 4  interrupt instruction.
JMP : Conditional jump unconditionally transfers the control of execution to the Specified address using an 8 bit ot 16 bit Displacement
IRET : Return from stack When its is executed the values of IP , CS and flags are retrieved from the stack to continue the execution of the main program.
LOOP : LOOP Unconditional This instruction executes the part of the program from the Label or address Specified in the instruction up to the loop instruction CX number of times . At each iteration , CX is decremented automatically and JUMP OF NOT ZERO structure.

Conditional Jump instructions: 

  • The following table gives a list of instructions that will take the program to a Specified location if a particular condition is matched.
    The Conditional types of instruction test a certain condition such as the flags (CF, PF, SF, ZF, OF, ), on testing for equality/non-equality, above or less etc. and then jump to a new Specified address. The execution the program then starts from the new address. The Different Conditional instructions are given below.
Instructions Description  
JA/JNBE label Jump if above /jump if not below nor equal  
JAE/JNB label Jump if above or equal /jump if not below  
JB/JNAE label Jump if below/jump if not above nor equal  
JC label Jump on carry  
JE /JZ label Jump if equal/jump if zero flag is set  
JNC label Jump if no carry  
JNE/JNZ label Jump if not equal/jump if zero (ZF is not set)  
JO label Jump if overflow (OF is set)  
JNO label Jump if no overflow (OF =0)  
JP/JPE label Jump if PF = 1/jump if parity if is even
JNP /JPO label Jump if not parity PF = 0/jump if parity if is odd
JG/JNLE label Jump if greater/jump id
JA /JNL label Jump if above / jump if not less than
JL/JNGE label Jump if less than /jump if not greater nor equal
JLE/JNG label Jump if less than and equal to / jump if not greater
JS label Jump if -ve (SF = 1)
JNS label Jump if not -ve (SF=0)

Conditional LOOP instructions:

Format Purpose Example
LOOPZ / LOOPE label Loop through a sequence of instructions from label while ZF = 1 and CX # 0. The loop exits if CX becomes zero or the quantities being compared become unequAL. LEA BX, ARRAY
DEC BX
MOV CX, 12
L1: INC BX
CMP [BX], 0FFh
LOOPE L1
LOOPNZ / LOOPNE Label Loop through a sequence of instructions from label while ZF = 0 and CX is not equal to zero. Looping is done as long as count is not equal to zero, and the element of the array is not equal to a certain value you are looking for.
JCXZ label Jump to a Specified address if CX is zero

 

Examples:

Write an ALP for 8086 to convert 8-bit binary number stored in memory into ASCII and store the converted ASCII data back in memory

Using assemble such as MASM Using KIT
Source variable X

Destination variable : Y

Assume source packed data at location : 2500:1000

Converted Binary to be stored at 2500: 1001 and 1002

Data SEGMENT

    X db 10101010B

    Y db 2 dup(?)

Data ENDS

Code SEGMENT

ASSUME CS: code, DS: data

    MOV ax, data

    MOV ds, ax

    MOV SI, offset Y

    MOV AL, X

    MOV BL, AL

    AND AL, 0F0h

    MOV CL, 04

    ROR AL, CL

    CALL ASCII

    MOV [SI], AL

    INC SI

    MOV AL, BL

    ANL AL, 0F0h

    CALL ASCII

    MOV [SI], AL

    JMP L1

ASCII:   CMP AL, 0Ah

   JC L2

   ADD AL, 07h

L2:       ADD AL, 30h

            RET

L1:       MOV AH, 4Ch

            INT 21h

Code ENDS

END

 

    MOV ds, ax

    MOV AL, [1000]

    MOV BL, AL

    AND AL, 0F0h

    MOV CL, 04

    ROR AL, CL

    CALL ASCII

    MOV [1001], AL

    MOV AL, BL

    ANL AL, 0F0h

    CALL ASCII

    MOV [102], AL

    JMP L1

ASCII:   CMP AL, 0Ah

     JC L2

     ADD AL, 07h

L2:         ADD AL, 30h

      RET

L1:  HLT

 

 

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *

error: Content is protected !!