You are on page 1of 24

PRGOGRAM OUTPUTS O TO 9 FROM LEFT TO RIGHT

DSPLEFT.ASM
NAME DISPLAYLEFT
TITLE DISPLAY 0 – 9 FROM LEFT TO RIGHT
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
;port address for 8253

= C40B TIMCTL EQU BASE_ADDRESS+0BH


= C408 TIMER0 EQU BASE_ADDRESS+08H
= C409 TIMER1 EQU BASE_ADDRESS+09H
= C40A TIMER2 EQU BASE_ADDRESS+0AH

;port address for 8255


= C403 CONTROL EQU BASE_ADDRESS+ 03H ;co ntrol port address for
8255
= C400 PORTA EQU BASE_ADDRESS+00H ;portb address for 8255
= C401 PORTB EQU BASE_ADDRESS+01H ;portb address for 8255
= C402 PORTC EQU BASE_ADDRESS+02H
= C41A STATUSRD EQU BASE_ADDRESS+1AH
= C419 CLEARFF EQU BASE_ADDRESS+19H

0000 00 00 00 00 00 0° DSP_TBL DB 0,0,0,0,0,0,


3F 06 5B 4F 66 6D DB 3FH,06H,5BH,4FH,66H,6DH
7D 07 7F 6F DB 7DH, 07H , 7FH, 6FH
0010 00 00 00 00 00 00 DB 0,0,0,0,0,0,0,0,0
00 00 00
= 0028 NPAN EQU 40
0019 00 COUNT DB ?
.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX

0005 B0 80 MOV AL,80H ; PORT A - PORTC LOWER


O/P
0007 BA C403 MOV DX,CONTROL ;PORT B - PORTC UPPER I/P
000A EE OUT DX,AL
000B BF 0000 MOV DI,0
000E C6 06 0019 R 28 MOV COUNT,NPAN

0013 DISP05:
0013 BA C402 MOV DX,PORTC ; DISPABLE ALL DIGTS
0016 B0 07 MOV AL,07H
0018 EE OUT DX,AL
0019 B9 0006 MOV CX,06H
001C B3 00 MOV BL,00
001E BE 0000 R MOV SI,OFFSET DSP_TBL
0021 03 F7 ADD SI,DI
0023 DISP00:
0023 8A C3 MOV AL,BL ; SELECT DEIGIT 0
0025 BA C402 MOV DX,PORTC
0028 EE OUT DX,AL

0029 BA C400 MOV DX,PORTA ; O/P NUMBER TO SELEC


TED DIGIT
002C AC LODSB
002D EE OUT DX,AL
002E E8 005F R CALL DELAY ; INTRODUCE DELAY
0031 FE C3 INC BL
0033 80 FB 05 CMP BL,05
0036 7E 02 JLE DISP20
0038 B3 00 MOV BL,00

003A DISP20:
003A E2 E7 LOOP DISP00
003C FE 0E 0019 R DEC COUNT
0040 75 D1 JNZ DISP05
0042 C6 06 0019 R 28 MOV COUNT,NPAN
0047 47 INC DI
0048 83 FF 0F CMP DI,0FH
004B 7E 06 JLE DISP25
004D BF 0000 MOV DI,00
0050 EB 01 90 JMP DISP25
0053 DISP25:
0053 B4 0B MOV AH,0BH
0055 CD 21 INT 21H
0057 0A C0 OR AL,AL
0059 74 B8 JZ DISP05
005B QUIT:
005B B4 4C MOV AH,4CH
005D CD 21 INT 21H

005F DELAY:
005F TMR00:

005F BA C40B MOV DX,TIMCTL


0062 B0 36 MOV AL,36H
0064 EE OUT DX,AL
0065 BA C408 MOV DX,TIMER0
0068 B0 22 MOV AL,22H
006A EE OUT DX,AL
006B B0 00 MOV AL,00
006D EE OUT DX,AL
006E BA C40B MOV DX,TIMCTL
0071 B0 B0 MOV AL,0B0H
0073 EE OUT DX,AL
0074 BA C40A MOV DX,TIMER2
0077 B0 64 MOV AL,64H
0079 EE OUT DX,AL
007A B0 00 MOV AL,00
007C EE OUT DX,AL
007D BA C41A MOV DX,STATUSRD
0080 TIME00:
0080 EC IN AL,DX
0081 24 02 AND AL,02H
0083 74 FB JZ TIME00
; CLEAR FF
0085 BA C419 MOV DX,CLEARFF
0088 EC IN AL,DX
0089 C3 RET
END ST0
DISPLAY 0 –9 FROM RIGHT TO LEFT
DSPRIGHT.ASM
NAME DISPLAYRIGHT
TITLE DISPLAY 0 –9 FROM RIGHT TO LEFT
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
;port address for 8253

= C40B TIMCTL EQU BASE_ADDRESS+0BH


= C408 TIMER0 EQU BASE_ADDRESS+08H
= C409 TIMER1 EQU BASE_ADDRESS+09H
= C40A TIMER2 EQU BASE_ADDRESS+0AH

;port address for 8255


= C403 CONTROL EQU BASE_ADDRESS+
= C400 PORTA EQU BASE_ADDRESS+
= C401 PORTB EQU BASE_ADDRESS+
= C402 PORTC EQU BASE_ADDRESS+02H

= C41A STATUSRD EQU BASE_ADDRESS+1AH


= C419 CLEARFF EQU BASE_ADDRESS+19H

0000 00 00 00 00 00 00 DSP_TBL DB 0,0,0,0,0,0


3F 06 5B 4F 66 6D DB 3FH,06H,5BH,4FH,66H,6DH
7D 07 7F 6F DB 7DH, 07H , 7FH, 6FH
0010 00 00 00 00 00 00 DB 0,0,0,0,0,0,0,0,0
00 00 00
= 000F NPAN EQU 15
0019 00 COUNT DB ?
.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 B0 80 MOV AL,80H
0007 BA C403 MOV DX,CONTROL
000A EE OUT DX,AL
000B BF 0000 MOV DI,00
000E C6 06 0019 R 0F MOV COUNT,NPAN

0013 DISP05:
0013 BA C402 MOV DX,PORTC
0016 B0 07 MOV AL,07H
0018 EE OUT DX,AL
0019 B9 0006 MOV CX,06H
001C B3 05 MOV BL,05
001E BE 0000 R MOV SI,OFFSET DSP_TBL
0021 03 F7 ADD SI,DI
0023 DISP00:
0023 8A C3 MOV AL,BL
0025 BA C402 MOV DX,PORTC
0028 EE OUT DX,AL
0029 BA C400 MOV DX,PORTA
002C AC LODSB
002D EE OUT DX,AL
002E E8 005F R CALL DELAY
0031 FE CB DEC BL
0033 80 FB 00 CMP BL,0
0036 7D 02 JGE DISP20
0038 B3 05 MOV BL,05
003A DISP20:
003A E2 E7 LOOP DISP00
003C FE 0E 0019 R DEC COUNT
0040 75 D1 JNZ DISP05
0042 C6 06 0019 R 0F MOV COUNT,NPAN
0047 47 INC DI
0048 83 FF 0F CMP DI,0FH
004B 7E 06 JLE DISP25
004D BF 0000 MOV DI,00
0050 EB 01 90 JMP DISP25
0053 DISP25:
0053 B4 0B MOV AH,0BH
0055 CD 21 INT 21H
0057 0A C0 OR AL,AL
0059 74 B8 JZ DISP05
005B QUIT:
005B B4 4C MOV AH,4CH
005D CD 21 INT 21H

005F DELAY:
005F TMR00:

005F BA C40B MOV DX,TIMCTL


0062 B0 36 MOV AL,36H
0064 EE OUT DX,AL
0065 BA C408 MOV DX,TIMER0
0068 B0 22 MOV AL,22H
006A EE OUT DX,AL
006B B0 00 MOV AL,00
006D EE OUT DX,AL
006E BA C40B MOV DX,TIMCTL
0071 B0 B0 MOV AL,0B0H
0073 EE OUT DX,AL

0074 BA C40A MOV DX,TIMER2


0077 B0 64 MOV AL,64H
0079 EE OUT DX,AL
007A B0 00 MOV AL,00
007C EE OUT DX,AL

007D BA C41A MOV DX,STATUSRD


0080 TIME00:
0080 EC IN AL,DX
0081 24 02 AND AL,02H
0083 74 FB JZ TIME00
; CLEAR FF
0085 BA C419 MOV DX,CLEARFF
0088 EC IN AL,DX
0089 C3 RET
END ST0
PROGRAM TO CONVERT A GIVEN 16 DIGIT BIARY TO BCD AND DISPLAY
H2BDISP.ASM
NAME DISPLAYH2B
TITLE DISPLAYS CONVERTED HEX VALUE IN BCD
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
;port address for 8253

= C40B TIMCTL EQU BASE_ADDRESS+0BH


= C408 TIMER0 EQU BASE_ADDRESS+08H
= C409 TIMER1 EQU BASE_ADDRESS+09H
= C40A TIMER2 EQU BASE_ADDRESS+0AH
= C41A STATUSRD EQU BASE_ADDRESS+1AH
= C419 CLEARFF EQU BASE_ADDRESS+19H

;port address for 8255


= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

0000 FFFF W1 DW 0FFFFH


0002 0000 W2 DW ?
0004 0000 W3 DW ?

0006 3F 06 5B 4F 66 6D LKUP_TBL DB 3FH,06H,5BH,4FH,66H,6DH


7D 07 7F 6F DB DB 7DH, 07H , 7FH, 6FH
0010 00 00 00 00 00 00 DSP_TBL DB 0,0,0,0,0,0
00 00 DB 0,0
0018 3F 3F 3F 3F 3F DSP_STOR DB 3FH,3FH,3FH,3FH,3FH
001D 00 00 00 00 00 00 DB 0,0,0,0,0,0
00 00 00 DB 0,0,0

= 000F NPAN EQU 15


