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

Flow Control Instructions

Slides

Uploaded by

f2022266447
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views

Flow Control Instructions

Slides

Uploaded by

f2022266447
Copyright
© © All Rights Reserved
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