Professional Documents
Culture Documents
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
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
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:
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:
.CODE
0000 B8 ---- R ST0: MOV AX,@DATA
0003 8E D8 MOV DS,AX
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
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
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
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
.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
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