0026 00 COUNT DB ?
.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 8E C0 MOV ES,AX
0007 E8 0089 R CALL HEX_BCD
000A C6 06 0026 R 0F MOV COUNT,NPAN
000F BF 0010 MOV DI,16
0012 DISP05:
0012 BA C402 MOV DX,PORTC
0015 B0 07 MOV AL,07H
0017 EE OUT DX,AL
0018 B9 0006 MOV CX,06H
001B B3 05 MOV BL,05
001D BE 0010 R MOV SI,OFFSET DSP_TBL
0020 03 F7 ADD SI,DI
0022 DISP00:
0022 8A C3 MOV AL,BL
0024 BA C402 MOV DX,PORTC
0027 EE OUT DX,AL
0028 BA C400 MOV DX,PORTA
002B AC LODSB
002C EE OUT DX,AL
002D E8 005E R CALL DELAY
0030 FE CB DEC BL
0032 80 FB 00 CMP BL,0
0035 7D 02 JGE DISP20
0037 B3 05 MOV BL,05
0039 DISP20:
0039 E2 E7 LOOP DISP00
003B FE 0E 0026 R DEC COUNT
003F 75 D1 JNZ DISP05
0041 C6 06 0026 R 0F MOV COUNT,NPAN
0046 47 INC DI
0047 83 FF 0F CMP DI,0FH
004A 7E 06 JLE DISP25
004C BF 0000 MOV DI,00
004F EB 01 90 JMP DISP25
0052 DISP25:
0052 B4 0B MOV AH,0BH
0054 CD 21 INT 21H
0056 0A C0 OR AL,AL
0058 74 B8 JZ DISP05
005A QUIT:
005A B4 4C MOV AH,4CH
005C CD 21 INT 21H
005E DELAY:
005E TMR00:
005E BA C40B MOV DX,TIMCTL
0061 B0 36 MOV AL,36H
0063 EE OUT DX,AL
0064 BA C408 MOV DX,TIMER0
0067 B0 22 MOV AL,22H
0069 EE OUT DX,AL
006A B0 00 MOV AL,00
006C EE OUT DX,AL
006D BA C40B MOV DX,TIMCTL
0070 B0 B0 MOV AL,0B0H
0072 EE OUT DX,AL
0073 BA C40A MOV DX,TIMER2
0076 B0 64 MOV AL,64H
0078 EE OUT DX,AL
0079 B0 00 MOV AL,00
007B EE OUT DX,AL
007C BA C41A MOV DX,STATUSRD
007F TIME00:
007F EC IN AL,DX
0080 24 02 AND AL,02H
0082 74 FB JZ TIME00
; CLEAR FF
0084 BA C419 MOV DX,CLEARFF
0087 EC IN AL,DX
0088 C3 RET
; ROUTINE TO CONVERT 16 BIT HEX NO. TO BCD
0089 HEX_BCD:
0089 A1 0000 R MOV AX,W1
008C 3D 0000 CMP AX,0000
008F 74 66 JZ ZEROS
0091 TEN_K:
0091 BB 2710 MOV BX,2710H
0094 E8 0104 R CALL SUBTRACT
0097 88 16 0004 R MOV BYTE PTR W3,DL ; TEN 1000
009B 50 PUSH AX
009C 53 PUSH BX
009D BB 0006 R MOV BX,OFFSET LKUP_TBL
00A0 BF 0018 R MOV DI,OFFSET DSP_STOR
00A3 8A C2 MOV AL,DL
00A5 D7 XLAT
00A6 AA STOSB
00A7 5B POP BX
00A8 58 POP AX
00A9 ONE_K:
00A9 BB 03E8 MOV BX,3E8H
00AC E8 0104 R CALL SUBTRACT
00AF 50 PUSH AX
00B0 53 PUSH BX
00B1 BB 0006 R MOV BX,OFFSET LKUP_TBL
00B4 8A C2 MOV AL,DL
00B6 D7 XLAT
00B7 AA STOSB
00B8 5B POP BX
00B9 58 POP AX
00BA 8A F2 MOV DH,DL ; 1000
00BC HUNDRED:
00BC BB 0064 MOV BX,64H
00BF E8 0104 R CALL SUBTRACT
00C2 50 PUSH AX
00C3 53 PUSH BX
00C4 BB 0006 R MOV BX,OFFSET LKUP_TBL
00C7 8A C2 MOV AL,DL
00C9 D7 XLAT
00CA AA STOSB
00CB 5B POP BX
00CC 58 POP AX
00CD 80 E6 0F AND DH,0FH
00D0 B1 04 MOV CL,04
00D2 D2 E6 SHL DH,CL
00D4 0A F2 OR DH,DL ;DH = 1000'S & 100'S
00D6 TENS:
00D6 BB 000A MOV BX,0AH
00D9 E8 0104 R CALL SUBTRACT
00DC 50 PUSH AX
00DD 53 PUSH BX
00DE BB 0006 R MOV BX,OFFSET LKUP_TBL
00E1 8A C2 MOV AL,DL
00E3 D7 XLAT
00E4 AA STOSB
00E5 5B POP BX
00E6 58 POP AX
00E7 53 PUSH BX
00E8 BB 0006 R MOV BX,OFFSET LKUP_TBL
00EB D7 XLAT
00EC AA STOSB
00ED 5B POP BX
00EE D2 E2 SHL DL,CL
00F0 0A D0 OR DL,AL
00F2 89 16 0002 R MOV W2,DX
00F6 C3 RET
00F7 C7 06 0002 R 0000 ZEROS: MOV W2,00
00FD C7 06 0004 R 0000 MOV W3,00
0103 C3 RET
0104 B2 00 SUBTRACT: MOV DL,0
0106 2B C3 SUB05: SUB AX,BX
0108 72 04 JC SUB10
010A FE C2 INC DL
010C EB F8 JMP SUB05
010E 03 C3 SUB10: ADD AX,BX ; RESTORE THE NO.
0110 C3 RET
END ST0
PROGRAM TO DISPLAY 4 BCD DIGITS ON DISPLAY
DISP4DG.ASM
NAME DISPLAY4DIGTS
TITLE DISPLAY 4 BCD DIGITS
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
;port address for 8253

= C40B TIMCTL EQU BASE_ADDRESS+0BH


= C408 TIMER0 EQU BASE_ADDRESS+08H
= C409 TIMER1 EQU BASE_ADDRESS+09H
= C40A TIMER2 EQU BASE_ADDRESS+0AH
= C41A STATUSRD EQU BASE_ADDRESS+1AH
= C419 CLEARFF EQU BASE_ADDRESS+19H

;port address for 8255


= C403 CONTROL EQU BASE_ADDRESS+
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+
= C402 PORTC EQU BASE_ADDRESS+02H

0000 3F 06 5B 4F 66 6D DSP_TBL DB 3FH, 06H, 5BH, 4FH, 66H, 6DH


7D 07 7F 6F DB 7DH, 07H , 7FH, 6FH

.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX

0005 B0 80 MOV AL,80H


0007 BA C403 MOV DX,CONTROL
000A EE OUT DX,AL
000B DISP05:
000B BA C402 MOV DX,PORTC
000E B0 07 MOV AL,07H
0010 EE OUT DX,AL
0011 B9 0004 MOV CX,04H
0014 B3 00 MOV BL,00
0016 BE 0000 R MOV SI,OFFSET DSP_TBL
0019 DISP00:
0019 8A C3 MOV AL,BL
001B BA C402 MOV DX,PORTC
001E EE OUT DX,AL
001F BA C400 MOV DX,PORTA
0022 AC LODSB
0023 EE OUT DX,AL
0024 E8 003E R CALL DELAY
0027 FE C3 INC BL
0029 80 FB 05 CMP BL,05
002C 7E 02 JLE DISP20
002E B3 00 MOV BL,00
0030 DISP20:
0030 E2 E7 LOOP DISP00
0032 B4 0B MOV AH,0BH
0034 CD 21 INT 21H
0036 0A C0 OR AL,AL
0038 74 D1 JZ DISP05
003A QUIT:
003A B4 4C MOV AH,4CH
003C CD 21 INT 21H
003E DELAY:
003E TMR00:

