CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful...
-
Upload
corey-sims -
Category
Documents
-
view
215 -
download
0
Transcript of CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful...
![Page 1: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/1.jpg)
CHAPTER 3
LABFlow Control Instructions
![Page 2: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/2.jpg)
Overview
• For assembly language programs to carry out useful tasks, there must be a way to make decisions and repeat sections of code –> jump and loop instructions.
• The jump and loop instructions transfer control to another part of the program.
• This transfer can be unconditional or can depend on a particular combination of status flag settings.
![Page 3: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/3.jpg)
1. CONDITIONAL JUMPS
• JNZ is an example of a Conditional Jumps Instruction. The syntax is:Jxxx dest_label
• If the condition for the jump is true, the next instruction to be executed is the one at destination_label, 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 condition is that the result of the previous operation is not zero.
![Page 4: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/4.jpg)
How the CPU Implements a Conditional Jumps
• The CPU looks at the FLAGS register.• If the conditions for the jump (expressed as a
combination of status Flag setting) are true, the CPU adjusts the IP to point to the destination label, so that the instruction at this label will be done next.
• If the jump condition is false, then IP is not altered; this mean that the next instruction in line will de done.
![Page 5: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/5.jpg)
The CMP instruction• The jump condition is often provided by the CMP
(compare) instruction .CMP dest, source
• This instruction compared destination and source by computing destination contents minus source content.
• The result is not stored, but the flags are affected.• The operand of CMP may not both be memory location.
Destination may not be a constant.• Note: CMP is just like SUB, except that destination is not
changed.
![Page 6: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/6.jpg)
The CMP instruction• Eg:
CMP AX, BXJG BELOWWhere AX = 7FFFh and BX = 0001h. Result of CMP AX, BX is 7FFFh – 0001h = 7FFEh.- AX is greater than BX (in signed sense), then JG
(jump if greater than) transfer to BELOW.- From table 6.1 shows that the jump condition for
JG is satisfied -> ZF=SF=OF = 0, so control transfer to label BELOW.
![Page 7: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/7.jpg)
Signed VS Unsigned Jumps
• Eg: AX = 7FFFh and BX = 8000h, and executeCMP AX, BXJA BELOW
even though 7FFFh > 8000h in signed sense, program does not jump to BELOW. Reason: 7FFFh < 8000h in unsigned sense, and we are using the unsigned jump JA.
![Page 8: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/8.jpg)
2. The JMP Instruction• The JMP (jump) instruction causes an unconditional transfer of control
(unconditional jump). The syntax isJMP destination– Where destination is usually a label in the same segment as the JMP itself.
• Eg:TOP:; body of the loop
MOV CX, 5DEC CX ; decrement counterJNZ BOTTOM ; keep looping if CX>0JMP EXIT
BOTTOM:JMP TOP
EXIT:MOV AX, BX
![Page 9: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/9.jpg)
3. HIGH-LEVEL LANGUAGE STRUCTURES
• BRANCHING STRUCTURES – enable a program to take different paths, depending on conditions. We’ll look at 3 structures:– IF-THEN
• In pseudocode IF condition is true THEN
execute true-branch statementsEND_IF
The condition is an expression that is true or false. If true, the true-branch statements are executed. If false, nothing is done, and the program goes on to whatever follows.
![Page 10: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/10.jpg)
Example: IF-THEN
• Replace the number in AX by its absolute value.
Sol: A pseudocode algorithm isIF AX < 0
THENreplace AX by –AX
END IF
It can be coded as follows:
; if AX < 0CMP AX, 0 ; AX < 0?JNL END_IF ; no, exit
;thenNEG AX ; yes, change sign
END_IF
Note: JNL (jump if not less), that is, if AX not less than 0, jump to label END_IF.
![Page 11: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/11.jpg)
IF-THEN-ELSE
IF condition is true THEN
execute true-branch statements ELSE
execute false-branch statementsEND_IF
• If condition is true, the true-branch statements are executed. If condition is false, the false-branch statements are executed
![Page 12: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/12.jpg)
Example: IF-THEN-ELSE
• Suppose AL and BL contain extended ASCII characters. Display the one that comes first in the character sequence.
Sol: IF AL <= BL THEN
display the character in AL ELSE
display the character in BLEND_IF
![Page 13: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/13.jpg)
It can be coded as follows:
MOV AH, 2 ; prepare to display;if AL <= BL
CMP AL, BL ; AL <= BL?JNBE ELSE_ ; no, display char in BL; AL <= BL
;thenMOV DL, AL ; move char to be displayed JMP DISPLAY ; go to display; BL < AL
ELSE_:MOV DL, BL
DISPLAY:INT 21h ; display it
END_IF
• Note: the label ELSE_ is used because ELSE is a reserved word.• The condition AL <= BL is expressed by CMP AL, BL.
![Page 14: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/14.jpg)
CASE• A CASE is multiway branch structure that tests a register, variable, or
expression for a particular values or a range of values. The general form is as follows:
CASE expressionvalue_1: statements_1 value_2: statements_2... value_n: statements_n
END CASE.
• In this structure, expression is tested; if its value is a member of the set values_i, then statements_i are executed. We assume that sets values-1,…., values_n are disjoint.
![Page 15: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/15.jpg)
Example: CASE• If AX contains a negative number, put -1 in BX;
if AX contains 0, put 0 in BX; if AX contains a positive number, put 1 in BX.
Sol: CASE AX< 0: put -1 in BX= 0: put 0 in BX> 0: put 1 in BX
END CASE
![Page 16: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/16.jpg)
• It can be coded as follows:
; case AX
CMP AX, 0 ; test AX
JL NEGATIVE ; AX < 0
JE ZERO ; AX = 0
JG POSITIVE ; AX > 0
NEGATIVE:
MOV BX, -1 ; put -1 in BX
JMP END_CASE ; and exit
ZERO:
MOV BX, 0 ; put 0 in BX
JMP END_CASE ; and exit
POSITIVE:
MOV BX, 1 ; put 1 in BX
END_CASE:
• Note: only one CMP is needed, because jump instruction do not affect the flags.
![Page 17: CHAPTER 3 LAB Flow Control Instructions. Overview For assembly language programs to carry out useful tasks, there must be a way to make decisions and.](https://reader036.fdocuments.net/reader036/viewer/2022082610/56649cf95503460f949ca53e/html5/thumbnails/17.jpg)
Exercise:
• Sketch the flowchart for IF-THEN, IF-THEN-ELSE and CASE structure.
• Sketch the flowchart for each previous example.
• Prob: If AL contains 1 or 3, display “o”; if AL contains 2 or 4, display “e”. Write the high level language pseudocode and code in Assembly language.