Presentation is loading. Please wait.

Presentation is loading. Please wait.

Jump Condition.

Similar presentations


Presentation on theme: "Jump Condition."— Presentation transcript:

1 Jump Condition

2 Topic Control Flow Structure Control Flow Structures
Conditional Jump Unconditional Jump Control Flow Structures IF-THEN IF-THEN-ELSE CASE Branches with Compound Conditions

3 Labels r needed in cases where one instruction refers to another.
An Example of Jump Display the entire IBM character set The function number .MODEL SMALL .CODE .STARTUP MOV AH, 2 ; display char function MOV CX, 256 ; no. of chars to display MOV DL, 0 ; DL has ASCII code for null char PRINT_LOOP: INT 21H ; display a char INC DL ; increment ASCII code DEC CX ; decrement counter JNZ PRINT_LOOP: ; keep going if CX not 0 .EXIT END Calls system routine/functions Statement label Labels r needed in cases where one instruction refers to another. Section 6-1 of Assembly Language Programming Book

4 Conditional Jumps JNZ Syntax: Jxxx destination_label
True or False [no gray area – like our minds!] JNZ is an example of conditional jump instruction Checks the Z flag. If Z = 0 then jump to the location Three categories of conditional jumps Signed jumps, for signed interpretation Unsigned jumps, for unsigned interpretation Single-flag jumps, operates on settings of individual flags

5 How to decide? Implement?
CPU looks at the FLAGS register If jump conditions r TRUE – the CPU adjusts the IP  to point to the destination_label, so that the instruction at this label will be done next. If FALSE – no change in IP

6 1. Signed Conditional Jumps
Opcodes Description Condition for jumps JG/JNLE Jump if Greater than Jump if Not Less than or Equal to ZF = 0 and SF = OF JGE/JNL Jump if Greater than or Equal to Jump if Not Less than SF = OF JL/JNGE Jump if Less than Jump if Not Greater than or Equal to SF <> OF JLE/JNG Jump if less than or equal Jump if not greater than ZF = 1 or SF <> OF

7 2. Unsigned Conditional Jumps
Symbol Description Condition for jumps JA/JNBE Jump if above Jump if not below or equal CF = 0 and ZF = 0 JAE/JNB Jump if above or equal Jump if not below CF = 0 JB/JNAE Jump if below Jump if not above or equal CF = 1 JBE/JNA Jump if below or equal Jump if not above CF = 1 or ZF = 1

8 3. Single-Flag Jumps Symbol Description Condition for jumps JE/JZ
Jump if equal Jump if equal to zero ZF = 1 JNE/JNZ Jump if not equal Jump if not zero 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

9 Range of a Conditional Jump
ref Range of a Conditional Jump The destination label must precede the Jump instruction by no more than 126 bytes Or, follow by no more than 127 bytes LABEL: ; statement JNZ LABEL 126 bytes JZ LABEL ; statements LABEL: ; statement 127 bytes

10

11 CMP Instruction The jump condition is often provided by the CMP (compare) instruction CMP destination, source  dest[contents] – source[contents] It is like SUB, except that destination is not changed Destination may not be a constant The result is not stored but the flags are affected CMP AX, 10 JG BELOW CMP AX, BX JG BELOW ;JG – jump if > If AX = 7FFFh, and BX = 0001h, the result is 7FFFh h = 7FFEh. ZF = SF = OF = 0, JG is satisfied, so control transfers to label BELOW

12 Signed vs. Unsigned Jumps
Each signed jump corresponds to an analogous unsigned jump e.g., signed JG (if >) corresponds to unsigned JA (if above) Use depends on the interpretation The jumps operate on different flags Symbol Description Condition for jumps JG/JNLE Jump if greater than Jump if not less than or equal to ZF = 0 and SF = OF JA/JNBE Jump if above Jump if not below or equal CF = 0 and ZF = 0 Wrong jumps  wrong results! [same as life]

13 Until 4/11 Wrong jumps  wrong results! [same as life]

14 Signed vs. Unsigned Jumps cont.
For signed interpretation, let us take AX = 7FFFh, BX = 8000h and we execute Even though 7FFFh > 8000h in a signed sense, the program does not jump to BELOW_LABEL  why? Because 7FFFh < 8000h in an unsigned sense JA, which is the unsigned jump CMP AX, BX JA BELOW_LABEL

15 Signed vs. Unsigned Jumps cont. working with CHAR
With standard ASCII character set [character code 0-31 for control chars; for printable characters] – either signed/unsigned jumps may be used. Why? Because the sign bit of a byte containing a character code is always  zero [0]. BUT, unsigned jumps should be used when comparing extended ASCII characters [code 80h ~ FFh]

16 Extended ASCII codes (character code 128-255)
There are several different variations of the 8-bit ASCII table. E.g., ISO , also called ISO Latin-1. Codes contain the Microsoft® Windows Latin-1 extended characters.

17 The JMP Instruction JMP destination/target_label
ref The JMP Instruction JMP (jump) instruction causes an unconditional jump Syntax is: JMP can be used to get around the range restriction [126/127 byte] Flags – no change JMP destination/target_label TOP: ; the loop body contains so many instructions ; that label TOP is out of range for JNZ. Solution is- DEC CX JNZ BOTTOM JMP EXIT BOTTOM: JMP TOP EXIT: MOV AX, BX TOP: ; body of the loop, say 2 instructions DEC CX ; decrement counter JNZ TOP ; keep looping if CX > 0 MOV AX, BX Section 6-3: Assembly Language Programming

18 TOP: EXIT: When CX=0 - It will not Jump to BOTTOM
It will go to next instr. JMP EXIT JMP TOP  is unconditional – just Jump! TOP: ; the loop body contains so many instructions ; that label TOP is out of range for JNZ Solution is- DEC CX JNZ BOTTOM JMP EXIT BOTTOM: JMP TOP EXIT: MOV AX, BX

19 Lets Jump to another lecture?

20 References Ch 6, Assembly Language Programming – by Charls Marut
Some materials are from Dr. Sazzad, NSU


Download ppt "Jump Condition."

Similar presentations


Ads by Google