0% found this document useful (0 votes)
23 views

Flow Control Instructions

Slides

Uploaded by

f2022266447
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views

Flow Control Instructions

Slides

Uploaded by

f2022266447
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

1

CS2032 - Computer Organization


and Assembly Language

Sheeza Zaheer
Lecturer
University of Management and Technology
Lahore Campus
2

Flow Control Instructions


OUTLINE
3

● Flow Control Instructions


■ Unconditional Jumps
■ Conditional Jumps
○ Signed Jumps
○ Unsigned Jumps
■ Branching Structures
■ Looping Structures
● References
■ Chapter 6, Ytha Yu and Charles Marut, “Assembly
Language Programming and Organization of IBM PC
Unconditional Jump
4
● Syntax:
JMP destination_label
● Purpose: To Transfer control to another part of the program.
● Example:

ORG 100h
.CODE
MOV AX, 2
MOV BX, 2
JMP LABEL_SUB
ADD AX, BX ;this instruction will never execute
LABEL_SUB:
SUB AX, BX
RET

4
Conditional Jump
5
● Syntax:
Jxxx destination_label
where xxx represents the condition
● If condition is true, the next instruction to be executed is the one at
destination_label.
● If condition is false, the instruction immediately following the jump is done
next.
● To implement a conditional jump, the CPU looks at the FLAG register (set
by last instruction executed by the processor).
● JUMP instructions themselves do not affect flags.

5
Categories of Conditional Jump
6

● Signed Jumps: are used when a signed interpretation is being


given to result.

Symbol Description Condition for Jumps


JG/JNLE Jump if greater than ZF = 0 and SF = OF
Jump if not less than or equal to
JGE/JNL Jump if greater than or equal to SF = OF
Jump if not less than
JL/JNGE Jump if less than SF <> OF
Jump if not greater than or equal to
JLE/JNG Jump if less than or equal to ZF = 1 and SF <> OF
Jump if not greater than

6
Contd..
7

● Unsigned Jumps: are used for an unsigned interpretation of


result

Symbol Description Condition for Jumps


JA/JNBE Jump if above than ZF = 0 and CF = 0
Jump if not below than or equal to
JAE/JNB Jump if above than or equal to CF = 0
Jump if not below than
JB/JNAE Jump if below than CF = 1
Jump if not above than or equal to
JBE/JNA Jump if below than or equal to ZF = 1 and CF = 1
Jump if not above than

7
Contd.
8
● Single-Flag Jumps: which operate on settings of individual
flags.
Symbol Description Condition for Jumps
JE/JZ Jump If Equal ZF = 1
Jump If Equal to Zero
JNE/JNZ Jump If Not Equal ZF = 0
Jump If Not Equal to Zero
JC Jump If Carry CF = 1
JNC Jump If Not Carry CF = 0
JO Jump If Overflow OF = 1
JNO Jump If Not Overflow OF = 0
JS Jump If Sign Negative SF = 1
JNS Jump If Sign Non Negative SF = 0
JP/JPE Jump if parity even PF = 1
JNP/JPO Jump if parity not even/jump if parity PF = 0
8
odd
CMP Instruction
9
● CMP (compare) instruction performs an implied subtraction of a source
operand from destination operand. Neither operand is modified.
CMP destination, source
● FLAGS
CMP Result ZF CF

Destination < Source 0 1

Destination > Source 0 0

Destination = Source 1 0

9
CMP Instruction Examples
10

● Destination < Source:


mov ax, 5
cmp ax, 10 ;CF = 1, ZF = 0
● Destination = Source
mov ax, 1000
mov cx, 1000
cmp cx, ax ; ZF = 1, CF = 0
● Destination > Source
mov si, 105
cmp si, 0 ; ZF = 0 and CF = 0

10
High Level Language Structures
11
● Branching Structure
■ IF-THEN
■ IF-THEN-ELSE
■ CASE
■ Branching with Compound Conditions
○ AND CONDITIONS
○ OR CONDITIONS
● Looping Structures
■ FOR LOOP
■ WHILE LOOP
■ REPEAT LOOP

11
IF-THEN
12
;Code in Assembly Language:

ORG 100h
False True
.CODE
AX < 0
MOV AX, FFFE
CMP AX, 0
JL IF1
JMP END_IF
IF1:
Replace AX NEG AX
by –AX END_IF:
MOV AH, 4CH
INT 21H

End

12
IF-THEN-ELSE
13
;Code in Assembly Language:

False True ORG 100h