003E BA C40B MOV DX,TIMCTL


0041 B0 36 MOV AL,36H
0043 EE OUT DX,AL
0044 BA C408 MOV DX,TIMER0
0047 B0 22 MOV AL,22H
0049 EE OUT DX,AL
004A B0 00 MOV AL,00
004C EE OUT DX,AL
004D BA C40B MOV DX,TIMCTL
0050 B0 B0 MOV AL,0B0H
0052 EE OUT DX,AL
0053 BA C40A MOV DX,TIMER2
0056 B0 64 MOV AL,64H
0058 EE OUT DX,AL
0059 B0 00 MOV AL,00
005B EE OUT DX,AL
005C BA C41A MOV DX,STATUSRD
005F TIME00:
005F EC IN AL,DX
0060 24 02 AND AL,02H
0062 74 FB JZ TIME00
; CLEAR FF
0064 BA C419 MOV DX,CLEARFF
0067 EC IN AL,DX
0068 C3 RET
END ST0

PROGRAM DISPLAYS ALTERNATIVELY FIRE AND HELP


FIREHELP.ASM
NAME DISPLAYFIREHELP
TITLE DISPLAY FIRE AND HELP ALTERNATIVELY
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
;port address for 8253

= C40B TIMCTL EQU BASE_ADDRESS+0BH


= C408 TIMER0 EQU BASE_ADDRESS+08H
= C409 TIMER1 EQU BASE_ADDRESS+09H
= C40A TIMER2 EQU BASE_ADDRESS+0AH
= C41A STATUSRD EQU BASE_ADDRESS+1AH
= C419 CLEARFF EQU BASE_ADDRESS+19H

;port address for 8255


= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H
0000 00 00 00 00 00 00 DSP_TBL DB 0,0,0,0,0,0
00 00 71 06 50 79 DB 0,0,71H,06H,50H,79H

000C 00 00 00 00 76 79 DB 0,0,0,0,76H,79H,38H
38
0013 73 00 00 00 00 00 DB 73H, 0,0,0,0,0,0,0,0,0
00 00 00 00
;NPAN EQU 30
= 000F NPAN EQU 15
001D 00 COUNT DB ?
.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX

0005 B0 80 MOV AL,80H


0007 BA C403 MOV DX,CONTROL
000A EE OUT DX,AL
000B BF 0000 MOV DI,00
000E C6 06 001D R 0F MOV COUNT,NPAN
0013 DISP05:
0013 BA C402 MOV DX,PORTC
0016 B0 07 MOV AL,07H
0018 EE OUT DX,AL
0019 B9 0006 MOV CX,06H
001C B3 05 MOV BL,05
001E BE 0000 R MOV SI,OFFSET DSP_TBL
0021 03 F7 ADD SI,DI
0023 DISP00:
0023 8A C3 MOV AL,BL
0025 BA C402 MOV DX,PORTC
0028 EE OUT DX,AL
0029 BA C400 MOV DX,PORTA
002C AC LODSB
002D EE OUT DX,AL
002E E8 005F R CALL DELAY
0031 FE CB DEC BL
0033 80 FB 00 CMP BL,0
0036 7D 02 JGE DISP20
0038 B3 05 MOV BL,05
003A DISP20:
003A E2 E7 LOOP DISP00
003C FE 0E 001D R DEC COUNT
0040 75 D1 JNZ DISP05
0042 C6 06 001D R 0F MOV COUNT,NPAN
0047 47 INC DI
0048 83 FF 0F CMP DI,0FH
004B 7E 06 JLE DISP25
004D BF 0000 MOV DI,00
0050 EB 01 90 JMP DISP25
0053 DISP25:
0053 B4 0B MOV AH,0BH
0055 CD 21 INT 21H
0057 0A C0 OR AL,AL
0059 74 B8 JZ DISP05
005B QUIT:
005B B4 4C MOV AH,4CH
005D CD 21 INT 21H
005F DELAY:
005F TMR00:
005F BA C40B MOV DX,TIMCTL
0062 B0 36 MOV AL,36H
0064 EE OUT DX,AL
0065 BA C408 MOV DX,TIMER0
0068 B0 22 MOV AL,22H
006A EE OUT DX,AL
006B B0 00 MOV AL,00
006D EE OUT DX,AL
006E BA C40B MOV DX,TIMCTL
0071 B0 B0 MOV AL,0B0H
0073 EE OUT DX,AL
0074 BA C40A MOV DX,TIMER2
0077 B0 64 MOV AL,64H
0079 EE OUT DX,AL
007A B0 00 MOV AL,00
007C EE OUT DX,AL
007D BA C41A MOV DX,STATUSRD
0080 TIME00:
0080 EC IN AL,DX
0081 24 02 AND AL,02H
0083 74 FB JZ TIME00
; CLEAR FF
0085 BA C419 MOV DX,CLEARFF
0088 EC IN AL,DX
0089 C3 RET
END ST0

PORGRAM: RTC REALISED USING 8254 ADD-ON CARD


RTC.ASM
NAME RTC
TITLE RTC REALISED USING 8254 ON ADD ON CARD
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
;port address for 8253

= C40B TIMCTL EQU BASE_ADDRESS+0BH


= C408 TIMER0 EQU BASE_ADDRESS+08H
= C409 TIMER1 EQU BASE_ADDRESS+09H
= C40A TIMER2 EQU BASE_ADDRESS+0AH
= C41A STATUSRD EQU BASE_ADDRESS+1AH
= C419 CLEARFF EQU BASE_ADDRESS+19H

;port address for 8255


= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

0000 00 SEC DB 0
0001 00 MIN DB 0
0002 00 HR DB 0
0003 0014[ TIME DB 20 DUP(?)
??
]

.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX

0005 C6 06 0002 R 17 MOV HR,23


