LAB5
Objective: students will learn how to write program using the interrupts. INT 21H
and INT 10H is used in this program.
Lab Work:
The following programme firstly it clears the screen then set cursor position (in this
example row=5 column=8). After setting cursor, it displays some message.
; ----------------------------------------------------------------------------------
CLEAR MACRO
        MOV AX,0600H
        MOV BH,07
        MOV CX,0000
        MOV DX,184FH
        INT 10H
  ENDM
; ------------------------------------------- ---------------------------------------
CURSOR MACRO Col, Row
        MOV AH,02
        MOV BH,00
        MOV DL,Col
        MOV DH,Row
        INT 10H
  ENDM
; ----------------------------------------------------------------------------------
DISP MACRO MES
MOV AH,09
MOV DX,OFFSET MES
INT 21H
ENDM
; ----------------------------------------------------------------------------------
.MODEL SMALL
.STACK 64H
.DATA
MES1     DB  'There is a message for yo u'
         DB  ' To read it enter R','$'
MES2     DB  'Hi! This lab is about '
         DB  ' BIOS and DOS Interrupts ' ,'$'
MES3     DB  ' No more message for you','$'
.CODE
MAIN:     MOV AX,@DATA
          MOV DS, AX
          CLEAR
          CURSOR 05,08
          DISP MES1
          MOV AH, 07
          INT 21H
          CMP AL,'R'
          JZ NEXT
          CMP AL, 'r'
          JZ NEXT
          CURSOR 05,09
          DISP MES3
          JMP EXIT
NEXT:     CURSOR 05,09
          DISP MES2
EXIT:     MOV AH, 4CH
          INT 21H
      END MAIN
H.W. 5
1. Write a programme that it will read some numbers from the keyboard, if we input a random number
then corresponding message should be the output from the following messages:
               If the number <50 fail
               If the number   >50 and <60 satisfactory
               If the number >60 and <70 good
               If the number >70 and <80  very good
               If the number >80 and < 99  excellent
When the input is a letter then the program must be terminated, all the messages will be Output at the
center of the screen. When a new number has been entered the screen should be cleared before
displaying the new message.
org 100h
CLEAR MACRO
        MOV AX, 0600H
        MOV BH, 07
        MOV CX, 0000
        MOV DX, 184FH
        INT 10H
    ENDM
CURSOR MACRO Col, Row
        MOV AH, 02
        MOV BH, 00
        MOV DL, Col
        MOV DH, Row
        INT 10H
    ENDM
DISP MACRO MES
        MOV AH, 09
        MOV DX, OFFSET MES
        INT 21H
ENDM
.MODEL SMALL
.DATA
MES1     DB   'Enter the tenth position of a number between 00-99 ','$'
MES2     DB   'Enter the unit position of a number between 00-99 ','$'
MES3     DB   'Fail', '$'
MES4 DB       'Pass','$'
MES5 DB       'Good','$'
MES6 DB       'Very Good','$'
MES7 DB       'Excellent','$'
.CODE
MAIN: MOV AX,@DATA
    MOV DS, AX
          CLEAR
              CURSOR 06, 10
              DISP MES1
              MOV AH, 07
              INT 21H
    MOV BL, AL
              CURSOR 06, 11
              DISP MES2
              MOV AH, 07
              INT 21H
              MOV BH, AL
              MOV AL, BL
        CMP AL, '0'
              JB EXIT
              CMP AL, '4'
              JA LABEL1
              CURSOR 06, 12
              DISP MES3
LABEL1: CMP AL, '5'
    JNZ LABEL2
    CURSOR 06, 12
    DISP MES4
LABEL2: CMP AL, '6'
    JNZ LABEL3
    CURSOR 06, 12
    DISP MES5
LABEL3: CMP AL, '7'
    JNZ LABEL4
      CURSOR 06, 12
      DISP MES6
LABEL4: CMP AL, '8'
      JNZ LABEL5
      CURSOR 06, 12
      DISP MES7
LABEL5: CMP AL, '9'
      JNZ EXIT
      CURSOR 06, 12
      DISP MES7
EXIT: MOV AH, 4CH
      INT 21H
END MAIN
Ret
.MODEL SMALL
.DATA
MES1    DB      'Enter the tenth position of a number between 00-99 ','$'
MES2    DB      'Enter the unit position of a number between 00-99 ','$'
MES3    DB      'Fail', '$'
MES4 DB         'Pass','$'
MES5 DB         'Good','$'
MES6 DB         'Very Good','$'
MES7 DB         'Excellent','$'
DATA1 DB 3,?,3 DUP(?)
.CODE
MAIN: MOV AX,@DATA
      MOV DS, AX
         CLEAR
            CURSOR 06, 10
            DISP MES1
            MOV AH, 0AH
            MOV DX,OFFSET DATA1
            INT 21H
            MOV BP,DX
            MOV BX,[BP+2]
            ;CURSOR 06, 11
;           DISP MES2
;           MOV AH, 07
;           INT 21H
;           MOV BH, AL
            MOV AL, BL
      CMP AL, '0'
            JB EXIT
            CMP AL, '4'
            JA LABEL1
            CURSOR 06, 12
            DISP MES3
