preload preload preload preload

Sunday, January 24, 2010

Assembly Language Part 4

Conditional Branching in MASM
We have shown that the jump instructions can be used to implement branches and looops. However these instructions are difficult for beginners to apply as a substitute of high level branching statements.

In high level languages we use these basic structures -

IF-THEN
The if-then structure is the most common type of branching statement used. The pseudocode for IF-THEN is :


IF  CONDITION IS TRUE
     THEN EXECUTE TRUE BRANCH STATEMENTS
END_IF

MASM example:
Suppose we want to code the following pseudocode in MASM

IF AX< 0
    THEN REPLACE AX WITH ITS COMPLIMENTED VALUE
END_IF

The MASM code will be:

CMP AX,0
   JNL END_IF
   NEG AX

END_IF:

IF-THEN-ELSE
The if-then-else structure is the expansion of most common type of branching statement IF-THEN. The pseudocode for IF-THEN-ELSE is :

IF   Condition is TRUE
THEN
Execute true-branch statements
ELSE
Execute false-branch statements
END_IF

Lets explain by applying the following pseudocode in MASM

IF AL<= BL
  THEN
      DISPLAY THE CHARACTER IN AL
  ELSE
      DISPLAY THE CHARACTER IN BL
 END_IF

The MASM code will be -

MOV AH,2
CMP AL,BL
   JNBE ELSE_
   MOV DL,AL
   JMP DISPLAY_
ELSE_:
   MOV DL,BL
DISPLAY_:
   INT 21H

END_IF:


CASE
The case in high-level language is a multiway branch structure that tests a register, variable or expression for particular values or range of values. The pseudocode is :

CASE expression
    value_1: statement_1
    value_2: statement_2
    value_3: statement_3
    value_4: statement_4
    .................................
    value_n: statement_n
END_CASE

Consider the following pseudocode in MASM

IF AX a negative number
   THEN put -1 in BX
IF AX contains 0
   THEN put 0 in BX
IF AX contains a positive number
   THEN put 1 in BX

The MASM code will be -

CMP AX,0
   JL   NEGATIVE_
   JG   POSITIVE
 
   MOV BX,0
   JMP END_CASE

 NEGATIVE_:
   MOV BX,-1
   JMP END_CASE

POSITIVE_:
  MOV BX,1
  JMP END_CASE

END_CASE:


further reading:
http://www.cs.princeton.edu/

Assembly Language Programming and Organization of IBM PC
                                                                    Ytha Yu
                                                                    Charles Marut

1 comment: