1 / 26

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

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.

dylan-barry
Download Presentation

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

An Image/Link below is provided (as is) to download presentation 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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 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

  4. 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

  5. Unconditional Jumps - The JMP Instruction • Backward and Forward jumps • Backward: • L10: • ……. • JMP L10 • Forward: • JMP L10 • ……. • L10:

  6. 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.

  7. 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.

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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.

  14. 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

  15. 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 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:

  16. 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

  17. OR Condition It can be coded as follows: ; read a character ; 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:

  18. 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.

  19. 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

  20. ; 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

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

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

  23. 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

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

  25. REPEAT Loop • Example: write code to read characters until a blank is read • Pseudocode: • REPEAT • Read character • UNTIL character is blank The code is: MOV AH,1 REAPEAT: INT 21H CMP AL,’ ‘ JNE REAPEAT

  26. 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)

More Related