Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control

1 / 26

# Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control - PowerPoint PPT Presentation

Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control. Chapter Outline Short, near and far address JMP Instruction The CMP Instruction Conditional Jump instruction The Loop instruction While Loop REPEAT Loop. Short,near,and far addresses.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control' - piera

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Lecture 5 and Lecture 6

Chapter 7 –Program Logic and Control

Chapter Outline

• Short, near and far address
• JMP Instruction
• The CMP Instruction
• Conditional Jump instruction
• The Loop instruction
• While Loop
• REPEAT Loop

1- A short address, limited to a distance of -128 to 127 bytes

2- A near address, limited to a distance of -32,768 to 32,767 bytes

3- A far address, which may be within the same segment at a distance over 32K or in other segment

Unconditional Jumps - The JMP Instruction

• The JMP (jump) instruction causes an unconditional transfer of
• control (unconditional jump).
• Syntax:
• JMP destination
• Example
• JMP L10
• ……..
• L10: INC CX

Unconditional Jumps - The JMP Instruction

• Backward and Forward jumps
• Backward:
• L10:
• …….
• JMP L10
• Forward:
• JMP L10
• …….
• L10:

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.

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.

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

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

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

continue

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 BL
• END_IF

IF-THEN-ELSE

It can be coded as follows:

; if AL <= BL

; then

CMP AL, BL ; AL <= BL?

JNBE ELSE_ ; no, display char in BL

; AL <= BL

MOV DL, AL ; move char to be displayed

JMP DISPLAY ; go to display

ELSE_: ; BL < AL

MOV DL, BL

DISPLAY:

MOV AH,2 ; prepare to display

INT 21h ; display it

AND condition

OR condition

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.

continue

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 character
• END_IF

AND Condition

It can be coded as follows:

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

; then display char

MOV AH,1 ; prepare to read

INT 21h ; char in AL

CMP AL, 'A' ; char >= 'A'?

JNGE END_IF ; no, exit

CMP AL, 'Z' ; char <= 'Z'?

JNLE END_IF ; no, exit

MOV DL,AL ; get char

MOV AH,2 ; prepare to display

INT 21h ; display char

END_IF:

continue

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 program
• END_IF

OR Condition

It can be coded as follows:

; if (char = 'y') or (char = 'Y')

MOV AH,1 ; prepare to read

INT 21h ; char in AL

CMP AL, 'y' ; char = 'y'?

JE THEN ; yes, go to display it

CMP AL, 'Y' ; char = 'Y'?

JE THEN ; yes, go to display it

JMP ELSE_ ; no, terminate

THEN:

MOV DL,AL ; get char

MOV AH,2 ; prepare to display

INT 21h ; display char

JMP END_IF ; and exit

ELSE_:

MOV AH, 4Ch

INT 21h ; DOS exit

END_IF:

Loop Instruction

• The LOOP instruction can be used to implement a for loop.
• Syntax:
• The counter for the loop is the register CX, which is initialized to
• loop_count.
• Execution of the LOOP instruction causes CX to be decremented
• automatically.
• If (CX < > 0) control transfers to destination_label
• else the next instruction after LOOP is done.

Loop Instruction

• Using the instruction LOOP, a FOR loop can be implemented as
• follows:
• ; initialize CX to loop_count
• TOP:
• ; body of the loop
• LOOP TOP

; what if CX =0?

MOV CX, 80

MOV AH, 2

MOV DL, '*'

JCXZ SKIP ;jump if CX=0

TOP:

INT 21h

LOOP TOP

SKIP:

FOR Loop

• Example: Write some code to display a row of 80 stars.
• Solution:
• Pseudocode:
• FOR 80 times DO
• display '*'
• END_IF

It can be coded as follows:

MOV CX, 80

MOV AH, 2

MOV DL, '*'

TOP:

INT 21h

LOOP TOP

WHILE Loop

• This loop depends on a condition.
• Pseudocode:
• WHILE condition DO
• statements
• END_WHILE

continue

WHILE Loop

• Example: Write some code to count the number of characters in an
• input line.
• Solution:
• Pseudocode:
• initialize count to 0
• WHILE character <> carriage_return DO
• count = count + 1
• END_WHILE

WHILE Loop

It can be coded as follows:

WHILE_:

END_WHILE:

MOV DX, 0 ; DX counts characters

MOV AH, 1 ; prepare to read

INT 21h ; character in AL

CMP AL, 0Dh; CR?

JE END_WHILE ; yes, exit

INC DX ; not CR, increment count

INT 21h ; read a character

JMP WHILE_ ; loop back

REPEAT Loop

• This loop depends on a condition.
• Pseudocode:
• REPEAT
• Statements
• UNTIL conditions

REPEAT Loop

• Example: write code to read characters until a blank is read
• Pseudocode:
• REPEAT
• UNTIL character is blank

The code is:

MOV AH,1

REAPEAT:

INT 21H

CMP AL,’ ‘

JNE REAPEAT

WHILE Versus REPEAT

• Use of a WHILE loop or a REPEAT loop is a matter of personal
• preference.
• A WHILE loop can be bypasses if the terminating condition is
• initially false. (a REPEAT loop must be done at least once)
• The code for a REPEAT loop is likely to be a little shorter because
• there is only one jump. (WHILE loops has two jumps)