high-level language structures
DESCRIPTION
High-level language structures. Branching structures IF-THEN. IF condition is true THEN execute true-branch statements End_if. Branching structures IF-THEN. false true. condition. True branch statements. example. - PowerPoint PPT PresentationTRANSCRIPT
21/04/23 CAP221 1
High-level language structures
21/04/23 CAP221 2
Branching structuresIF-THEN
• IF condition is true
THEN
execute true-branch statements
End_if
21/04/23 CAP221 3
Branching structuresIF-THEN
false truecondition
True branchstatements
21/04/23 CAP221 4
example
• Replace the number in AX by its absolute value.
• Pseudo code algorithm is
IF AX <0
Then
replace AX by –AX
END_IF
21/04/23 CAP221 5
example
• Code:
CMP AX,0 ;AX<0?
JNL END_IF ;no, exit
NEG AX ;yes, change sign
END_IF:
21/04/23 CAP221 6
IF_THEN_ELSE
• IF condition is true
THEN
execute true-branch statements
ELSE
execute FALSE-branch statements
End_IF
21/04/23 CAP221 7
IF_THEN_ELSE
FALSE TRUECONDITION
TRUE BRANCHSTATEMENTS
FALSE BRANCHSTATEMENTS
21/04/23 CAP221 8
CASE• A case is a multiway branch structure that
tests a register, variable, or expression for particular values or range of values. The general form is as follows:
case expression values_1: statements_1 values_2: statements_2 ………….. values_n: statements_n
END_CASE
21/04/23 CAP221 9
CASE
EXPRESSION
STATEMENTS_1 STATEMENTS_2 STATEMENTS_N
VALUE_1 VALUE_2 VALUE_N…….
21/04/23 CAP221 10
EXAMPLE
• 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.
21/04/23 CAP221 11
example
• Pseudo code algorithm is
Case AX
< 0:put -1 in BX
= 0:put 0 in BX
> 0:put 1 in BX
END_CASE
21/04/23 CAP221 12
ExampleCode: CMP AX,0 JL NEGATIVE JE ZERO JG POSITIVE NEGATIVE: MOV BX,-1 JMP END_CASE
ZERO: MOV BX,0 JMP END_CASEPOSITIVE: MOV BX,1END_CASE
•NOTE: only one CMP is needed, because jump instructions do not affect the flags.
21/04/23 CAP221 13
example
• If AL contains 1 or 3, display “o”; if AL contains 2 or 4, display “e”.
• Pseudo code algorithm is
• Case AL
1, 3: display “o”
2, 4: display “e”
End_case
21/04/23 CAP221 14
example
Code:CMP AL,1
JE ODD
CMP AL,3
JE ODD
CMP AL,2
JE EVEN
CMP AL,4
JE EVEN
JMP END_
ODD:
MOV DL, ’o’
JMP DIS_
EVEN:
MOV DL, ’e’
END_:
21/04/23 CAP221 15
Branches with compound conditions
• Sometimes the branching condition in an IF or CASE takes the form
• Condition_1 and condition_2
• Condition_1 or condition_2
21/04/23 CAP221 16
AND conditions
• An AND condition is true if and only if condition_1 and condition_2 are both true.
• Likewise, if either condition is false, then the whole thing is false.
21/04/23 CAP221 17
Example
• Read a character, and if it’s an uppercase letter, display it.
• Pseudo code algorithm is
read a character (into AL)
If (‘A’ <= character) and (character <=‘Z’)
Then
Display character
End_if
21/04/23 CAP221 18
example
• Code:
MOV ah,1
INT 21h
CMP al,’A’
JL end_if
CMP al,’Z’
JG end_if
MOV DL,AL
MOV AH,2
INT 21H
End_if:
21/04/23 CAP221 19
OR conditions
• condition_1 OR condition_2 is true if at least one of the conditions is true.
• if both conditions are false, then the whole thing is false.
21/04/23 CAP221 20
example
• Read a character. If it’s “y” or “Y”, display it; otherwise, terminate the program.
• Pseudo code algorithm is Read a character (into AL) if (character = “y” or character= “Y”) Then Display character Else Terminate the program End_if
21/04/23 CAP221 21
example
MOV AH,1 INT 21h CMP AL, ’y’ JE THEN CMP AL,’Y’ JE THEN JMP ELSE_
THEN: MOV AH,2 MOV DL,AL INT 21H JMP END_IF ELSE_:MOV AH,4CHINT 21HEND_IF:
21/04/23 CAP221 22
Looping structures
• A loop is a sequence of instructions that are repeated.
• For loop:
this is a loop structure in which the loop statements are repeated a known number of times (a count-controlled loop).
21/04/23 CAP221 23
For loop_count times do statementsend_for
Initialize count
statements
Count = count - 1
Count=0False
True
21/04/23 CAP221 24
LOOP instruction
• The LOOP instruction can be used to implement a FOR loop.
• General form:
LOOP des_label
The counter for the loop is the register CX.
21/04/23 CAP221 25
LOOP instruction• CX is initialized to loop_count.• Execution of the LOOP instruction causes
CX to be decremented automatically.• If CX is not 0, control transfers to
des_label.• If CX =0, the next instruction after LOOP is
done.• Des_label must precede the LOOP
instruction by no more than 126 bytes.
21/04/23 CAP221 26
LOOP instruction
• So, a FOR loop can be implemented as follows.
; initialize CX to loop_count
Des_label:
; body of the loop
loop des_label
21/04/23 CAP221 27
example
• Write a count-controlled loop to display a row of 80 stars.
• Pseudo code algorithm is
For 80 times do
display ‘*’
end_for
21/04/23 CAP221 28
example
MOV CX,80
MOV AH,2
MOV DL,’*’
TOP:
INT 21H
LOOP TOP
21/04/23 CAP221 29
LOOP instruction
• A loop instruction is executed at least once.
• If CX = 0 when the loop is entered, the loop instruction causes CX to be decremented to FFFFH.
• So, the loop is executed 65535 more times.
21/04/23 CAP221 30
LOOP instruction
• Solution:
use the instruction JCXZ (jump if CX is zero) before the loop.
JCXZ des_label
21/04/23 CAP221 31
LOOP instruction
• A loop implemented as follows is bypassed if CX is 0.
JCXZ skip
top:
;body of the loop
loop top
Skip:
21/04/23 CAP221 32
While Loop
• This loop depends on a condition.
• Pseudo code
while condition do
statements
end_while
21/04/23 CAP221 33
While Loop
statements
conditionTrue
False
21/04/23 CAP221 34
example• Write some code to count the number of
characters in an input line.
• Pseudo code
initialize count to 0.
read a character
while character <> carriage_return do
count=count + 1
read a character
end_while
21/04/23 CAP221 35
example MOV DX,0 MOV AH,1 INT 21HWHILE_: CMP AL,0DH JE END_ INC DX INT 21H JMP WHILE_END_ :
21/04/23 CAP221 36
Repeat loop
• Another conditional loop is the repeat loop. Pseudo code
repeat
statements
until condition
21/04/23 CAP221 37
statements
condition
True
False
Repeat loop
21/04/23 CAP221 38
example
• Write some code to read characters until a blank is read.
Pseudo code
Repeat
read a character
until character is a blank
21/04/23 CAP221 39
example
MOV AH,1
REPEAT:
INT 21H
CMP AL,’ ’
JNE REPEAT
21/04/23 CAP221 40
WHILE versus REPEAT
• In a while loop, the loop can be bypassed if the terminating condition is initially false.
• The statements in a repeat must be done at least once.
• Code for a repeat loop is likely to be shorter because there is only a conditional jump at the end, but a while loop has two jumps: a conditional jump at the top and a jmp at the bottom.
21/04/23 CAP221 41
Programming with high-level structures
• Top-down program design:
The original problem is solved by solving a series of sub problems, each of which is easier to solve than the original problem.
21/04/23 CAP221 42
examplePrompt the user to enter a line of text.On the next line, display the capital letter
entered that comes first alphabetically and the one that comes last. If no capital letters are entered, display “No capital letter”.
sample execution: type a line of text: THE QUICK BROWN FOX JUMPED. first capital = B last capital = X
21/04/23 CAP221 43
Top down program design
First refinement:
1. Display the opening message.
2. Read and process a line of text.
3. Display the results.
21/04/23 CAP221 44
example TITLE PGM6_2 : FIRST LAST CAPITALS.MODEL SMALL.STACK 100H.DATAPROMPT DB 'Type a line of text ',0dH,0AH,'$'NOCAP_MSG DB 0DH,0AH,' No Capitals $'CAP_MSG DB 0DH,0AH,'FIRST CAPITAL = 'FIRST DB '[' DB ' LAST CAPITAL = 'LAST DB '@ $'
21/04/23 CAP221 45
.CODEMAIN PROC; initialize DS MOV AX,@DATA MOV DS, AX; first step display opening message MOV AH,9 LEA DX,PROMPT INT 21H
Step 1
21/04/23 CAP221 46
Step 2: read and process a line of text Read a character.While character is not a carriage return doIf character is a capital letter Then If character precedes first capital Then First capital = character End_if If character follows last capital Then Last capital = character End_ifEnd_ifRead a characterEnd_while
21/04/23 CAP221 47
;read and process a line of text MOV AH,1 INT 21HWHILE_:; while character is not carriage ;return do CMP AL,0dH JE END_WHILE; if character is a capital letter CMP AL,'A' JNGE END_IF CMP AL,'Z' JNLE END_IF; then; if character precedes FIRST ;capital CMP AL,FIRST JNL CHECK_LAST
; then FIRST CAPITAL = ;character MOV FIRST,AL; end_ifCHECK_LAST :; if character follows last capital CMP AL,LAST JNG END_IF; then LAST CAPITAL = character MOV LAST,AL;end_ifEND_IF:; read a character INT 21H JMP WHILE_END_WHILE :
21/04/23 CAP221 48
Step 3: display the results
if no capitals were typed
then
display “no capitals”
Else
display first capital and last capital
End_if
21/04/23 CAP221 49
; display results MOV AH,9; if no capital were typed CMP FIRST, '[' JNE CAPS; then LEA DX,NOCAP_MSG JMP DISPLAYCAPS : LEA DX,CAP_MSGDISPLAY : INT 21H;end_if; DOS exit MOV AH,4CH INT 21HMAIN ENDP END MAIN