+ All Categories
Home > Documents > Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Date post: 05-Jan-2016
Category:
Upload: phoebe-harrington
View: 220 times
Download: 0 times
Share this document with a friend
23
Assembly Language Lecture 5 & 6 (Flow Control Instructions)
Transcript
Page 1: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Assembly Language

Lecture 5 & 6(Flow Control Instructions)

Page 2: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Flow Control Instructions 1

Lecture Outline

•Branching structures:• IF-THEN• IF-THEN-ELSE

•Unconditional Jumps

Page 3: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

3High-Level Language Structures

Branching Structures

• In high-level languages, branching structures enable a program to take different paths, depending on conditions.

• Branching structures:• IF-THEN• IF-THEN-ELSE• CASE

Page 4: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Introduction

2High-Level Language Structures

• Jump instructions can be used to implement branches and loops.

• Because the jumps are so primitive, it is difficult to code an algorithm with them without some guidelines.

• High-level language structures could be used as a guideline when coding in assembly language.

Page 5: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

4High-Level Language Structures

IF-THEN

• Pseudocode: IF condition is true THEN execute true-branch statements END_IF

true or false

condition

True-branch statements

TrueFalse

Page 6: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

5High-Level Language Structures

IF-THEN

• Example: replace the number in AX by its absolute value.

• Solution: Pseudocode:

IF AX < 0 THEN

replace -AX by AXEND_IF

CMP AX, 0 ; AX < 0JNL END_IF ; no, exit

NEG AX ; yes, change signEND_IF:

It can be coded as follows: ; if AX < 0

; then

Page 7: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Flow Control Instructions 10

The CMP Instruction

• The jump condition is often provided by the CMP (compare) instruction

• Syntax: CMP destination, source

• Compares by computing destination contents minus source contents.

• The result is not stored, but the flags are affected.

• Destination may not be a constant.

• CMP is just like SUB, except that destination is not changed.

Page 8: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

4Flow Control Instructions

Conditional Jumps

• Syntax Jxxx destination_label

• Example JNZ PRINT_LOOP

• If the condition for the jump is true, the next instruction to be executed is the one at destinaltion_label (PRINT_LOOP), which may precede or follow the jump instruction itself.

• If the condition is false, the instruction immediately following the jump is done next.

• For JNZ, the cindition is that the result of the previous operation is not zero.

Page 9: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

7Flow Control Instructions

Conditional Jumps

• Signed Jumps: used for signed interpretations.

Symbol Description Condition for Jumps JG/JNLE jump if grater than ZF = 0 & SF = OF

jump if not less than or equal JGE/JNL jump if grater than or equal SF = OF

jump if not less than JL/JNGE jump if less than SF <> OF

jump if not greater than or equal JLE/JNG jump if less than or equal ZF = 1 or SF <> OF

jump if not grater than

Page 10: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

8Flow Control Instructions

Conditional Jumps

• Unsigned Jumps: used for unsigned interpretations.

Symbol Description Condition for Jumps JA/JNBE jump if above CF = 0 & ZF = 0

jump if not below or equal JAE/JNB jump if above or equal CF = 0

jump if not below JB/JNAE jump if below CF = 1

jump if not above or equal JBE/JNA jump if below or equal CF = 1 or ZF = 1

jump if not above

Page 11: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

9Flow Control Instructions

Conditional Jumps

• Single Flag Jumps: operates on settings of individual flags.

Symbol Description Condition for Jumps JE/JZ jump if equal/ jump if equal to 0 ZF = 1 JNE/JNZ jump if not equal/ jump if not 0 ZF = 0 JC jump if carry CF = 1 JNC jump if no carry CF = 0 JO jump if overflow OF = 1 JNO jump if no overflow OF = 0 JS jump if sign negative SF = 1 JNS jump if nonnegative sign SF = 0 JP/JPE jump if parity even PF = 1 JNP/JPO jump if parity odd PF = 0

Page 12: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

6Flow Control Instructions

How the CPU Implements a Conditional Jump

• The CPU looks at the FLAGS register.

• If the conditions for the jump are:• True: the CPU adjusts the IP to point to the destination_label, so that the instruction at this label will be done next.• False: the IP is not altered; this means that the next instruction in line will be done.

