![Page 1: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/1.jpg)
Lecture 5 and Lecture 6Chapter 7 –Program Logic and Control
![Page 2: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/2.jpg)
Chapter Outline
Short, near and far address
JMP Instruction
The CMP Instruction
Conditional Jump instruction
The Loop instruction
While Loop
REPEAT Loop
![Page 3: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/3.jpg)
Short,near,and far addresses
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
SHORT NEAR FAR
JMP YES YES YES
JXXX(conditional jump) YES YES NO
LOOP YES NO NO
CALL NlA YES YES
![Page 4: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/4.jpg)
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
JMP SHORT/NEAR/FAR address
![Page 5: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/5.jpg)
Unconditional Jumps - The JMP Instruction
•Backward and Forward jumps
Backward: L10: ……. JMP L10
Forward: JMP L10
……. L10:
![Page 6: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/6.jpg)
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 7: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/7.jpg)
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 8: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/8.jpg)
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 9: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/9.jpg)
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 10: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/10.jpg)
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 11: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/11.jpg)
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 12: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/12.jpg)
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 13: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/13.jpg)
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 14: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/14.jpg)
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 15: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/15.jpg)
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 16: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/16.jpg)
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 17: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/17.jpg)
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 18: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/18.jpg)
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 SHORT address
![Page 19: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/19.jpg)
Loop Instruction
• Using the instruction LOOP, a FOR loop can be implemented as follows:
; initialize CX to loop_count TOP:
; body of the loopLOOP TOP
![Page 20: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/20.jpg)
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, 80MOV AH, 2MOV DL, '*'
TOP:INT 21hLOOP TOP
; what if CX =0?
MOV CX, 80MOV AH, 2MOV DL, '*'JCXZ SKIP ;jump if CX=0
TOP:INT 21hLOOP TOP
SKIP:
![Page 21: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/21.jpg)
WHILE Loop
• This loop depends on a condition.
• Pseudocode: WHILE condition DO
statements END_WHILE
![Page 22: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/22.jpg)
WHILE Loop
• Example: Write some code to count the number of characters in an input line.
• Solution: Pseudocode:
initialize count to 0read a characterWHILE character <> carriage_return DO count = count + 1
read characterEND_WHILE
continue
![Page 23: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/23.jpg)
WHILE Loop
It can be coded as follows:
WHILE_:
END_WHILE:
MOV DX, 0 ; DX counts charactersMOV AH, 1 ; prepare to readINT 21h ; character in AL
CMP AL, 0Dh ; CR?JE END_WHILE ; yes, exitINC DX ; not CR, increment countINT 21h ; read a characterJMP WHILE_ ; loop back
![Page 24: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/24.jpg)
REPEAT Loop
• This loop depends on a condition.
• Pseudocode: REPEATStatementsUNTIL conditions
![Page 25: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/25.jpg)
REPEAT Loop
• Example: write code to read characters until a blank is read
• Pseudocode: REPEATRead characterUNTIL character is blank The code is:
MOV AH,1REAPEAT: INT 21H CMP AL,’ ‘ JNE REAPEAT
![Page 26: Lecture 5 and Lecture 6 Chapter 7 –Program Logic and Control](https://reader035.vdocument.in/reader035/viewer/2022062309/568135d2550346895d9d3b03/html5/thumbnails/26.jpg)
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)