LABEL1: CMP AL, '5'
    JNZ LABEL2
    CURSOR 06, 12
    DISP MES4
LABEL2: CMP AL, '6'
    JNZ LABEL3
    CURSOR 06, 12
    DISP MES5
LABEL3: CMP AL, '7'
    JNZ LABEL4
    CURSOR 06, 12
    DISP MES6
LABEL4: CMP AL, '8'
      JNZ LABEL5
      CURSOR 06, 12
      DISP MES7
LABEL5: CMP AL, '9'
      JNZ EXIT
      CURSOR 06, 12
      DISP MES7
EXIT: MOV AH, 4CH
      INT 21H
END MAIN
ret
2. Develop an assembly language program to read the following test message from the data segment
Vertical Text Test and display the message from up to down. The display device is assumed to be in
the text mode with 25 x 80 resolution.
Hint:     INT 10H AH=02 sets cursor location and assumes row in DH and column in DL.
          INT 21H AH=02 outputs a character to the monitor. Assumes the character in DL (ASCII).
DOS INT 21h - DOS Function Codes
AH Description                           AH Description
01 Read character from STDIN             02 Write character to STDOUT
05 Write character to printer            06 Console Input/Output
07 Direct char read (STDIN), no echo 08 Char read from STDIN, no echo
09 Write string to STDOUT                0A Buffered input
0B Get STDIN status                      0C Flush buffer for STDIN
0D Disk reset                            0E Select default drive
19 Get current default drive             25 Set interrupt vector
2A Get system date                       2B Set system date
2C Get system time                       2D Set system time
2E Set verify flag                       30 Get DOS version
35 Get Interrupt vector
36 Get free disk space                  39 Create subdirectory
3A Remove subdirectory                  3B Set working directory
3C Create file                          3D Open file
3E Close file                           3F Read file
40 Write file                           41 Delete file
42 Seek file                            43 Get/Set file attributes
47 Get current directory                4C Exit program
4D Get return code                      54 Get verify flag
56 Rename file                          57 Get/Set file date
BIOS interrupt INT10H
                         Function
      Function                                   Parameters                            Return
                           code
                                                                             AL = video mode flag / CRT
Set video mode         AH=00h       AL = video mode
                                                                             controller mode byte
                       AH=01h       CH = Scan Row Start, CL = Scan Row End
Set text-mode cursor
shape                             Normally a character cell has 8 scan lines,
                                  0-7. So, CX=0607h is a normal underline
                                  cursor, CX=0007h is a full-block cursor. If
                                  bit 5 of CH is set, that often means "Hide
                                  cursor". So CX=2607h is an invisible
                                  cursor.
                                  Some video cards have 16 scan lines, 00h-
                                  0Fh.
                                  Some video cards don't use bit 5 of CH.
                                  With these, make Start>End (e.g.
                                  CX=0706h)
                                  BH = Page Number, DH = Row, DL =
Set cursor position      AH=02h
                                  Column
                                                                                AX = 0, CH = Start scan line,
Get cursor position and
                        AH=03h    BH = Page Number                              CL = End scan line, DH =
shape
                                                                                Row, DL = Column
                                                                                AH = Status (0=not triggered,
                                                                                1=triggered), BX = Pixel X,
Read light penposition
                                                                                CH = Pixel Y, CX = Pixel line
(Does not work           AH=04h
                                                                                number for modes 0Fh-10h,
on VGAsystems)
                                                                                DH = Character Y, DL =
                                                                                Character X
Select active display
                         AH=05h   AL = Page Number
page
                                  AL = lines to scroll (0 = clear, CH, CL,
                                  DH, DL are used),
                                  BH = Background Color and Foreground
                                  color. BH = 43h, means that background
Scroll up window         AH=06h   color is red and foreground color is cyan.
                                  Refer the BIOS color attributes
                                  CH = Upper row number, CL = Left
                                  column number, DH = Lower row number,
                                  DL = Right column number
Scroll down window       AH=07h   like above
Read character and
attribute at cursor      AH=08h   BH = Page Number                              AH = Color, AL = Character
position
Write character and               AL = Character, BH = Page Number, BL
attribute at cursor      AH=09h   = Color, CX = Number of times to print
position                          character
Write character only at              AL = Character, BH = Page Number, CX =
                          AH=0Ah
cursor position                      Number of times to print character
Set background/border     AH=0Bh,    BL = Background/Border color (border
color                     BH = 00h   only in text modes)
                                     BL = Palette ID (was only valid in CGA,
                          AH=0Bh,
Set palette                          but newer cards support it in many or all
                          BH = 01h
                                     graphics modes)
                                     AL = Color, BH = Page Number, CX = x,
Write graphics pixel      AH=0Ch
                                     DX = y
Read graphics pixel       AH=0Dh     BH = Page Number, CX = x, DX = y            AL = Color
                                     AL = Character, BH = Page Number, BL
Teletype output           AH=0Eh
                                     = Color (only in graphic mode)
Get current video mode AH=0Fh                                                    AL = Video Mode
Write string (EGA+,                  AL = Write mode, BH = Page Number, BL
meaning PC                AH=13h     = Color, CX = String length, DH = Row,
ATminimum)                           DL = Column, ES:BP = Offset of string