Page 13: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Flow Control Instructions 15

Unconditional Jumps - The JMP Instruction

• The JMP (jump) instruction causes an unconditional transfer of control (unconditional jump).

• Syntax: JMP destination a label in the same segment as the JMP itself

Page 14: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Flow Control Instructions 16

Unconditional Jumps - The JMP Instruction

• JMP can be used to get around the range restriction of a conditional jump.

• Example:

TOP:; body of the loopDEC CXJNZ TOPMOV AX, BX

TOP:; body of the loopDEC CXJNZ BOTTOMJMP EXIT

BOTTOM:JMP TOP

EXIT:MOV AX, BX

If the loop body contains so many instructions that label top is out of range for JNZ

Page 15: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

6High-Level Language Structures

IF-THEN-ELSE

• Pseudocode: IF condition is true THEN execute true-branch statements ELSE

execute false-branch statements END_IF

condition

True-branch statements

TrueFalse

False-branch statements

Page 16: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

7High-Level Language Structures

IF-THEN-ELSE

• Example: Suppose AL and BL contain extended ASCII characters. Display the one that comes first in the character sequence.

• Solution: Pseudocode:

IF AL <= BL THEN

display the character in AL ELSE

display the character in BLEND_IF

continue

Page 17: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

8High-Level Language Structures

IF-THEN-ELSE

CMP AL, BL ; AL <= BL?JNBE ELSE_ ; no, display char in BL

; AL <= BLMOV DL, AL ; move char to be displayedJMP DISPLAY ; go to display

ELSE_: ; BL < ALMOV DL, BL

DISPLAY:MOV AH, 2 ; prepare to displayINT 21h ; display it

It can be coded as follows: ; if AL <= BL

; then

Page 18: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

High-Level Language Structures 14

Branches with compound Conditions

• Sometimes the branching condition in an IF or CASE takes the form:

condition_1 AND condition_2 or condition_1 OR condition_2

where condition_1 and condition_2 are either true or false.

AND condition

OR condition

Page 19: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

High-Level Language Structures 15

AND Condition

• An AND condition is true if and only if all conditions are true.

• Example: Read a character, and if it’s an uppercase letter, display it.• Solution: Pseudocode:

Read a character (into AL)IF ('A' <= character) and (character <= 'Z') THEN

display characterEND_IF

continue

Page 20: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

High-Level Language Structures 16

AND Condition

It can be coded as follows: ; read a character

; if ('A' <= char) and (char <='Z')

; then display char

MOV AH,1 ; prepare to readINT 21h ; char in AL

CMP AL, 'A' ; char >= 'A'?JNGE END_IF ; no, exitCMP AL, 'Z' ; char <= 'Z'?JNLE END_IF ; no, exit

MOV DL, AL ; get charMOV AH, 2 ; prepare to displayINT 21h ; display char

END_IF:

Page 21: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

High-Level Language Structures 17

OR Condition

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

• Example: Read a character. If it’s 'y' or 'Y', display it; otherwise, terminate the program.• Solution: Pseudocode:

Read a character (into AL)IF (character = 'y') or (character = 'Y') THEN

display character ELSE

terminate the programEND_IF continue

Page 22: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

High-Level Language Structures 18

OR Condition

It can be coded as follows: ; read a character

; if (char = 'y') or (char = 'Y')MOV AH,1 ; prepare to readINT 21h ; char in AL

CMP AL, 'y' ; char = 'y'?JE THEN ; yes, go to display itCMP AL, 'Y' ; char = 'Y'?JE THEN ; yes, go to display itJMP ELSE_ ; no, terminate

THEN:MOV DL, AL ; get charMOV AH, 2 ; prepare to displayINT 21h ; display charJMP END_IF ; and exit

ELSE_:MOV AH, 4ChINT 21h ; DOS exit

END_IF:

Page 23: Assembly Language Lecture 5 & 6 (Flow Control Instructions)

Flow Control Instructions 13

Working with Characters

• In working with the standard ASCII character set, either signed or unsigned jumps may be used.

• Why?

• Because the sign bit of a byte containing a character code is always zero.


Recommended