PC-EE692_Microprocessor & Microcontroller lab.
PC-EE692_Microprocessor & Microcontroller lab.
Lab Manual
Programme B. Tech
Course Affiliated by MAKAUT
Laboratory Name Microprocessor &
Microcontroller
Course Code PC-EE 692
Year & Semester 2nd Yr. 4th Sem
List of Experiment to be performed as per the latest
Syllabusby MAKAUT
ALGORITHM:
INITIALIZATION OF DATA
& EXTRA SEGMENT
AXOPR1
AXAX+OPR2
SUMAX
STOP
PROGRAM:
(A) 16-bit addition using different addressing modes
ASSUME CS: CODE, DS: DATA, ES: EXTRA
DATA SEGMENT
OPR1 DW 5169H
OPR2 DW 1000H
DATA ENDS
EXTRA SEGMENT
SUM DW ?
EXTRA ENDS CODE
SEGMENT START:
MOV AX, DATA
MOV DS, AX ; REGISTER ADDRESIING MODE
MOV AX, OPR1 ; DIRECT ADDRESSING MODE
ADD AX, OPR2 ; DIRECT ADDRESSING MODE
MOV SUM, AX ; DIRECT ADDRESSING MODE
INT 03H
CODE ENDS
END START
END
(B)16-bit subtraction using different addressing modes
ALGORITHM:
FLOW CHART:
START
INITIALIZATION OF DATA
SEGMENT
AXOPR1
AXAX-OPR2
DIFFAX
STOP
PROGRAM:
ASSUME CS:CODE, DS:DATA,ES:EXTRA
DATA SEGMENT
OPR1 DW 5169H
OPR2 DW 1000H
DATA ENDS EXTRA
SEGMENT
DIFF DW ?
EXTRA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX ;REGISTER ADDRESIING MODE
MOV AX, EXTRA
MOV ES, AX ;REGISTER ADDRESIING MODE
MOV BX, OFFSET OPR1 ;DIRECT ADDRESSING MODE
MOV AX, [BX] ; BASE ADDRESSING MODE/
SUB AX, OPR2 ;DIRECT ADDRESSING MODE
MOV DIFF , AX ;DIRECT ADDRESSING MODE
INT 03H
CODE ENDS
END START
END
(C) 16-bit Multiplication using different addressing modes
ALGORITHM:
INITIALIZATION OF
DATA &
EXTRASEGMENT
AXOPR1
BXOPR2
STOP
PROGRAM:
ASSUME CS: CODE, DS: DATA, ES: EXTRA
DATA SEGMENT
OPR1 DW 5169H
OPR2 DW 1000H
DATA ENDS
EXTRA SEGMENT
RES DW 2 DUP(0)
EXTRA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX ; REGISTER ADDRESIING MODE
MOV AX, EXTRA
MOV ES, AX ; REGISTER ADDRESIING MODE
MOV SI, OFFSET OPR1
MOV AX, [SI] ; INDEXED ADDRESSING MODE
MOV BX,OPR2 ; DIRECT ADDRESSING MODE
MUL BX ; REGISTER ADDRESSING MODE
MOV RES, AX ; DIRECT ADDRESSING MODE
MOV RES+2, DX ; DIRECT ADDRESSING MODE
INT 03H
CODE ENDS
END START
END
DIVISION OF DX:AX BY BX
STOP
PROGRAM:
DATA SEGMENT
OPR1 DD 74105169H
OPR2 DW 7875H
DATA ENDS
EXTRA SEGMENT
DIVQ DW ?
DIVR DW ?
EXTRA ENDS
CODE SEGMENT
MOV DIVQ , AX
MOV DIVR , DX
INT 03H
CODE ENDS
END START
END
Result:
UNSIGNED NUMBERS
INPUT: OPR1 =
OPR2 =
OUTPUT: ALL RESULTS ARE STORED IN EXTRA SEGMENT (ES)
SUM =
DIFF=
MUL=
MUL+2=
DIVQ=
DIVR=
EXPERIMENT NO. 02
Program for sorting an array for 8086
AIM: Write and execute an ALP to 8086 processor to sort the given 16-bit numbers in
Ascending and Descending order.
ALGORITHM:
INITIALIZATION OF
DATA SEGMENT
DXCOUNT-1
BACK : CXDX
SIOFFSET
ADDRESS OF LIST
AX[SI]
TRUE
IF
AX < [SI+2]
FALSE
EXCHANGE
[SI] &[SI+2]
INCREMENT SI BY 2
FALSE
IF
CX=0
TRUE
DECREMENT DX
FALSE
IF
DX=0
TRUE
STOP
Program:
ASCENDING ORDER
INITIALIZATION OF
DATA SEGMENT
DXCOUNT-1
BACK : CXDX
SIOFFSET ADDRESS
OF LIST
AGAIN: AX[SI]
TRUE
IF
AX > [SI+2]
FALSE
EXCHANGE
[SI] &[SI+2]
INCREMENT SI BY 2
FALSE
IF
CX=0 ?
TRUE
DECREMENT DX
FALSE
IF
DX=0 ?
TRUE
STOP
DESCENDING ORDER
PROGRAM:
ASSUME CS: CODE, DS:DATA
DATA SEGMENT
LIST DW 0125H,0144H,3001H,0003H,0002H
COUNT EQU 05H
DATA ENDS
CODE SEGMENT
START:MOV AX,DATA
MOV DS,AX
MOV DX,COUNT-1
BACK:MOV CX,DX
MOV SI,OFFSET LIST
AGAIN:MOV AX,[SI]
CMP AX,[SI+2]
JAE GO
XCHG AX,[SI+2]
XCHG AX,[SI]
GO:INC SI
INC SI
LOOP AGAIN
DEC DX
JNZ BACK
INT 03H
CODE ENDS
END START
END
Result:
INPUT: (DS: 0000H) = 25H,01H,44H,01H,01H,30H,03H,00H,02H,00H
OUTPUT: (DS: 0000H) =
EXPERIMENT NO: 03
Program for searching for a number or character in a string for 8086
AIM: Write an ALP for searching for a number or character in a string for 8086.
TOOLS: PC installed with MASM 6.11
ALGORITHM:
INITIALIZATION OF DATA
&EXTRA SEGMENT
ALCHARACTER CXCOUNT,
SI, OFFSET LIST
NO
SEARCH FOR
CHARACTER
YES
TERMINATE THE
PROGRAM
STOP
Program:
A) BLOCK TRANSFER
ALGORITHM:
STOP
PROGRAM:
ASSUME CS: CODE, DS: DATA
DATA SEGMENT
STRING DB „MICROPROCESSOR$‟
COUNT EQU ($-STRING)
ORG 0070H
DATA ENDS
EXTRA SEGMENT
ORG 0010H
STRING1 DB ?
EXTRA ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV AX, EXTRA
MOV ES,AX
MOV SI,OFFSET STRING
MOV DI,OFFSET STRING1
MOV CL,COUNT
CLD
REP MOVSB
INT 03H
CODE ENDS
END START
END
RESULT:
INPUT: (DS: 0000H) = MICROPROCESSOR
OUTPUT: (ES: 0010H) = MICROPROCESSOR
B) REVERSE STRING
START
STOP
PROGRAM:
OUTPUT: „ROSSECORPORCIM‟
C) LENGTH OF THE STRING
AIM: To write an assembly language program to find the length of the given string.
ALGORITHM:
NO
ZF=0 ?
YES
Decrement CL
STOP
PROGRAM:
OUTPUT:
D) STRING COMPARISON
ALGORITHM:
Step I : Initialize the data segment (DS) & extra Segment as per requirement
Step II : Load the offset address of source and destination of the string into SI and DI.
Step III : Initialize the counter register CX with length of source string
Step IV : Clear Direction flag (DF) to make SI and DI into auto increment mode
Step V : Compare source string with destination string until the characters are not equal
or up to last last character
Step VII : If ZF=0 the strings are equal or otherwise the strings are not equal
Step VIII : Stop.
START
NO
ZF=0
YES
START
Program:
ASSUME CS: CODE, DS:DATA, ES:EXTRA
DATA SEGMENT
STRING1 DB 'MRCET'
STRLEN EQU ($-STRING1)
SNOTEQUAL DB 'STRINGS ARE UNEQUAL$'
SEQUAL DB 'STRINGS ARE EQUAL$'
DATA ENDS
EXTRA SEGMENT
STRING2 DB 'MRCET'
EXTRA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AX,EXTRA
MOV ES,AX
MOV SI,OFFSET STRING1
MOV DI,OFFSET STRING2
CLD
MOV CX,STRLEN
REPZ CMPSB
JZ FORW
MOV AH, 09H
MOV DX, OFFSET SNOTEQUAL
INT 21H
JMP EXITP
FORW: MOV AH,09H
MOV DX, OFFSET SEQUAL
INT 21H
EXITP: MOV AH, 4CH
INT 03H
CODE ENDS
END START
RESULT: INPUT:
OUTPUT:
AIM: To Write and execute an Assembly language Program (ALP) to 8086 processor to insert
or delete a character/ number from the given string.
ALGORITHM:
Step I :Initialize the data segment (DS) & extra segment (ES)
Step II :Load the offset address of source and destination of the string into SI and DI.
Step III :Initialize the counter register CX with length of first part of source string
Step IV : Copy the first part of STRING1 in to STRING3 of extra segment
Step V : Load the offset address of STRING2 in to SI
Step VI : Copy the STRING2 in to STRING3 of extra segment after first string of STRING1
Step VII: Load the new offset address of source of the STRING1 into SI
Step VIII: Copy the second part of STRING1 in to extra segment
Step IX: Stop
Program:
ASSUME CS: CODE, DS:DATA,ES:EXTRA
DATA SEGMENT
STRING1 DB 'MICROPROCESSOR INTERFACING LAB$'
STRING2 DB „AND ‟
STRLEN EQU ($-STRING1)
ORG 0070H
DATA ENDS
EXTRA SEGMENT
ORG 0010H
STRING3 DB 38 DUP(0)
EXTRA ENDS
CODE SEGMENT
START: MOV AX, DATA
FLOW CHART:
START
STOP
MOV DS, AX
MOV AX, EXTRA
MOV ES, AX
MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING3
CLD
MOV CX, 15
REP MOVSB
CLD
MOV SI, OFFSET STRING2
MOV CX,4
REP MOVSB
RESULT:
INPUT: STRING1: 'MICROPROCESSOR INTERFACING LAB'
STRING2:„AND ‟
OUTPUT: STRING3: „MICROPROCESSOR AND INTERFACING LAB
(F) STRING DELETION
RESULT:
INPUT: STRING1: MICROPROCESSOR AND INTERFACING LAB'
OUTPUT: STRING2: 'MICROPROCESSOR INTERFACING LAB'
EXPERIMENT NO. 05
Program for digital clock design using 8086
TOOLS:
i. UXASM
ii. TKUP
iii. TKUP86 KIT
iv. FRC CABLE
PROGRAM:
#INCLUDE "TKUP86.DEF"
ORG 0FF000H
START: MOV SP,STKPTR ; load stack pointer
CALL INIT8255 ; initialize 8255
MOV AL,0CH
MOV [0200H], AL
MOV AL, 00H
NXTHR: MOV CX, 003CH
NXTMNT: MOV BX,003CH
NXTSEC: CALL SECDLY
MOV DX,PA8255
MOV AL, 07H
OUT DX,AL
DEC BX
JNE NXTSEC
MOV DX,PA8255
MOV AL,38H
OUT DX,AL
DEC CX
JNE NXTMNT
MOV DX, PA8255
MOV AL, 0C0H
OUT DX, AL
MOV AX,[0200H]
DEC AX
MOV [0200H], AX
JNE NXTHR
SECDLY: PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CX, 1234H
DLY: NOP
NOP
LOOP DLY
POP DX
POP CX
POP BX
POP AX
RET
RESULT: INPUT:
OUTPUT:
EXPERIMENT NO: 06
Interfacing ADC and DAC to 8086
TOOLS:
i. UXASM
ii. TKUP
iii. TKUP86 KIT
iv. FRC CABLE
v. ADC KIT
PROGRAM:
CONNECT BH4 (PORT A) TO DAC BH1A
CONNECT BH5 (PORTB) TO DAC BH2B
CONNECT CRO PROBES TO CND1_1 OF DAC
#INCLUDE "TKUP86.DEF"
DATA SEGMENT
MEM DW 2000H
DATA ENDS
CODE SEGMENT
MOV DS, AX
OUT DX, AL
MOV AL, 01H
OUT DX, AL
MOV AL, 00
OUT DX, AL
CHK: IN AL, DX
JZ CHK
IN AL, DX
MOV MEM, AL
INT 03H
CODE ENDS
END START
RESULT: INPUT :
OUTPUT :
INTERFACING DAC TO 8086
TOOLS:
i. UXASM
ii. TKUP
iii. TKUP86 KIT
iv. FRC CABLE
v. DAC KIT
PROGRAM:
#INCLUDE "TKUP86.DEF"
ORG 0FFFF0H
JMPF 0F000H,0F000H
ORG 0FF000H
MOV AL,080H
MOV DX,CMD8255
OUT DX,AL
MOV AL,00H
MOV DX,PA8255
OUT DX,AL
MOV DX,PB8255
OUT DX,AL
MOV DX,PC8255
OUT DX,AL
RPT: MOV AL,00H
MOV AL,0FFH
AGAIN: MOV DX, PA8255
OUT DX, AL
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
INC AX
JNE AGAIN
JMP RPT
RESULT: INPUT :
OUTPUT :
EXPERIMENT NO: 07
Parallel communication between two microprocessors using 8255
AIM: Write an ALP for parallel communication between two microprocessors using 8255
TOOLS:
i. UXASM
ii. TKUP
iii. TKUP86 KIT
iv. FRC CABLE
#INCLUDE "TKUP86.DEF"
ORG 0FFFF0H
JMPF 0F000H,0F000H
ORG 0FF000H
MOV AL,080H
MOV DX,CMD8255
OUT DX,AL
MOV AL,00H
MOV DX,PA8255
OUT DX,AL
MOV DX,PB8255
OUT DX,AL
MOV DX,PC8255
OUT DX,AL
RPT: MOV AL,47H
MOV DX,PA8255
OUT DX,AL
MOV DX,PB8255
OUT DX,AL
MOV DX,PC8255
OUT DX,AL
JMP RPT
PROGRAM: FOR DATA OUT KIT
#INCLUDE "TKUP86.DEF
ORG 0FFFF0H
JMPF 0F000H,0F000H
ORG 0FF000H
MOV AL,090H
MOV DX,CMD8255
OUT DX,AL
MOV AL,00H
MOV DX,PA8255
OUT DX,AL
MOV DX,PB8255
OUT DX,AL
MOV DX,PC8255
OUT DX,AL
RPT: MOV DX,PA8255
IN AL,DX
MOV [0200H],AL
MOV DX,PB8255
OUT DX,AL
MOV DX,PC8255
OUT DX,AL
` JMP RPT
RESULT:
EXPERIMENT NO: 08
Interfacing to 8086 and programming to control stepper motor
ORG 0FFFF0H
JMPF 0F000H,0F000H; the basic reset jump
ORG 0FF000H
START MOV SP,STKPTR; load stack pointerCALL
INIT8255; initialize 8255
LP1 MOV AL,01H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL;
CALL DELAY; call delay
MOV AL,02H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL
CALL DELAY; call delay
MOV AL,04H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL
CALL DELAY; call delay
MOV AL,08H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL
CALL DELAY; call delayJMP START ;
restart again
DELAY NOP;
MOV CX,03500H ; load Delay count = 0x3500NOP
;
DLY1 NOP ;
LOOP DLY1 ;
RET ; end of delay
ORG 0FFFF0H
JMPF 0F000H,0F000H; the basic reset jump
ORG 0FF000H
START MOV SP,STKPTR; load stack pointerCALL
INIT8255; initialize 8255
LP1 MOV AL,08H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL;
CALL DELAY; call delay
MOV AL,04H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL
CALL DELAY; call delay
MOV AL,02H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL
CALL DELAY; call delay
MOV AL,01H; use num1 for led count valueMOV
DX,PA8255;
OUT DX,AL
CALL DELAY; call delayJMP START ;
restart again
DELAY NOP;
MOV CX,03500H; load Delay count = 0x3500NOP ;
DLY1 NOP ;
LOOP DLY1 ;
RET ; end of delay
RESULT: INPUT:
OUTPUT:
EXPERIMENT NO: 10
AIM: Write an ALP for Arithmetic, logical and bit manipulation operations in 8051
TOOLS:
i. UXASM
ii. TKUP
iii. TKUP86 KIT
iv. FRC CABLE
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN MOV SP,#50H
MOV R0,#20H
MOV R1,#07H
MOV A,R0
ADD A,R1
MOV P1,A
LCALL DELAY
MOV A,R0
SUBB A,R1
MOV P1,A
LCALL DELAY
MOV A,R0
MOV 0F0H,R1
MUL AB
MOV P1,A
LCALL DELAY
MOV P1,0F0H
LCALL DELAY
MOV A,R0
MOV 0F0H,R1
DIV AB
MOV P1,A
LCALL DELAY
MOV P1,0F0H
LCALL DELAY
LJMP MAIN
DELAY NOP
MOV R4,#020H
DLY3 MOV R3,#0FFH
DLY2 MOV R2,#0FFH
NOP
DLY1 NOP
NOP
NOP
NOP
DJNZ R2,DLY1
DJNZ R3,DLY2
DJNZ R4,DLY3
RET ;
i) ;Connect P1 to CNLED1
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN MOV SP,#50H
MOV A,#35H
ANL A,#0FH
MOV P1,A
ACALL DLY
MOV A,#04H
ORL A,#30H
MOV P1,A
ACALL DLY
MOV A,#54H
XRL A,#78H
MOV P1,A
ACALL DLY
MOV A,#55H
CPL A
MOV P1,A
ACALL DLY
DLY NOP
NOP
MOV R4,#020H
DLY3 MOV R3,#0FFH
DLY2 MOV R2,#0FFH
NOP
DLY1 NOP
NOP
NOP
NOP
DJNZ R2,DLY1
DJNZ R3,DLY2
DJNZ R4,DLY3
RET
ii) ;Connect P1 to CNLED1
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN: MOV SP,#060H
MOV A,#0A5H
MOV P1,A
LCALL SFTDL
RR A
MOV P1,A
LCALL SFTDL
SWAP A
MOV P1,A
LCALL SFTDL
RL A
MOV P1,A
LCALL SFTDL
SETB C
RLC A
MOV P1,A
LCALL SFTDL
RRC A
MOV P1,A
LCALL SFTDL
LJMP MAIN
RESULT: INPUT :
OUTPUT:
EXPERIMENT NO: 11
Program and verify Timer/Counter in 8051
TOOLS: i) UXASM
ii)TKUP
iii)TKUP86 KIT
iv)FRC CABLE
PROGRAM:
;Connect P1 to CNLED1
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN: MOV SP,#060H
MOV TMOD,#01H
BACK: MOV TL0,#075H
MOV TH0,#0B8H
MOV P1,#0AAH
LCALL SFTDL
ACALL DELAY
MOV TL0,#00H
MOV TH0,#00H
MOV P1,#055H
ACALL DELAY
LCALL SFTDL
SJMP BACK
ORG 300H
DELAY: SETB TCON4
AGAIN: JNB TCON5,AGAIN
CLR TCON4
CLR TCON5
RET
RESULT: INPUT :
OUTPUT:
EXPERIMENT NO: 12
Program and verify interrupt handling in 8051
AIM: Write an ALP to verify the interrupt handling in 8051
TOOLS: i) UXASM
ii)TKUP
iii)TKUP86 KIT
iv)FRC CABLE
PROGRAM:
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN MOV SP,#50H
MOV IE,#85H
HERE MOV P1,#7EH
SJMP HERE
ORG 0003H ;INT0 ISR
MOV P1,#0AAH
LCALL DELAY
LCALL DELAY
LCALL DELAY
RETI
ORG 0013H ;INT1 ISR
MOV P1,#0A5H
LCALL DELAY
LCALL DELAY
RETI
DELAY NOP
MOV R4,#020H
DLY3 MOV R3,#0FFH
DLY2 MOV R2,#0FFH
DLY1 NOP
NOP
DJNZ R2,DLY1
DJNZ R3,DLY2
DJNZ R4,DLY3
RET
RESULT: INPUT :
OUTPUT :
EXPERIMENT NO: 13
UART operation in 8051
TOOLS: i) UXASM
ii) TKUP
iii) TKUP86 KIT
iv) FRC CABLE
PROGRAM:
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN: MOV SP,#060H
MOV IE,#85H
MOV TMOD,#20H
MOV TH1,#0FAH
MOV SCON,#50H
SETB TCON6
RPT: MOV SBUF,#'Y'
HERE: JNB SCON1,HERE
CLR SCON1
MOV A,#'A'
MOV P1,A
SJMP RPT
RESULT: INPUT :
OUTPUT :
EXPERIMENT NO: 14
Interfacing LCD to 8051
TOOLS: i)UXASM
ii)TKUP
iii)TKUP86 KIT
iv)FRC CABLE
PROGRAM:
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN MOV SP,#060H
LCALL INIT8255
LOOP MOV DPTR,#CMDTBL
LCALL INIT_LCD
MOV DPTR,#STRTBL
LP1 MOV A,#0
MOVC A,@A+DPTR
CJNE A,#00,LP2
LCALL DELAY
LCALL DELAY
LCALL DELAY
LJMP MAIN
LP2 LCALL WR_DAT
INC DPTR
LCALL SDELAY
LJMP LP1
;******Write Port
WRPORT CLR P1_7
MOVX @DPTR,A
SETB P1_7
RET
ORG 0500H
;******* initialize seven segment table
CMDTBL HEX 38,0E,02,01,00
STRTBL ASCII "HELLO ADM - TKUP"
ENDTBL HEX 00,00
RESULT: INPUT :
OUTPUT :
EXPERIMENT NO: 15
Interfacing matrix or keyboard to 8051
AIM: Write an ALP for interfacing Matrix/keyboard to 8051
TOOLS: i) UXASM
ii) TKUP
iii) TKUP86 KIT
iv)FRC CABLE
PROGRAM:
;******* 8255_KBD
#INCLUDE "TKUP52.DEF"
ORG 0000H
START: LJMP MAIN
ORG 0150H
MAIN MOV SP,#060H
LCALL INIT8255
MOV DPTR,#NUM1
LCALL CLRMEM
MOV DPTR,#NUM2
LCALL CLRMEM
MOV DPTR,#NUM3
LCALL CLRMEM
NOP
LOOP LCALL SCANKBD
MOV DPTR,#NUM3
MOVX A,@DPTR
MOV DPTR,#SEGTBL
MOVC A,@A+DPTR
MOV DPTR,#PB8255
LCALL WRPORT
MOV A,#070H
MOV DPTR,#PA8255
LCALL WRPORT
LJMP LOOP
ORG 0500H
;******* initialize seven segment table
SEGTBL HEX 3F,06,5B,4F,66,6D,7D,07,7F,6F,77,7C,39,5E,79,71,00
KBDTBL HEX E0,D0,B0,70,00
RETTBL HEX 00,00,00,00,00,00,00,03,00,00,00,02,00,01,00,00,00
ROWTBL HEX 00,04,08,0C,00
RESULT: INPUT
OUTPUT