000A C6 06 0001 R 3B MOV MIN,59
000F C6 06 0000 R 1E MOV SEC,30
0014 TMR00:
0014 FE 06 0000 R INC SEC
0018 80 3E 0000 R 3C CMP SEC,60
001D 7C 25 JL RTC05
001F C6 06 0000 R 00 MOV SEC,0
0024 FE 06 0001 R INC MIN
0028 80 3E 0001 R 3C CMP MIN,60
002D 7C 15 JL RTC05
002F C6 06 0001 R 00 MOV MIN,0
0034 FE 06 0002 R INC HR
0038 80 3E 0002 R 18 CMP HR,24
003D 7C 05 JL RTC05
003F C6 06 0002 R 00 MOV HR,0
0044 RTC05:
0044 E8 00D3 R CALL DELAY
0047 TMR05:
0047 A0 0002 R MOV AL,HR
004A B4 00 MOV AH,0
004C 2C 0A TMR10: SUB AL,0AH
004E 72 04 JC RSTM1
0050 FE C4 INC AH
0052 EB F8 JMP TMR10

0054 04 0A RSTM1: ADD AL,0AH


0056 04 30 ADD AL,30H
0058 80 C4 30 ADD AH,30H
005B BE 0003 R MOV SI,OFFSET TIME
005E C7 04 2020 MOV WORD PTR [SI],' '
0062 46 INC SI
0063 46 I NC SI
0064 C7 04 2020 MOV WORD PTR [SI],' '
0068 46 INC SI
0069 46 INC SI
006A C7 04 2020 MOV WORD PTR [SI],' '
006E 46 INC SI
006F 46 INC SI
0070 88 24 MOV [SI],AH ; TENS HR
0072 46 INC SI
0073 88 04 MOV [SI],AL ; UNITS HR
0075 46 INC SI
0076 C6 04 3A MOV BYTE PTR [SI],':'
0079 46 INC SI
007A B4 00 MOV AH,0
007C A0 0001 R MOV AL,MIN
007F RPT0:
007F 2C 0A SUB AL,0AH
0081 72 04 JC RSTR0
0083 FE C4 INC AH
0085 EB F8 JMP RPT0
0087 RSTR0:
0087 04 0A ADD AL,0AH
0089 80 C4 30 ADD AH,30H ; TENS MIN
008C 04 30 ADD AL,30H ; UNIT MIN
008E 88 24 MOV [SI],AH
0090 46 INC SI
0091 88 04 MOV [SI],AL
0093 46 INC SI
0094 C6 04 3A MOV BYTE PTR [SI],':'
0097 46 INC SI
0098 A0 0000 R MOV AL,SEC
009B B4 00 MOV AH,0
009D RPT:
009D 2C 0A SUB AL,0AH
009F 72 04 JC RSTR
00A1 FE C4 INC AH
00A3 EB F8 JMP RPT
00A5 RSTR:
00A5 04 0A ADD AL,0AH
00A7 80 C4 30 ADD AH,30H ; TENS MIN
00AA 24 0F AND AL,0FH
00AC 04 30 ADD AL,30H ; UNIT MIN
00AE 88 24 MOV [SI],AH
00B0 46 INC SI
00B1 88 04 MOV [SI],AL
00B3 46 INC SI
00B4 C6 04 24 MOV BYTE PTR [SI],'$'
00B7 BA 0003 R MOV DX,OFFSET TIME
00BA B4 09 MOV AH,09
00BC CD 21 INT 21H
00BE B2 0D MOV DL,0DH
00C0 B4 02 MOV AH,02H
00C2 CD 21 INT 21H
00C4 B4 0B MOV AH,0BH
00C6 CD 21 INT 21H
00C8 0A C0 OR AL,AL
00CA 75 03 JNZ QUIT
00CC E9 0014 R JMP TMR00
00CF QUIT:
00CF B4 4C MOV AH,4CH
00D1 CD 21 INT 21H
00D3 DELAY:
00D3 BA C40B MOV DX,TIMCTL
00D6 B0 36 MOV AL,36H
00D8 EE OUT DX,AL
00D9 BA C408 MOV DX,TIMER0
00DC B0 E8 MOV AL,0E8H
00DE EE OUT DX,AL
00DF B0 03 MOV AL,03H
00E1 EE OUT DX,AL
00E2 BA C40B MOV DX,TIMCTL
00E5 B0 B0 MOV AL,0B0H
00E7 EE OUT DX,AL
00E8 BA C40A MOV DX,TIMER2
00EB B0 D0 MOV AL,0D0H
00ED EE OUT DX,AL
00EE B0 07 MOV AL,07H
00F0 EE OUT DX,AL
00F1 BA C41A MOV DX,STATUSRD
00F4 TIME00:
00F4 EC IN AL,DX
00F5 24 02 AND AL,02H
00F7 74 FB JZ TIME00
; CLEAR FF
00F9 BA C419 MOV DX,CLEARFF
00FC EC IN AL,DX
00FD C3 RET
END ST0

Multiplex:
Reads 8 bits i/p from PortB and Reads which bit to select
From Portc
Outputs that bit on to PortA
MUX.ASM
name multiplex
title Multiplex reads 8 bits i/p and reads whic
h bit to o/p & o/ps that bit
.model small
.stack 20
.data
= C400 BASE_ADDRESS EQU 0C400H
= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

