Presentation is loading. Please wait.

Presentation is loading. Please wait.

High-level language structures

Similar presentations


Presentation on theme: "High-level language structures"— Presentation transcript:

1 High-level language structures
23/04/2019 CAP221

2 Branching structures IF-THEN
IF condition is true THEN execute true-branch statements End_if 23/04/2019 CAP221

3 Branching structures IF-THEN
condition false true True branch statements 23/04/2019 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 23/04/2019 CAP221

5 example Code: CMP AX,0 ;AX<0? JNL END_IF ;no, exit , JGE
NEG AX ;yes, change sign END_IF: 23/04/2019 CAP221

6 IF_THEN_ELSE IF condition is true THEN execute true-branch statements
execute FALSE-branch statements End_IF 23/04/2019 CAP221

7 IF_THEN_ELSE FALSE TRUE CONDITION FALSE BRANCH TRUE BRANCH STATEMENTS
23/04/2019 CAP221

8 EXAMPLE Suppose AL and BL contains extended ASCII characters. Display the one that comes first in the character sequence. 23/04/2019 CAP221

9 example Pseudo code algorithm is IF AL < BL THEN
display the char in AL ELSE display the char in BL END_IF 23/04/2019 CAP221

10 EXAMPLE Code: MOV AH,2 CMP AL,BL ELSE_: MOV DL,BL JA ELSE_ DISPLAY:
MOV DL,AL JMP DISPLAY ELSE_: MOV DL,BL DISPLAY: INT 21H 23/04/2019 CAP221

11 We use the unsigned jump because we are comparing extended characters.
JMP (unconditional jump) is needed to skip the false branch. 23/04/2019 CAP221

12 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 23/04/2019 CAP221

13 CASE EXPRESSION VALUE_1 VALUE_N VALUE_2 ……. STATEMENTS_1 STATEMENTS_2
STATEMENTS_N 23/04/2019 CAP221

14 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. 23/04/2019 CAP221

15 example Pseudo code algorithm is Case AX < 0:put -1 in BX
END_CASE 23/04/2019 CAP221

16 Example Code: CMP AX,0 ZERO: JL NEGATIVE MOV BX,0 JE ZERO JMP END_CASE
JG POSITIVE NEGATIVE: MOV BX,-1 JMP END_CASE ZERO: MOV BX,0 JMP END_CASE POSITIVE: MOV BX,1 END_CASE NOTE: only one CMP is needed, because jump instructions do not affect the flags. 23/04/2019 CAP221

17 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 23/04/2019 CAP221

18 example Code: CMP AL,1 JE ODD ODD: CMP AL,3 MOV DL, ’o’ JMP DIS_
JE EVEN CMP AL,4 JE EVEN JMP END_ ODD: MOV DL, ’o’ JMP DIS_ EVEN: MOV DL, ’e’ DIS_: MOV AH,2 INT 21H END_: 23/04/2019 CAP221

19 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 23/04/2019 CAP221

20 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. 23/04/2019 CAP221

21 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 23/04/2019 CAP221

22 example Code: MOV ah,1 INT 21h MOV DL,AL CMP al,’A’ MOV AH,2 JL end_if
CMP al,’Z’ JG end_if MOV DL,AL MOV AH,2 INT 21H End_if: 23/04/2019 CAP221

23 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. 23/04/2019 CAP221

24 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 23/04/2019 CAP221

25 example THEN: MOV AH,1 MOV AH,2 INT 21h MOV DL,AL CMP AL, ’y’ INT 21H
JMP END_IF ELSE_: MOV AH,4CH END_IF: MOV AH,1 INT 21h CMP AL, ’y’ JE THEN CMP AL,’Y’ JMP ELSE_ 23/04/2019 CAP221

26 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). 23/04/2019 CAP221

27 For loop_count times do statements end_for
Initialize count statements For loop_count times do statements end_for Count = count - 1 Count=0 False True 23/04/2019 CAP221

28 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. 23/04/2019 CAP221

29 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. 23/04/2019 CAP221

30 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 23/04/2019 CAP221

31 example Write a count-controlled loop to display a row of 80 stars.
Pseudo code algorithm is For 80 times do display ‘*’ end_for 23/04/2019 CAP221

32 example MOV CX,80 MOV AH,2 MOV DL,’*’ TOP: INT 21H LOOP TOP 23/04/2019
CAP221

33 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 more times. 23/04/2019 CAP221

34 LOOP instruction Solution:
use the instruction JCXZ (jump if CX is zero) before the loop. JCXZ des_label 23/04/2019 CAP221

35 LOOP instruction A loop implemented as follows is bypassed if CX is 0.
JCXZ skip top: ;body of the loop loop top Skip: 23/04/2019 CAP221

36 While Loop This loop depends on a condition. Pseudo code
while condition do statements end_while 23/04/2019 CAP221

37 While Loop condition True statements False 23/04/2019 CAP221

38 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 end_while 23/04/2019 CAP221

39 example MOV DX,0 ; or bx, cx, ax?? MOV AH,1 INT 21H WHILE_: CMP AL,0DH
JE END_ INC DX JMP WHILE_ END_ : 23/04/2019 CAP221

40 Repeat loop Another conditional loop is the repeat loop. Pseudo code
statements until condition 23/04/2019 CAP221

41 Repeat loop statements condition False True 23/04/2019 CAP221

42 example Write some code to read characters until a blank is read.
Pseudo code Repeat read a character until character is a blank 23/04/2019 CAP221

43 example MOV AH,1 REPEAT: INT 21H CMP AL,’ ’ JNE REPEAT 23/04/2019
CAP221

44 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. 23/04/2019 CAP221

45 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. 23/04/2019 CAP221

46 example Prompt 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 23/04/2019 CAP221

47 Top down program design
First refinement: Display the opening message. Read and process a line of text. Display the results. 23/04/2019 CAP221

48 example TITLE PGM6_2 : FIRST LAST CAPITALS .MODEL SMALL .STACK 100H
.DATA PROMPT 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 $' 23/04/2019 CAP221

49 Step 1 .CODE MAIN PROC ; initialize DS MOV AX,@DATA MOV DS, AX
; first step display opening message MOV AH,9 LEA DX,PROMPT INT 21H 23/04/2019 CAP221

50 Step 2: read and process a line of text
Read a character. While character is not a carriage return do If character is a capital letter Then If character precedes first capital First capital = character End_if If character follows last capital Last capital = character Read a character End_while 23/04/2019 CAP221

51 ;read and process a line of text MOV AH,1 INT 21H WHILE_:
; 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_if CHECK_LAST : ; if character follows last capital CMP AL,LAST JNG END_IF ; then LAST CAPITAL = character MOV LAST,AL ;end_if END_IF: ; read a character INT 21H JMP WHILE_ END_WHILE : A=65, Z=90, 23/04/2019 CAP221

52 Step 3: display the results
if no capitals were typed then display “no capitals” Else display first capital and last capital End_if 23/04/2019 CAP221

53 ; if no capital were typed CMP FIRST, '[' JNE CAPS ; then
; display results MOV AH,9 ; if no capital were typed CMP FIRST, '[' JNE CAPS ; then LEA DX,NOCAP_MSG JMP DISPLAY CAPS : LEA DX,CAP_MSG DISPLAY : INT 21H ;end_if ; DOS exit MOV AH,4CH MAIN ENDP END MAIN 23/04/2019 CAP221


Download ppt "High-level language structures"

Similar presentations


Ads by Google