.CODE
AL <= BL
MOV AH, 1
INT 21H
MOV BL, AL ;first input in BL
INT 21H
;second input in AL
Display the Display the MOV AH, 2
character in BL character in AL CMP AL, BL ;If AL <= BL
JLE IF1
MOV DL, BL ;then
JMP DISPLAY
IF1:
End MOV DL, AL
DISPLAY:
INT 21H
13
CASE
14
;Code in Assembly Language:
ORG 100h
CASE AL .CODE
< 0: put -1 in BL MOV AH, 1
INT 21H ;input in AL
= 0: put 0 in BL CMP AL, 0 ;case
JL NEGATIVE
> 0: put 1 in BL JE ZERO
JG POSITIVE
END_CASE NEGATIVE:
MOV BL, -1
JMP END_CASE
ZERO:
MOV BL, 0
JMP END_CASE
POSITIVE:
MOV BL, 1
JMP END_CASE
END_CASE:
MOV AH, 4Ch
14 INT 21h
AND Condition
15

● An AND condition is true if and only if both conditions are


true.
● Consider following Pseudo code:
Read a character (into AL)
IF (‘A’ <= character) and (character <= ‘Z’)
THEN
display character
END_IF

15
Contd..
16
ORG 100h
.CODE
MOV AH, 1
INT 21H
;character in AL
CMP AL, ‘A’ ;if AL >= ‘A’
JGE L1
JMP END_IF
L1:
CMP AL, ‘Z’ ;and AL <= ‘Z’
JLE L2
JMP END_IF
L2:
MOV AH, 2
MOV DL, AL ;then
INT 21H
END_IF:
MOV AH, 4Ch
INT 21H
16
OR Condition
17

● An OR condition is true if at least one of the conditions is


true.
● Consider following Pseudo code:
Read a character (into AL)
IF (character = ‘y’) OR (character = ‘Y’)
THEN
display it
ELSE
terminate the program
END_IF

17
Contd..
18
ORG 100h
.CODE
MOV AH, 1
INT 21H ;character in AL
CMP AL, ‘y’
JE THEN
CMP AL, ‘Y’
JE THEN
JMP ELSE_
THEN:
MOV AH, 2
MOV DL, AL
INT 21H
JMP END_IF
ELSE_:
MOV AH, 4Ch
INT 21H
END_IF:

18
Looping Structures
19

ORG 100h
● FOR LOOP .CODE
;initialize CX MOV CX, 80
TOP: MOV AH, 2
;body of the loop MOV DL, ‘*’
TOP:
LOOP TOP
INT 21H
LOOP TOP

MOV AH, 4Ch


INT 21H

19
Contd..
20
● FOR LOOP
■ Executed at least once.
■ If CX contains 0, the loop instruction decrements CX (CX =
FFFFh) and the loop is then executed 65535 times!
■ To prevent this, use instruction JCXZ before the loop.
;initialize CX
JCXZ SKIP
TOP:
;body of the loop
LOOP TOP
SKIP:

20
Contd..
21
● WHILE LOOP
WHILE condition DO
;statements
END_WHILE
● WHILE LOOP checks the terminating condition at the top of
the loop, so don’t forget to initialize variables.
● Example:
Initialize count to 0
Read a character
WHILE character <> carriage return Do
count = count + 1
read a character
21 END_WHILE
Contd..
22
ORG 100h
.CODE
MOV DX, 0
MOV AH, 1 ;read first character Note: Requires 2 Jumps:
INT 21H o Conditional Jump at top
WHILE_:
CMP AL, 0Dh o JMP at the bottom
JE END_WHILE
INC DX Also, If terminating condition is false, loop
INT 21H is not executed.
JMP WHILE_
END_WHILE:
MOV AH, 4Ch
INT 21H

22
Contd..
23
● REPEAT LOOP
REPEAT
;statements
UNTIL condition
● First statements are executed, then the condition is checked.
● If true, the loop terminates; if false, control branches to the top
of the loop
● Example:
REPEAT
Read a character
UNTIL character is a blank

23
Contd..
24
ORG 100h Note: Requires only one Conditional
.CODE Jump at the end
MOV AH, 1 ;read first character
REPEAT_: Also, If terminating condition is false, still
INT 21H loop is executed at least once.
CMP AL, ‘ ‘
JNE REPEAT_
MOV AH, 4Ch
INT 21H

24
For Practice
25
● Example given in section 6.5
● Ch 6 Exercise: Q1, Q2, Q4

25

You might also like