.code
0000 B8 ---- R at0: mov ax,@data
0003 8E D8 mov ds,ax
0005 BA C403 MOV DX,CONTROL
0008 B0 8A MOV AL,8AH
000A EE OUT DX,AL
000B LP:
000B BA C401 mov dx,portb ; read input 8 bits
000E EC in al,dx
000F 8A E0 mov ah,al ; save i/p bits
0011 BA C402 mov dx,portc
0014 EC in al,dx ;upper 4 bits
ch. no.
0015 D0 C8 ror al,1
0017 D0 C8 ror al,1
0019 D0 C8 ror al,1
001B D0 C8 ror al,1
001D 24 07 and al,07h
001F 8A C8 mov cl,al ; no. of bits to
;rotate
0021 FE C1 inc cl
0023 8A C4 mov al,ah ;i/p back to al 8 bits
0025 D2 C8 ror al,cl ; ch. bit to carry
0027 72 05 jc out_one
0029 B0 00 out_zero: mov al,00
002B EB 03 90 jmp op
002E B0 01 out_one: mov al,01h
0030 BA C400 op: mov dx,PORTA
0033 EE out dx,al
0034 B40B MOV AH,0BH
0036 CD21 INT 21H
0038 0AC0 OR AL,AL
003A 74CF JZ LP
003C B44C MOV AH,4CH
003E CD21 INT 21H
0040 CC int 3
end at0
PROGRAM TO CHECK GIEN 8 I/P BITS FOR ODD OF EVEN PARITY
O/PS NO. OF 1’S ON PORTC
O/PS ON PORTA ODD/EVVEN PARITY ON LED
EVENPARY.ASM
name partiycheck
title Checks for even parity in a given byte
.model small
.stack 20
.data
= C400 BASE_ADDRESS EQU 0C400H
= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

.code
0000 B8 ---- R at0: mov ax,@data
0003 8E D8 mov ds,ax
0005 BA C403 MOV DX,CONTROL

0008 B0 8A MOV AL,8AH


000A EE OUT DX,AL
000B LP:
000B BA C401 mov dx,portb ; read input 8 bits
000E EC in al,dx
000F 8A E0 mov ah,al ; save i/p bits
0011 BA C402 mov dx,portc
0014 EC in al,dx ;upper 4 bits
ch. no.
0015 D0 C8 ror al,1
0017 D0 C8 ror al,1
0019 D0 C8 ror al,1
001B D0 C8 ror al,1
001D 24 07 and al,07h
001F 8A C8 mov cl,al ; no. of bits to r
otate
0021 FE C1 inc cl
0023 8A C4 mov al,ah ; i/p back to al 8 bi
ts
0025 D2 C8 ror al,cl ; ch. bit to carry
0027 72 05 jc out_one
0029 B0 00 out_zero: mov al,00
002B EB 03 90 jmp op
002E B0 01 out_one: mov al,01h
0030 BA C400 op: mov dx,PORTA
0033 EE out dx,al
0034 B4 0B MOV AH,0BH
0036 CD 21 INT 21H
0038 0A C0 OR AL,AL
003A 74 CF JZ LP
003C B4 4C MOV AH,4CH
003E CD 21 INT 21H
0040 CC int 3
end at0

MULTIPLY TWO 8 BIT X & Y AND OUTPUT RESULT

NAME MULTXY
TITLE MULTIPLY TWO 8 BIT X & Y AND OUTPUT RESULT
.MODEL SMALL
.STACK 20
.DATA
0000 53 45 54 20 56 41 MSG1 DB 'SET VALUES FOR X ON PORT B CON
TROL ON PORTC UPPER',0AH,0DH,'$'
4C 55 45 53 20 46
4F 52 20 58 20 4F
4E 20 50 4F 52 54
20 42 20 43 4F 4E
54 52 4F 4C 20 4F
4E 20 50 4F 52 54
43 20 55 50 50 45
52 0A 0D 24
0034 53 45 54 20 56 41 MSG2 DB 'SET VALUES FOR Y ON PORT B CON
TROL ON PORTC UPPER',0AH,0DH,'$'
4C 55 45 53 20 46
4F 52 20 59 20 4F
4E 20 50 4F 52 54
20 42 20 43 4F 4E
54 52 4F 4C 20 4F
4E 20 50 4F 52 54
43 20 55 50 50 45
52 0A 0D 24
0068 53 45 54 20 43 4F MSG3 DB 'SET CONTROL TO MULTIPLY ON POR
TC UPPER ',0AH,0DH,'$'
4E 54 52 4F 4C 20
54 4F 20 4D 55 4C
54 49 50 4C 59 20
4F 4E 20 50 4F 52
54 43 20 55 50 50
45 52 20 0A 0D 24

= C400 BASE_ADDRESS EQU 0C400H


= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 B0 8A MOV AL,8AH
0007 BA C403 MOV DX,CONTROL
000A EE OUT DX,AL
000B B0 00 MOV AL,00
000D BA C400 MOV DX,PORTA
0010 EE OUT DX,AL
0011 BA C402 MOV DX,PORTC
0014 EE OUT DX,AL
; PROMPT FOR X INPUT
0015 BA 0000 R MOV DX,OFFSET MSG1
0018 B4 09 MOV AH,09H
001A CD 21 INT 21H
001C B4 01 MOV AH,01 ; GET CHAR W/O ECHO
001E CD 21 INT 21H ; WAIT TO SET 'X' VALUES
0020 CHECK_CONTROL:
0020 BA C402 MOV DX,PORTC
0023 EC IN AL,DX
0024 24 30 AND AL,30H
0026 3C 00 CMP AL,00
0028 75 F6 JNZ CHECK_CONTROL
002A READ_X:
002A BA C401 MOV DX,PORTB
002D EC IN AL,DX
002E 8A C8 MOV CL,AL ; CL HAS X
0030 MUL00:
; PROMPT FOR Y INPUT
0030 BA 0034 R MOV DX,OFFSET MSG2
0033 B4 09 MOV AH,09H
0035 CD 21 INT 21H
0037 B4 01 MOV AH,01 ; GET CHAR W/O ECHO
0039 CD 21 INT 21H ; WAIT TO SET 'Y' VALUES
003B READ_Y:
003B BA C402 MOV DX,PORTC
003E EC IN AL,DX
003F 24 30 AND AL,30H
0041 3C 20 CMP AL,20H
0043 75 F6 JNZ READ_Y
0045 BA C401 MOV DX,PORTB
0048 EC IN AL,DX
0049 8A E8 MOV CH,AL ; CH HAS Y
004B MUL05:
; PROMPT FOR '*' INPUT ON CONTROL
004B BA 0068 R MOV DX,OFFSET MSG3
004E B4 09 MOV AH,09H
0050 CD 21 INT 21H
0052 B4 01 MOV AH,01 ; GET CHAR W/O ECHO
0054 CD 21 INT 21H ; WAIT FOT '*'CONTROL
0056 MULTKEY:
0056 BA C402 MOV DX,PORTC
0059 EC IN AL,DX
005A 24 30 AND AL,30H
005C 3C 30 CMP AL,30H
005E 75 F6 JNZ MULTKEY
0060 MULTIPLY:
0060 8A C4 MOV AL,AH
0062 F6 E1 MUL CL ; AX HAS PRODUCT
0064 DISPLAY:
0064 BA C400 MOV DX,PORTA
0067 EE OUT DX,AL
0068 8A E0 MOV AH,AL
006A 24 0F AND AL,0FH
006C BA C402 MOV DX,PORTC
006F EE OUT DX,AL
0070 B4 4C MOV AH,4CH
0072 CD 21 INT 21H
END ST0
PROGRAMMABLE COUNTER WITH OPTIONS:
UP/DOWN PC4 OFF/ON
BINARY/BCD PC5 OFF/ON
RUN/SET PC6 OFF/ON
PB0-PB3 COUNTER SET VALUE
Pcntr.asm

