Computer Architecture & Organization
Department of Computer Science &
Information Technology
Lab # 06
Program Control Instructions (Implementing Branching in x86
Assembly Language)
Conditional execution in assembly language is accomplished by several looping and
branching instructions. These instructions can change the flow of control in a program.
Program control execution is observed in two scenarios.
• Un Conditional Jump
• Conditional jump
Unconditional Branches (Jumps)
An unconditional branch (jump) instruction transfers control to a specified label in the
program without testing any condition. This is similar to goto in a HLL. Transfer of control
may be forward, to execute a new set of instructions or backward, to re-execute the same steps.
The 80x86 jump instruction has the following format:
Syntax: Jmp label
Here a program is presented that uses jump instruction to loop forever through the program
and calculates the 1+2+3+……+n sum .
.code
Main proc
Mov ax,0
Mov bx,0
Forever: Inc bx
Add ax,bx
Jmp forever
Main endp
Conditional Branches
Unlike an unconditional branch, a conditional branch tests a condition before transfer of
control.This is performed by a set of jump instructions j<condition> depending upon the condition.
The conditional instructions transfer the control by breaking the sequential flow and they do it by
changing the offset value in IP.
This conditional branching is used to implement if structures, other selection structures, and loop
structures in 80x86 assembly language. Most conditions considered by the conditional jump
instructions are settings of flags in the FLAGS register. For example, jz lable1 means to transfer
control to the instruction to label1, if the zero flag ZF is set to 1. Conditional branch instructions
Computer Architecture & Organization
Department of Computer Science &
Information Technology
don not modify flags; they just react to previously set flag values. Most common way to set flags
for conditional branches is to use compare instruction that has the following format:
Syntax: cmp operand1, operand2
Flags are set the same as for the subtraction operation operand1–operand2. Operands, however, are
not changed. Following are the conditional jump instructions used on unsigned data used for logical
operations:
Instruction Description Flags tested
JE/JZ Jump Equal or Jump Zero ZF
JNE/JNZ Jump not Equal or Jump Not Zero ZF
JA/JNBE Jump Above or Jump Not CF, ZF
Below/Equal
JAE/JNB Jump Above/Equal or Jump Not CF
Below
JB/JNAE Jump Below or Jump Not CF
Above/Equal
JBE/JNA Jump Below/Equal or Jump Not AF, CF
Above
The following conditional jump instructions have special uses and check the value of flags
Instruction Description Flags tested
JXCZ Jump if CX is Zero None
JC Jump If Carry CF
JNC Jump If No Carry CF
JO Jump If Overflow OF
JNO Jump If No Overflow OF
Computer Architecture & Organization
Department of Computer Science &
Information Technology
JP/JPE Jump Parity or Jump Parity Even PF
JNP/JPO Jump No Parity or Jump Parity PF
Odd
JS Jump Sign (negative value) SF
JNS Jump No Sign (positive value) SF
Example-1
Un Conditional Conditional Both Un-conditional & Conditional
Mov dl,1 Mov dl,1 Mov dl,1
Add dl,30h Add dl,30h Add dl,30h Endpara:
Start: Start:
Start: Mov ah,2 Mov ah,2 Mov ah,2 Mov ah,4ch
Int 21h Int 21h Int 21h Int 21h
Inc dl Inc dl Inc dl
Jmp start Cmp dl,35h
Cmp dl,5
Jne Start
Jne start
Jmp endpara
Implementation of if Structure
Let's implement the following pseudo-code in x86 assembly language.
if (total 100)
then add value to total;
end if;
Assuming total and value are in memory and count in CX, the assembly code is shown below:
cmp total, 100
jae addValue
addValue: mov bx, value
add total, bx
Computer Architecture & Organization
Department of Computer Science &
Information Technology
EXERCISE:
Q1 write an assembly language program that repeatedly (forever) calculates 1*2*3*…*n.
Q2 Assume for each part of this exercise that the AX contains 00 4F and the doubleword
referenced by value contains FF38. Determine whether each of the following conditional branch
instructions causes a transfer of control to label dest.
i. cmp ax,value
jb dest
Your answer: YES NO
Reason
ii. cmp ax,value
ja dest
Your answer: YES NO
Computer Architecture & Organization
Department of Computer Science &
Information Technology
Reason
iii. cmp ax,04fh
je dest
Your answer: YES NO
Reason
iv. add ax,200
jne dest
Your answer: YES NO
Reason
✓
Q3 Write down the code to find number input by user is EVEN or
ODD Save “Enter number “ @ Location loc1
✓
Save “Number is EVEN”@ Location loc2
✓
Save “Number is ODD” @ Location loc3
Hint:
Save the input to another register(Say
bl) Mov 2 to Al
Divide bl to al
Computer Architecture & Organization
Department of Computer Science &
Information Technology
Q4 Write down the code to find Largest number using @least one conditional & unconditional
jump instructions. Input two numbers from user; Output should look like as:
• Enter number 1:
• Enter number 2:
Largest number is :
(save above strings @ locations msg1,msg2 and msg3of DS)
Q5 Repeat the Q4 to find largest number by using @least one conditional & unconditional jump
instructions. Input two numbers from user ; Output should look like as:
• Enter number 1:
• Enter number 2:
Largest number is :
36
Computer Architecture & Organization Department of Software Engineering
(save above strings @ locations msg1,msg2 and msg3of DS)
✓
Save numbers (input by user) @ locations num1 and num2 of DS
Computer Architecture & Organization Department of Computer Science &
Information Technology