NAME counter
TITLE PROGRAMMABLE COUNTER
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

0000 00 W1 DB 0
0001 00 W2 DB 0
.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 B0 8A MOV AL,8AH
0007 BA C403 MOV DX,CONTROL
000A EE OUT DX,AL
000B CHK_RUN:
000B BA C402 MOV DX,PORTC
000E EC IN AL,DX
000F 24 10 AND AL,10H
0011 74 0B JZ RUN_MODE
0013 BA C401 MOV DX,PORTB
0016 EC IN AL,DX
0017 24 0F AND AL,0FH
0019 A2 0001 R MOV W2,AL
001C EB ED JMP CHK_RUN
001E RUN_MODE:
001E C6 06 0000 R 00 MOV W1,0
0023 BA C402 MOV DX,PORTC
0026 EC IN AL,DX
0027 24 20 AND AL,20H
0029 75 11 JNZ BCD_INIT
002B HEX_INIT:
002B BA C402 MOV DX,PORTC
002E EC IN AL,DX
002F 24 40 AND AL,40H
0031 74 1A JZ ST1
0033 A0 0001 R MOV AL,W2
0036 A2 0000 R MOV W1,AL
0039 EB 12 90 JMP ST1
003C BCD_INIT:
003C A0 0001 R MOV AL,W2 ;PREVIOUSLY READ VALUE
003F 3C 09 CMP AL,09H
0041 76 0A JBE BI05
0043 C6 06 0001 R 09 MOV W2,09H
0048 C6 06 0000 R 0A MOV W1,0AH
004D BI05:
004D BA C402 ST1: MOV DX,PORTC
0050 EC IN AL,DX
0051 24 20 AND AL,20H
0053 75 06 JNZ BCDCNT
0055 E8 00AD R CALL HEX
0058 EB 04 90 JMP COUNT05
005B E8 007D R BCDCNT: CALL BCD
005E 50 COUNT05: PUSH AX
005F E8 00D9 R CALL DISPLAY
0062 58 POP AX
0063 BA 03FF MOV DX,03FFH
0066 B9 FFFF L1: MOV CX,0FFFFH
0069 E2 FE L2: LOOP L2
006B 4A DEC DX
006C 75 F8 JNZ L1
006E 50 PUSH AX
006F B4 0B MOV AH,0BH
0071 CD 21 INT 21H
0073 0A C0 OR AL,AL
0075 58 POP AX
0076 74 D5 JZ ST1
0078 B4 4C MOV AH,4CH
007A CD 21 INT 21H
007C CC INT 3
007D BA C402 BCD: MOV DX,PORTC
0080 EC IN AL,DX
0081 24 40 AND AL,40H
0083 75 15 JNZ DNCNT_BCD
0085 UPCNT_BCD:
0085 A0 0000 R MOV AL,W1
0088 04 01 ADD AL,1
008A 3A 06 0001 R CMP AL,W2
008E 77 04 JA INIT_COUNT
0090 A2 0000 R MOV W1,AL
0093 C3 RET
0094 INIT_COUNT:
0094 B0 00 MOV AL,00
0096 A2 0000 R MOV W1,AL
0099 C3 RET

009A DNCNT_BCD:
009A A0 0000 R MOV AL,W1
009D 2C 01 SUB AL,1
009F 3C 00 CMP AL,00H
00A1 74 04 JZ INIT_DCOUNT_BCD
00A3 A2 0000 R MOV W1,AL
00A6 C3 RET
00A7 INIT_DCOUNT_BCD:
00A7 C6 06 0000 R 0A MOV W1,0AH
00AC C3 RET
00AD HEX:
00AD BA C402 MOV DX,PORTC
00B0 EC IN AL,DX
00B1 24 40 AND AL,40H
00B3 75 0F JNZ DNCNT_HEX
00B5 UPCNT_HEX:
00B5 A0 0000 R MOV AL,W1
00B8 04 01 ADD AL,1
00BA 3A 06 0001 R CMP AL,W2
00BE 77 D4 JA INIT_COUNT
00C0 A2 0000 R MOV W1,AL
00C3 C3 RET
00C4 DNCNT_HEX:
00C4 A0 0000 R MOV AL,W1
00C7 2C 01 SUB AL,1
00C9 3C FF CMP AL,0FFH
00CB 74 04 JZ INIT_DCOUNT_HEX
00CD A2 0000 R MOV W1,AL
00D0 C3 RET
00D1 INIT_DCOUNT_HEX:
00D1 A0 0001 R MOV AL,W2
00D4 A2 0000 R MOV W1,AL
00D7 C3 RET
00D8 STOP:
00D8 CC INT 3
00D9 DISPLAY:
00D9 BA C400 MOV DX,PORTA
00DC EE OUT DX,AL
00DD C3 RET
END ST0
PROGRAM TO SIMULATE ALU
ALU.ASM
INPUT:
PB0 A
PB1 B
PC4-5 0 0 ADD
PC4-5 0 1 SUBTRACT
PC4-5 1 0 AND
PC4-5 1 1 XOR

OUTPUT:
PA0 PA1 RESULT & CARRY/BARROW
NAME ALY
TITLE ALU
.MODEL SMALL
.STACK 20
.DATA
= C400 BASE_ADDRESS EQU 0C400H
= C403 CONTROL EQU BASE_ADDRESS+ 03H
= C400 PORTA EQU BASE_ADDRESS+00H
= C401 PORTB EQU BASE_ADDRESS+01H
= C402 PORTC EQU BASE_ADDRESS+02H

.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 B0 8A MOV AL,8AH
0007 BA C403 MOV DX,CONTROL
000A EE OUT DX,AL
000B B0 00 MOV AL,00
000D BA C400 MOV DX,PORTA
0010 EE OUT DX,AL
0011 READ_AB:
0011 BA C401 MOV DX,PORTB
0014 EC IN AL,DX
0015 24 03 AND AL,03H
0017 8A E8 MOV CH,AL ; A & B IN AH
0019 D0 CD ROR CH,1
001B 72 08 JC SETB
001D 80 E5 01 AND CH,01H
0020 B1 00 MOV CL,00H ;CH HAS A
0022 EB 06 90 JMP CHK_CONTROL
0025 SETB:
0025 B1 01 MOV CL,01H ; CL HAS B
0027 80 E5 0F AND CH,0FH
002A CHK_CONTROL:
002A BA C402 MOV DX,PORTC
002D EC IN AL,DX
002E 24 30 AND AL,30H
0030 3C 00 CMP AL,00
0032 74 0E JZ ADD2
0034 3C 10 CMP AL,10H
0036 74 0F JZ SUB2
0038 3C 20 CMP AL,20H
003A 74 10 JZ AND2
003C 3C 30 CMP AL,30H
003E 74 11 JZ XOR2
0040 EB CF JMP READ_AB
0042 ADD2:
0042 02 CD ADD CL,CH
0044 EB 0D 90 JMP DISPLAY
0047 SUB2:
0047 2A CD SUB CL,CH
0049 EB 08 90 JMP DISPLAY
004C AND2:
004C 22 CD AND CL,CH
004E EB 03 90 JMP DISPLAY
0051 XOR2:
0051 32 CD XOR CL,CH
0053 DISPLAY:
0053 8A C1 MOV AL,CL
0055 24 03 AND AL,03H
0057 BA C400 MOV DX,PORTA
005A EE OUT DX,AL
005B B4 4C MOV AH,4CH
005D CD 21 INT 21H
END READ_AB
PROGRAM TO GENERATE SQUARE WAVE
SQR.ASM
NAME SQRWAVE
TITLE PROGRAM TO GENERATE SQUAARE WAVE OF PC0 PIN ON ADD-ON CARD
.MODEL SMALL
.STACK 20
.DATA

= C403 CONTROL EQU 0C403H


= C400 PORTA EQU 0C400H
= C401 PORTB EQU 0C401H
= C402 PORTC EQU 0C402H
.CODE
0000 START:
0000 B8 ---- R MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 BA C403 MOV DX,CONTROL
0008 B0 8A MOV AL,
000A EE OUT DX,AL
000B DA00:
000B B0 FF MOV AL,0FFH
000D E8 002D R CALL OUTPUT
0010 B4 0B MOV AH,0BH
0012 CD 21 INT 21H
0014 0A C0 OR AL,AL
0016 74 04 JZ DA01
0018 B4 4C MOV AH,4CH
001A CD 21 INT 21H
001C DA01:
001C B0 FE MOV AL,0FEH
001E E8 002D R CALL OUTPUT
0021 B4 0B MOV AH,0BH
0023 CD 21 INT 21H
0025 0A C0 OR AL,AL
0027 74 E2 JZ DA00
0029 B4 4C MOV AH,4CH
002B CD 21 INT 21H
002D OUTPUT:
002D BA C402 MOV DX,PORTC
0030 EE OUT DX,AL
0031 E8 0035 R CALL DELAY
0034 C3 RET

0035 DELAY:
0035 B9 4FFF MOV CX,4FFFH
0038 E2 FE LUP1: LOOP LUP1
003A C3 RET
END
PROGRAM TO GENERATE TRIANGULAR WAVE
TRIAN.ASM
NAME TRIANWAVE
TITLE PROGRAM TO GENERATE TRIANGULAR WAVE
.MODEL SMALL
.STACK 20
.DATA
= C403 CONTROL EQU 0C403H
= C400 PORTA EQU 0C400H
= C401 PORTB EQU 0C401H
= C402 PORTC EQU 0C402H
.CODE
0000 START:
0000 B8 ---- R MOV AX,@DATA
0003 8E D8 MOV DS,AX
0005 BA C403 MOV DX,CONTROL
0008 B0 88 MOV AL,88H
000A EE OUT DX,AL ;ports

000B DA00:
000B B0 00 MOV AL,00H
000D E8 002D R UP: CALL OUTPUT
0010 FE C0 INC AL
0012 3C 00 CMP AL,00H
0014 75 F7 JNZ UP
0016 B0 FF MOV AL,0FFH
0018 E8 002D R UP1: CALL OUTPUT
001B FE C8 DEC AL
001D 3C FF CMP AL,0FFH
001F 75 F7 JNZ UP1
0021 B4 0B MOV AH,0BH
0023 CD 21 INT 21H
0025 0A C0 OR AL,AL
0027 74 E2 JZ DA00
0029 B4 4C MOV AH,4CH
002B CD 21 INT 21H
002D OUTPUT:
002D BA C400 MOV DX,PORTA
0030 EE OUT DX,AL
0031 BA C401 MOV DX,PORTB
0034 EE OUT DX,AL
0035 E8 0039 R CALL DELAY
0038 C3 RET

0039 DELAY:
0039 B9 0006 MOV CX,06H
003C E2 FE LUP1: LOOP LUP1
003E C3 RET
END

You might also like