cse mpi lab manual r 09 (2011)
TRANSCRIPT
1. INTRODUCTION
The first microprocessors that became available with limited instructions sets and thus
restricted computing abilities. Although they were suitable for use in electronic calculators,
they simply did not have the power needed to operate more complex systems, such as
guidance systems or scientific applications. Even some of the early microprocessors had
limited capabilities because of the lack of addressing nodes and instruction types.
Eight-bit machines are more advanced than previous microprocessors, but they still did
not passes multiply and divide instructions. How instruction and time consuming to
save to write a program to do these operations.
Within the last decade, microprocessor technology has improved tremendously. Thirty two
hit processors can now multiply and divide, operate on many different data types (4-8-16-32
bit numbers), and addressed billions of bytes of information.
Intel launched its first full-fledged 32-bit microprocessor, the 80386 (or i386), in 1985. It was
actually not quite the first 32-bit system announced by Intel. Intel had announced a 32-bit
system, the 432 (unrelated to the x86 family), in the early eighties. It was never commercially
marketed, and it was withdrawn in 1984. Intel also features the 80376, which is a 32-bit
processor (80386 architecture) with a 16-bit external data bus, intended for implementation as
an embedded, lower-cost processor. The 80386 was followed in 1989 by the 80486 (or i486),
which reached 66 MHz operation in its i486 DX2 model. The i486 has an on-chip FPU, an
on-chip 8-kbyte cache, while maintaining the same architecture as the i386. The last
announced (in 1993) member of the Intel x86 family is the Pentium. In the past, during the
development stages, it was sometime referred to as i586 or P5, but Intel decided to name it
Pentium, without any numerical assignment. While maintaining the x86 family architecture,
the Pentium was extended to be a two-issue super scalar (two instruction fetched, decoded,
and executed in parallel), has a double 64-bit data bus in and out of chip, and a dual 16-kbyte
on-chip cache (8-kbyte instruction, 8-kbyte data). The Pentium is a 0.8 micron BiCMOS
Technology, three layer metal, 273- pin grid array package microprocessor.
1
Instruction Set:
The instruction set is indeed one of the key features of computer architecture, defining and
describing the capabilities of any computing system, including microprocessors. It constitutes
a specific set of operations that a given system can perform. We can usually distinguish the
following principal types of instruction.
1. Data movement instructions.
2. Integer arithmetic and logic instructions.
3. Shift and rotate instructions.
4. Control transfer instructions.
5. Bit manipulation instructions.
6. System control instructions.
7. Floating point instructions.
8. Special function unit instructions.
New Pentium instructions:
Instruction Function
CMPXCHG8B Compare and exchange eight bytes
CPUID Return the CPU identification code
RDTSC Read time stamp counter
RDMSR Read model specific register
WRMSR Read model specific register
RSM Return from system management interrupt
Assembler Reference: Microsoft MASM version 6.11 contains updated software capable of
processing printing instructions. Machine codes and instruction cycle counts are generated by
MASM for all instructions on each processor beginning with 8086. To assemble the file
PROG.ASM use this command: (better to use DOS command line)
MASM PROG.ASMThe MASM Program wjll assemble the PROG.ASM file. ( To create PROG.OBJ from PROG.ASM) To create PROG.EXE from PROG.OBJ, use this LINK command:
LINK PROG.OBJWhich converts the contents of PROG.OBJ into PROG.EXE.
To link more than one object file use + signs between their file names as in:
LINK PA+PB+PC;
The following is a list of MASM reserved words:
ASSUME sume definition
2
BYTE e (as in BYTE PTR)
CODE begin code segment
DATA begin data segment DB define byte
DD define double-word
DQ define quad word
DS define storage
DUP duplicate
DW define word
ELSE else statement
END end program
ENDIF end if statement
ENDM end macro
ENDP end procedure
ENDS end segment
EQU equate
.EXIT generate exit code
EXTRN external reference
FAR far reference
IF if statement
MACRO define macro
.MODEL model type
NEAR near reference
OFFSET offset
ORQ origin
PARA paragraph
PROC define procedure
PTR pointer
PUBLIC public reference
SEG locate segment
SEGMENT define segment
.STARTUP generate startup code
WORD word (as in WORD PTR)
.286 selects the 286 instruction set
.386 selects the 386 instruction set
3
.486 selects the 486 instruction set .
586 selects the 586 instruction set
MASM ( The Microsoft Macro Assembler ) MASM is used for The Microsoft Macro Assembler (abbreviated MASM) is an assembler for the 8086 family of microprocessors. It was originally produced by Microsoft for development work on their MS-DOS operating system, and was for some time the most popular assembler available for that operating system. It supported a wide variety of macro facilities and structured programming idioms, including high-level constructions for looping, procedure calls. MASM is an example of a high-level assemblerThe example program template:
(a) Go to Start – Run(b) Type cmd
Microsoft Windows XP [Version 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\SNIST>(c) A command prompt D:8086> is displayed (d) To start writing a new program type the key word ‘EDIT’(e) Structure of the program
; To execute _______ program data Segment
…………..…………..
data endscode segmentassume cs:code,ds:data,es:data
---------------------------------
int 3Hcode endsend start
Using Debug to execute and 8Ox 86 program:
DEBUG is a utility program that allows a user to load an 8Ox86 program into 111emory and
execute it step by step. DEBUG displays the contents of all processor registers after each
instruction executes, allowing the user to determine if the code is performing the desired task.
DEBUG only displays the 16-bit portion of the general purpose registers. Code view is
capable of displaying the entire 32 bits. DEBUG is a very useful debugging tool. We will use
DEBUG to step through a number of simple programs, gaining familiarity with DEBUG's
commands as we do so. DEBUG contains commands that can display and modify memory,
4
assemble instructions, disassemble code already placed into memory, trace through single or
multiple instructions, load registers with data, and do much more.
DEBUG loads into memory like any other program, in the fist available slot. The memory
space used by DEBUG for the user program begins after the end of DEBUG's code. If
an .EXE or .COM file were specified, DEBUG would load the program according to
accepted DOS conventions.
To execute the program file PROG.EXE use this command:
DEBUG PROG.EXE
DEBUG uses a minus sign as its command prompt, so you should see a "-" appear on
display.
To get a list of some commands available with DEBUG is:
T trace (step by step execution)
U un assemble
D dump
G go (complete execution)
H Hex
To execute the program file PROG.ASM use the following procedure:
. MASM PROG.ASM
. LINK PROG.OBJ
. DEBUG PROG.EXE
Working on 8086/88 Microprocessor kit:Procedure to type a program:
1. Press RST button2. Type ‘A’ after # symbol and press enter3. Type 1000 after starting address is requested on screen and press enter4. Enter mnemonics and press double enter5. Press INT after typing the program
Procedure to execute a program:1. Press INT2. # GO 1000 (starting address)3. Press Enter ( displays as ……executing)
Procedure to Check the result:1. Press RST2. #SB 1500 (address location given in program to see the result)3. Press Enter4. Enter to Check the next address
5
in KIT:#R : used for viewing the registers#SB : Show Byte#GO(Starting Address): used for executing the program#A: Indicates the starting of entering the program
6
Memory models for the assembler:
Model Type Description
Tiny All data and code must fit into one segment.
Small This model contains two segments: one data segment of 64K bytes and
one code segment of 64K bytes.
Medium This model contains one data segment of 64K bytes and any number of
code segments for large programs.
Compact One code segment contains the program, and any number of data
segments contain the data.
Large The large model allows any number of code and data segments.
Huge This model is the same as, large, but the data segment s may contain
more than 64K bytes each.
Flat Only available to MASM 6.X. The flat model uses one segment of
512K bytes to store all data and code.
7
2. ARITHMETIC OPERATIONS
AIM : TO ILLUSTRATE MULTIBYTE ARITHMETIC OPERATIONS
NOTE: students are expected to draw the flowchart and proceed for the program accordingly
Examples:
1) ;MULTIBYTE ADDITION DATA SEGMENT
A DB 09H,06H,03H,04H,06H,08H,06H,02H B DB 01H,02H,03H,01H,02H,03H,04H,0AH COUNT DW 08H SUM DB 25 DUP(0)
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT MOV SI,OFFSET A MOV DI,OFFSET B
MOV BX,OFFSET SUM
GO BACK: MOV AL,[SI] ADC AL,[DI] INC SI INC DI
MOV [BX],AL INC BX DEC CX JNZ GO BACK
INT 3H
CODE ENDS END START
2) ;MULTIBYTE SUBTRACTION DATA SEGMENT
A DB 09H,06H,03H,04H,06H,08H,06H,02H B DB 01H,02H,03H,01H,02H,03H,04H,0AH COUNT DW 08H SUM DB 25 DUP(0)
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT MOV SI,OFFSET A MOV DI,OFFSET B
MOV BX,OFFSET SUM
8
GO BACK: MOV AL,[SI] SBB AL,[DI] INC SI INC DI
MOV [BX],AL INC BX DEC CX JNZ GO BACK
INT 3H
CODE ENDS END START
3) ;8086 MICROPROCESSOR ;ARITHMETIC OPERATIONS ;REGISTERS:AX,BX,CX,DX,DS,CS ;PROCEDURE:NONE ;PORT:NONE ;PROGRAM FOR MULTIBYTE MULTIPLICATION DATA SEGMENT NUM1 DW 1111H,1111H NUM2 DW 1111H,1111H NUM3 DW 4 DUP(0) DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE MOV AX,DATA ;STARTING ADDRESS OF DATA SEGMENT MOV DS,AX
MOV AX,NUM1 ;NUM1 X NUM2 MUL NUM2 ;UNIT PLACE X UNIT PLACE=UNIT RESULT MOV NUM3,AX MOV CX,DX
MOV AX,NUM1+2 ;NUM1+2 X NUM2 MUL NUM2 ;UNIT PLACE X TEN PLACE=TEN RESULT ADD CX,AX MOV BX,DX
MOV AX,NUM1 ; NUM1 X NUM2+2 MUL NUM2+2 ; TEN PLACE X UNIT PLACE=TEN RESULT ADD CX,AX MOV NUM3+2,CX ADC BX,DX
MOV AX,NUM1+2 ; NUM1+2 X NUM2+2 MUL NUM2+2 ; TEN PLACE X TEN PLACE=100 RESULT ADD AX,BX MOV NUM3+4,AX MOV NUM3+6,DX
INT 3H CODE ENDS
END
4) ;WRITE AN ALP FOR MATRIX ADDITION
DATA SEGMENT DIM EQU 09H
9
MAT1 DB 09,08,04,05,06,07,08,09,09 MAT2 DB 01,02,03,04,05,02,03,08,03 RMAT3 DW 09 DUP(?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV CX,DIM MOV SI,OFFSET MAT1 MOV DI,OFFSET MAT2 MOV BX,OFFSET RMAT3 NEXT: XOR AX,AX MOV AL,[SI] ADD AL,[DI] MOV WORD PTR [BX],AX INC SI INC DI ADD BX,02 LOOP NEXT INT 03H CODE ENDS END START
5) ;WRITE AN ALP FOR MATRIX SUBTRACTION
DATA SEGMENT DIM EQU 09H MAT1 DB 09,08,04,05,06,07,08,09,09 MAT2 DB 01,02,03,04,05,02,03,08,03 RMAT3 DW 09 DUP(?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV CX,DIM MOV SI,OFFSET MAT1 MOV DI,OFFSET MAT2 MOV BX,OFFSET RMAT3 NEXT: XOR AX,AX MOV AL,[SI] SUB AL,[DI] MOV WORD PTR [BX],AX INC SI INC DI ADD BX,02 LOOP NEXT INT 03H CODE ENDS END START
10
6) ;ASCII ARTHMETIC ;PROGRAM FOR ASCII DIVISION CODE SEGMENT ASSUME CS:CODE MOV AL,'7' ; LSB OF DIVIDEND=AL=37H MOV AH,'6' ; MSB OF DIVIDEND=AH=36H AND AX,0F0FH ; 0607H MOV CH,'9' ; DIVISOR CH=39H AND CH,0FH ; CH=09H AAD ; AX=AL/BL=67/9 QUO=07 REM=04 DIV CH OR AX,3030H INT 3H CODE ENDS END
7) ;ASCII ARTHMETIC ;PROGRAM FOR ASCII MULTIPLICATION CODE SEGMENT ASSUME CS:CODE MOV AL,'9' ; AL=39H MOV BL,'9' ; BL=39H AND AL,0FH ; AL=09H AND BL,0FH ; BL=09H MOV AH,00H ; AH=00H MUL BL ; AX=AL/BL=09H+09H=51H =81D AAM OR AX,3030H INT 3H CODE ENDS END
11
3. LOGICAL OPERATIONS
AIM: TO ILLUSTRATE LOGICAL OPERATIONS
NOTE: students are expected to draw the flowchart and proceed for the program accordingly
Examples:
1) ;8086 MICROPROCESSOR ;LOGICAL OPERATION ;WRITE AN ALP FOR PACKED BCD TO ASCII CONVERSION ;REGISTER:AX,BX,CX,DX ;PROCEDURE:NONE ;PORT:NONE DATA SEGMENT PACKBCD DB 59H ASCII1 DB ? ASCII2 DB ? CODE SEGMENT ASSUME CS:CODE START:MOV AX,DATA MOV DS,AX MOV AL,PACKBCD ;AL=59H MOV BL,AL ;BL=59H AND AL,0F0H ;AL=50H AND BL,0FH ;BL=09H MOV CL,4 ROR AL,CL ;AL=05H OR AL,30H ;AL=35H OR BL,30H ;BL=39H MOV ASCII1,BL MOV ASCII2,AL MOV AX,4C00H INT 21H CODE ENDS END START
12
4. STRING OPERATIONS
AIM: TO ILLUSTRATE VARIOUS STRING OPERATIONS
NOTE: students are expected to draw the flowchart and proceed for the program accordingly
Examples:
1) ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP FOR MOVE A BLOCK OF STRING ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE DATA SEGMENT STRINGA DB 'MICROPROCESSOR' STRINGB DB 25 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA MOV DS,AX MOV ES,AX MOV BX,0000H MOV CX,14 LEA SI,STRINGA ;STARTING ADDRESS OF STRING-A LEA DI,STRINGB ;STARTING ADDRESS OF STRING-B CLD REP MOVSB MOV BX,9999H ;BX=BLOCK IS MOVED MOV AX,4C00H INT 21H
CODE ENDS END START
2) ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP FOR REVERSE OF A STRING ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE DATA SEGMENT STRINGA DB 'MICROPROCESSOR' STRINGB DB 25 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV BX,0000H
13
MOV CX,14 LEA SI,STRINGA LEA DI,STRINGB+13
GOBACK: MOV AL,[SI] MOV [DI],AL INC SI DEC DI
LOOP GOBACK INT 03H
CODE ENDS END START
3) ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP TO SORTING IN ASCENDING ORDER ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE
DATA SEGMENT ARR DB 99H,88H,77H,66H,55H,44H COUNT DW 0006H DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA ;STARTING ADDRESS OF DATA SEGMENT MOV DS,AX MOV ES,AX ;STARTING ADDRESS OF EXTRA SEGMENT MOV DX,COUNT ;NO OF ELEMENT IN AN ARRAYS=6 DEC DX NXTITER:MOV CX,DX ;NO OF COMPARISION=5 MOV SI,0
NXTCMP: MOV AL,ARR[SI] CMP AL,ARR[SI+1] ;COMPARE TWO ELEMENTS JC NOSWAP ;CARRY=SET INDICATES 1ST ELEMENT IS SMALLEST XCHG AL,ARR[SI+1] ; SWAPPING OF 2 ELEMENTS MOV ARR[SI],AL
NOSWAP: INC SI ; GO COMPARE FOR 2 AND 3 ELEMENT LOOP NXTCMP DEC DX ; GO FOR NEXT SMALLEST ELEMENT JNZ NXTITER INT 3H ; BREAK AND DISPLAY
CODE ENDSEND START
14
4) ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP FOR SORTING-DESCENDING ORDERS ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE DATA SEGMENT ARR DW 1111H,2222H,3333H,4444H,5555H,6666H COUNT DW 0006H DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA ;STARTING ADDRESS OF DATA SEGMENT MOV DS,AX MOV ES,AX ;STARTING ADDRESS OF EXTRA SEGMENT MOV DX,COUNT ;NO OF ELEMENT IN AN ARRAYS=6 DEC DX NXTITER:MOV CX,DX ;NO OF COMPARISION=5 MOV SI,0 NXTCMP:MOV AX,ARR[SI] CMP AX,ARR[SI+2] ;COMPARE TWO ELEMENTS JNC NOSWAP ;CARRY=CLEAR INDICATES 1ST ELEMENT IS LARGE XCHG AX,ARR[SI+2] ;SWAPPING OF 2 ELEMENTS XCHG AX,ARR[SI+2] MOV ARR[SI],AX NOSWAP:INC SI INC SI ; GO COMPARE FOR 2 AND 3 ELEMENT LOOP NXTCMP DEC DX ; GO FOR NEXT SMALLEST ELEMENT JNZ NXTITER INT 3H ; BREAK AND DISPLAY CODE ENDS END START
15
5) ;8086 MICROPROCESSOR ;WRITE AN ALP FOR FINDING THE LENGTH OF STRING ;REGISTERS:AX,SI,CX,DS,ES ;PROCEDURE:NONE
DATA SEGMENT STRING DB 'MICROPROCESSOR',0 LEN DW ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA ;STARTING ADDRESS OF DATA SEGMENT MOV DS,AX MOV ES,AX ;STARTING ADDRESS OF EXTRA SEGMENT MOV AX,0000H ; SEARCH SPACE MOV CX,256 LEA DI,STRING CLD ; INCREMENT SI/DI REPNE SCASB ; CMP AL,[DI] JZ FOUND
MOV BX,5555H ; BX=5555H INDICATES NOT FOUND MOV AX,4C00H INT 21H FOUND: DEC DI MOV LEN,DI ; BX=9999H INDICATES FOUND MOV BX,9999H ; LEN=DI =STRING LENGTH MOV AX,4C00H ; EXIT TO DOS INT 03H
CODE ENDS END START ; IGNORE NEXT INSTRUCTION
16
6) ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP FOR COMPARE TWO STRINGS ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE
DATA SEGMENT STRINGB DB 'MICROPROCESSOR',0 STRINGA DB 'MICROPROCESSOR' ACTLEN DW 000EH DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,256 LEA SI,STRINGA LEA DI,STRINGB MOV AL,00H REPNE SCASB DEC DI MOV BX,DI CMP ACTLEN,BX JZ CMP2STR MOV DX,2222H INT 3H
CMP2STR: LEA SI,STRINGA LEA DI,STRINGB MOV CX,ACTLEN CLD REPE CMPSB JNZ NOTMATCH MOV DX,9999H INT 3H
NOTMATCH: MOV AX,0000H INT 3H
CODE ENDSEND START
17
7) ;8086 MICROPROCESSOR ;Program to verify the password ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE
DATA SEGMENT
PASSWORD DB ‘FAILSAFE’ ; Password
STR_LENGTH EQU ($ - PASSWORD); Compute length of string
INPUT_WORD DB 8 DUP (0); Space for user password input
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
MOV AX, DATA
MOV DS, AX ; Initialize data segment resister
MOV ES, AX ; Initialize extra segment resister
MOV DX, OFFFEH ; These next three instructions
MOV AL, 99H ; set up an output port on
OUT DX, AL ; the SDK board
LEA SI, PASSWORD ; Load source poinetr
LEA DI, INPUT_WORD ; load destination pointer
MOV CX, STR_LENGTH ; Load counter with password length
CLD ; Increment DI & SI
REPE CMPSB ; Compare two string bytes
JNE SOUND_ALARM ; If not equal sound alarm
JMP OK ; else continue
SOUND_ALARM: MOV AL, 01 ; To sound alarm, send a 1
MOV DX, 0FFFAH ; to the output port whose
OUT DX, AL ; address is in DX
HLT ; and HALT
OK: NOP ; Prog. continues if password is ok
CODE ENDS
END
18
5. MODULAR PROGRAMMING
AIM: TO ILLUSTRATE VARIOUS MODULAR PROGRAMMING OPERATIONS
NOTE: students are expected to draw the flowchart and proceed for the program accordingly Examples:
1) ;FACTORIAL OF A GIVEN NUMBER DATA SEGMENT ARR1 DW 1 ARR2 DW 5 DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA MOV DS,AX MOV AX,ARR1 MOV BX,ARR2
FACT: MUL BX DEC BX JNZ FACT INT 3H
CODE ENDSEND START
2) ; WRITE AN ALP FOR SUM OF SQUARES OF N.NUMBERS DATA SEGMENT COUNT DW 0003H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV AX,0H MOV BX,0H MOV CX,0H MOV DX,0H MOV CX,COUNT CALL SUMSQR MOV DX.BX INT 3H
SUMSQR PROC NEAR SQR: MOV AX,CX
MUL CX ADD BX,AX DEC CX JNZ SQR RET
SUMSQR ENDP
CODE ENDS
END START
19
3). ;WRITE AN ALP FOR SQUARE ROOT OF A GIVEN NUMBER
DATA SEGMENT NUM DB 25 RESULT DB (?) DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CL,NUM MOV BL,01 MOV AL,00 UP: CMP CL,00 JZ ZRESULT SUB CL,BL INC AL ADD BL,02 JMP UP ZRESULT: MOV RESULT,AL INT 03H CODE ENDS END START
4) ; WRITE AN ALP FOR AVERAGE OF GIVEN NUMBERS
DATA SEGMENT VALUES DW 03H,08H,05H,08H N DW 04H RES DW (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV CX,N MOV AX,0 MOV BX,N AVG:ADD AX, VALUES[SI] INC SI INC SI LOOP AVG DIV BX MOV RES,AX INT 3H CODE ENDS END START
20
6. DOS AND BIOS PROGRAMMING
AIM: TO ILLUSTRATE VARIOUS DOS AND BIOS PROGRAMMING OPERATIONS
NOTE: students are expected to draw the flowchart and proceed for the program accordingly
Examples:
1) ;8086 MICROPROCESSOR ;BY USING DOS AND BIOS PROGRAMMING OPERATIONS ;WRITE AN ALP TO DISPLAY THE GIVEN TWO STRINGS ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE
DATA SEGMENTMESSAGE1 DB 0AH,0DH,'THIS IS EEE DEPARTMENT',0AH,0DH, "$"MESSAGE2 DB 0AH,0DH,'SREE NIDHI COLLEGE OF ENGINEERING',0AH,0DH,"$"DATA ENDS
CODE SEGMENTASSUME DS:DATA,CS:CODESTART:
MOV AX,DATA MOV DS,AX MOV SI,OFFSET MESSAGE1 MOV AH,09H INT 21H MOV DX,OFFSET MESSAGE2 MOV AH,09H INT 21H INT 3H
CODE ENDS END START
2) ;8086 MICROPROCESSOR ;BY USING DOS AND BIOS PROGRAMMING OPERATIONS ;WRITE AN ALP TO DISPLAY THE STRINGS MATCHING OR NOT ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE
DATA SEGMENT
STRINGA DB 'MICROPROCESSOR',0,0,0
STRINGB DB 'MICROPROCESSOR'
ACTLEN DW 000EH
MESSAGE1 db 0AH,0DH,"STRINGS ARE MATCHING",0AH,0DH,"$"
MESSAGE2 db 0AH,0DH,"STRINGS ARE NOT MATCHING",0AH,0DH,"$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
21
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STRINGA
LEA DI,STRINGB
MOV CX,ACTLEN
CLD
REPE CMPSB
JNZ NOTMATCH
MATCH: MOV DX,OFFSET MESSAGE1
MOV Ah,09h
INT 21h
INT 3h
NOTMATCH: MOV DX,OFFSET MESSAGE2
MOV AH,09h
INT 21H
INT 3H
CODE ENDS
END START
3) ;8086 MICROPROCESSOR ;BY USING DOS AND BIOS PROGRAMMING OPERATIONS ;WRITE AN ALP TO DISPLAY THE REVERSE OF A STRING ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE
DATA SEGMENT
STRINGA DB 'MICROPROCESSOR',0,0
STRINGB DB 0AH,0DH,"$",'50 DUP(0)',0AH,0DH,"$"
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BX,0000H
MOV CX,14
LEA SI,STRINGA
LEA DI,STRINGB+13
GOBACK: MOV AL,[SI]
MOV [DI],AL
INC SI
22
DEC DI
LOOP GOBACK
JZ AHEAD
MOV AX,SI
MOV AH,09
INT 21H
AHEAD: MOV DX,DI
MOV AH,09
INT 21H
INT 3H
CODE ENDS
END START
4) ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP TO DISPLAY AND FIND WHETHER A STRING IS PALINDROME OR NOT ;REGISTERS:AX,BX,CX,DX,SI,DI,ES,DS ;PROCEDURE:NONE ;PORT:NONE
DATA SEGMENT
STRA DB 'madam'
STRB DB 25 DUP(0)
PAL DB 'STRING IS PALINDROME',0AH,0DH,"$"
NOTPAL DB 'STRING IS NOT PALINDROME',0AH,0DH,"$"
COUNT DW 0005H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BX,0000
MOV CX,COUNT
LEA SI,[STRA]
LEA DI,[STRB+0004]
GOBACK: MOV AL,[SI]
MOV [DI],AL
INC SI
DEC DI
LOOP GOBACK
LEA SI,STRA
LEA DI,STRB
23
MOV CX,COUNT
CLD
REPE CMPSB
JNZ NOTMATCH
MOV AX,OFFSET PAL
MOV AH,09
INT 21H
INT 3H
NOTMAT: MOV DX,OFFSET NOTPAL
MOV AH,09
INT 21H
INT 3H
CODE ENDS
END START
24
7. INTERFACING 8255 PPI WITH 8086
Aim: To interface 8255 study card implement various modes of operation
25
8. INTERFACE 8279 CARD WITH 8086
Aim: To interface 8279 study card with 8086 and illustrate various modes of
operation
39
10. STEPPER MOTOR INTERFACING
Aim : To interface the stepper motor and rotate it using microprocessor
Circuit description: The stepper motor interface uses four transistor pairs (SL 100 and 2N3055) darlington pair configuration. Each configuration pair is used to excite the particular winding of the motor connected to 4 pin connector on the interface. The inputs to these transistors are from the 8255 PPI I/O lines of trainer kit. The free wheeling diode across each winding protects transistor from switching transients.
Example
OUTPUT 2500AD SYMBOLS ON ORG 2000H MOV AL,80H ;INITIALIZE 8255 MOV DX,0FFE7H ;ALL PORTS ARE OUTPUT OUT DX,AL ; 0FFE7H INDICATES ADDRESS OF CWR
MOV AL,88H ; PA3-PA0 ARE CONNECTED TO 4 FIELD GO:MOV DX,0FFE1H ; 0FFE1H INDICATE PORT A ADDRESS OUT DX,AL ; 1=ON AND 0=OFF CALL DELAY ; DELAY BETWEEN FIELDS ROR AL,1 JNZ GO ; ROTATE CONTINOUSLY INT 3H
DELAY:MOV CX,0FFFH LOOP1:NOP NOP LOOP LOOP1 RET
END
61
11.TRAFFIC LIGHT CONTROLLER
1. AIM: To simulate the control operation of traffic signals using a
microcontroller.
2. Introduction:
The traffic light interface simulates the control and operation of traffic signals at a
junction. The interface provides a LED indicators in all directions. All these LED's
controlled by microc()ntroJler through 8255 port Jines.
3. Description of a interface:
The interface provides, the combinations of red, amber & green LED'S are to indicate
halt, wait and go signals for vehicles.
At the left comer of each road, a group of five LEDs (red, amber & 3 green); are
arranged in the form of a T-section to control the traffic of that road. Each road is
named as North (N), South (S), East (E) & West (W). LEDs LI, LIO, Ll9 & U8 (red)
are for stop signal for the vehicles on the N, S, E & W respectively. L2, LII, L20 &
L29 (amber) indicate wait state for vehicles on the road N, S, E & W respectively. L3.
L4, & L5 (green) are for left, straight, & right turn; for the vehicles on the road S.
SimilarJy L12-L13-LI4, L23-L22-L21 & L32-L31-L30 simulates same function for
the roads, E, N & W respectively. A total of 16 LED's (2 red & 2 green at each road)
are provided for pedestrians crossing. L7-L9, LI6-LI8, L25-L27 & L34-L36 (green)
when ON allows pedestrians; to cross and L6-L8, L15-LI7, L24-L26 & L33-L35 (red)
when ON allows the pedestrians to wait.
At the beginning of the program all red LEDs' are switched ON and all other LEOs
are switched OFF. Amber LEO is switched on before switching over, to proceed state
from halt state.
62
LED connection details are given below:
LI PCO Ll9 PCI
L2 PAO L20 PBO
L3 PAl L21 PBI
L4 PA2 L22 PB2
L5 PA3 L23 PB3
L6 PC4 L24 PC6
L7 PC4 L25 PC6
L8 PC4 L26 PC6
L9 PC4 L27 PC6
LIO PC2 L28 PC3
LII PA4 L29 PB4
Ll2 PA5 L30 PB5
Ll3 PA6 L31 PB6
Ll4 PA7 L32 PB7
Ll5 PC5 L33 PC7
Ll6 PC5 L34 PC7
L17 PC5 L35 PC7
Ll8 PC5 L36 PC7
Using above procedure user can write the program to simulate the traffic in any desired
fashion.
63
code
OUTPUT 2500AD SYMBOLS ON ORG 0:4000H ASSUME CS:CODE MOV AL,80H ;PORTA,PORTB,PORTC ARE OUTPUT MOV DX,0FFE6H ; 0FFE6H CONTAINS THE ADDRESS OF CWR OF 8255PPI OUT DX,AL
JAD:MOV AL,88H ;NORTH GREEN -------->COND-1 MOV DX,0FFE0H OUT DX,AL MOV AL,83H MOV DX,0FFE2H OUT DX,AL MOV AL,0F2H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY
64
MOV AL,88H ;NORTH AMBER WEST AMBER---->COND-2 MOV DX,0FFE0H OUT DX,AL MOV AL,44H MOV DX,0FFE2H OUT DX,AL MOV AL,0F0H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY
MOV AL,88H ;WEST GREEN-------------->COND-3 MOV DX,0FFE0H OUT DX,AL MOV AL,38H MOV DX,0FFE2H OUT DX,AL MOV AL,0F1H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY
MOV AL,84H ;WEST AMBER SOUTH AMBER--->COND-4 MOV DX,0FFE0H OUT DX,AL MOV AL,48H MOV DX,0FFE2H OUT DX,AL MOV AL,0F0H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY
MOV AL,83H ;SOUTH GREEN------->COND-5 MOV DX,0FFE0H OUT DX,AL MOV AL,88H MOV DX,0FFE2H OUT DX,AL MOV AL,0F8H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY
MOV AL,44H ;SOUTH AMBER EAST AMBER-->COND-6 MOV DX,0FFE0H
65
OUT DX,AL MOV AL,88H MOV DX,0FFE2H OUT DX,AL MOV AL,0F0H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY MOV AL,38H ;EAST GREEN--->COND-7 MOV DX,0FFE0H OUT DX,AL MOV AL,48H MOV DX,0FFE2H OUT DX,AL MOV AL,0F4H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY MOV AL,88H ;ALL PED GREEN MOV DX,0FFE0H OUT DX,AL MOV AL,88H MOV DX,0FFE2H OUT DX,AL MOV AL,00H MOV DX,0FFE4H OUT DX,AL CALL DELAY CALL DELAY CALL DELAY
JMP JAD
DELAY:MOV CX,0FFFFH D1:NOP NOP LOOP D1 RET END
66
12. REAL TIME CLOCK INTERFACE
Aim: To interface a real time clock with 8051 (parallel interface)and set the parameters
Introduction: Interfacing the RTC with 8051 through 8255 parallel interface and to set parameters like hours, minutes, seconds etc.Description: manual in RTC you can set time, date, month, year, etc. By setting these things you can read time at any instant and assign different actions should take place at different time since RTC will be running continuously. All this functions of RTC are controlled by cpu this RTC is interfaced to the cpu with the help of 8255 which is present on the kit. And also with the help of 26 core FRC connecting P2 to P1 on the interface.
CODE: : Read rtc OUTPUT 2500AD symbols on
CODE SEGMENT ORG 2300HTBL: DB 09H ; X1 SECONDS ---2300H DB 05H ; X10 SECONDS ---2301H
DB 09H ; X1 MINUTES ---2302H DB 05H ; X10 MINUTES ---2303H
DB 09H ; X1 HOURS ---2304H DB 02H ; X10 HOURS ---2305H
OUTSTRG EQU 0FE00:1B55HOUTBYTE EQU 0FE00:1B64H
ORG 2500H MOV AX,0000H MOV DS,AX MOV ES,AX MOV CS,AX
READ: MOV BL,00H ;BL=ADDRESS MOV SI,0000H ;SI=[ADDRESS] MOV AL,90H ; PA=I/P PB=O/P PC=O/P OF 8255PPI MOV DX,0FFE6H ; 0FFE6H INDICATES CWR ADDRESS OUT DX,AL
MOV AL,10H ; TO MAKE HOLD=1 MOV DX,0FFE4H OUT DX,AL
MOV AL,28H ; DELAY OF 150USEC FOR HOLD=1GOBACK: DEC AL JNZ GOBACK
MOV AL,30H ; HOLD=1 AND READ=1 MOV DX,0FFE4H OUT DX,AL
67
READ1: MOV AL,BL ; BL=ADDRESS=[00]=XS1 MOV DX,0FFE2H ; PB IS CONNECTED TO ADDRESS LINE OF RTC OUT DX,AL
MOV AL,02H ; DELAY FOR READ ACCESS TIMEREADLY: DEC AL JNZ READLY
MOV DX,0FFE0H ; I/P PA IS CONNECTED TO DATA LINES OF RTC IN AL,DX AND AL,0FH ; USE ONLY 4 LSBITS
MOV TBL[SI],AL ; STORE DATA IN 2300H INC BL CMP BL,08H ; GET NEXT ADDRESS OF XS1,XS10,XM1,XM10,XH1 JE STOP2
INC SI ; GET CONTENTS OF ADDRESS JMP READ1 STOP2: MOV AL,00H ; HOLD=1 AND READ=1 MOV DX,0FFE4H OUT DX,AL
REPEAT: MOV BX,2304H ; GET HRS VALUE CALL DATA AND AL,3FH CALL OUTBYTE ; O/P HRS VALUE
; CALL SPACE ; GET MIN VALUE MOV BX,2302H CALL DATA ; O/P MIN VALUE CALL OUTBYTE
; CALL SPACE MOV BX,2300H ; GET SEC VALUE CALL DAT CALL OUTBYTE ; O/P SEC VALUE ; CALL SPACE
CALL REWRT
; MOV CX,29H ;BACK: LEA DX,BAK ; MOV SI,DX ; PUSH CX ; CALL OUTSTRG ; POP CX ; DEC CL ; CMP CL,00H ; JNE BACK JMP REPEAT
DAT: MOV AL,[BX] ; DISPLAY UPDATE VALVES BY REPEATING AND AL,0FH ; ROUTINE TO CLUB THE LOWER NIBBLE MOV DL,AL ; VALUES OF THE MEMORY LOCATION OF 2300H INC BX ; TO 230CH MOV AL,[BX] AND AL,0FH MOV CX,0004H ROL AL,CL
68
OR AL,DL RET
REWRT: MOV BX,2300H ;ROUTINE TO CHECK UPDATING OF THE MOV AL,[BX] ;SECS IN LOCATION 23OOH PUSH AX CALL READ POP AX MOV BX,2300H CMP AL,[BX] JE REWRT RET
SPACE: DB 20H,20H,20H,20H,20H,00H RET
BAK: DB 08H,08H,08H,08H
INT 3HCODE ENDS END
: set rtc
OUTPUT 2500AD symbols on
;8086 MICROPROCESSOR ;INTERFACE OF REAL TIME CLOCK WITH 8086UP ;REGISTORS:AX,BX,CX,DX,SI,DI, ;PROCEDURE: ;PORT:PORTA,PORTB,PORTC ORG 2300H
DB 09H ; X1 SECONDS ---2300H DB 05H ; X10 SECONDS ---2301H
DB 09H ; X1 MINUTES ---2302H DB 05H ; X10 MINUTES ---2303H
DB 09H ; X1 HOURS ---2304H DB 02H ; X10 HOURS ---2305H
PORTA EQU 0FFE0HPORTB EQU 0FFE2HPORTC EQU 0FFE4HCWR EQU 0FFE6H ;CWR OF 8255
OUTSTRG EQU 0FE00:1B55HOUTBYTE EQU 0FE00:1B64H
ORG 2400H
XCHG AX,AX ; CLEAR AX MOV BL,00H ; BL CONTAINS ADDRESS
69
MOV SI,0000H ; SI CONTAINS CONTENTS OF ADDRESS MOV AL,80H ; PORTA=PORTB=PORTC=OUTPUT MOV DX,0FFE6H ; ADDRESS OF CWR OUT DX,AL
MOV AL,10H ;PC4=HOLD=1 TO MAKE STATIC XS1 FOR 150US MOV DX,0FFE4H OUT DX,AL
MOV AL,28H ;DELAY FOR HOLD SET UP TIME =150USHLDY1: DEC AL JNE HLDY1
SET: MOV AL,BL ; PORTA IS CONNECT TO DO-D4 MOV DX,0FFE2H ; TBL=2300:0000=[XS1] OUT DX,AL ; HRS:MIN:SE
MOV AL,50H ; HOLD=1 AND WRITE=1 MOV DX,0FFE4H OUT DX,AL
MOV AL,10H ; HOLD=1 MOV DX,0FFE4H OUT DX,AL
INC BL ; TO GET NEXT PARAMETER ; XS1,--XS10,XM1,XM10,H1,H10 ; 12 HOURS OR 24 HOURS FORMAT CMP BL,08H ; AM OR PM JZ STOP1
INC SI ; SI INDICATES CONTENT OF ADDRESS JMP SET
STOP1: MOV AL,00H ; HOLD=0 ,READ=0,WRITE=0 MOV DX,0FFE4H OUT DX,AL
INT 3H ; RETURN TO MONITOR
70
13. INTERFACING DAC AND ADC WITH 8086
Aim: To interface ADC and DAC’s with 8086 microprocessor
Examples:
1)
Microcontroller based systems require interfaces that can convert on board digital signal to equivalent analog signals for specific applications. Digital to analog converters are invariably used for this purpose. The range of applications includes waveform generation and pattern generation.
Interface Description: The dual interface consists of two digital analog converters (DAC 0800) the outputs of which are connected to voltages using op amps (MC 1458). The voltage outputs (0 to 10v )of the opamps are terminated in a 4 way connector for external connection. A 10v stable reference voltage for the DAC’s is obtained using the LM 723 regulator. Unipolar or Bipolar outputs are selected by either shorting J1 and J3 to J2 and J4 respectively
;INTERFACING TO 8086 WITH DAC INTERFACE
OUTPUT 2500AD symbols on
;8086 MICROPROCESSOR ;INTERFACING TO 8086 WITH DAC INTERFACE ;WRITE AN ALP FOR DISPLAY 'A' ON CRO ;PROCEDURE:NONE ;PORT:PORTA
CODE SEGMENT ORG 2000H ASSUME CS:CODE
MOV AL,80H ;INTIALIZE 8255PPI MOV DX,0FFE6H ;PORTA,PORTB,PORTC ARE OUTPUT OUT DX,AL ;0FFE6H CONTAINS CWR OF 8255
REPEAT: MOV AL,00HGOB: MOV DX,0FFE0H ;0FFE0H INDICATES PORT A OUT DX,AL INC AL CMP AL,80H JNZ GOB MOV DX,0FFE0H OUT DX,AL GOB1: INC AL MOV DX,0FFE0H OUT DX,AL PUSH AX MOV AL,80H MOV DX,0FFE0H OUT DX,AL POP AX
CMP AL,0FFH
71
JNZ GOB1
MOV DX,0FFE0H OUT DX,ALGOB2: DEC AL MOV DX,0FFE0H OUT DX,AL PUSH AX MOV AL,80H MOV DX,0FFE0H OUT DX,AL POP AX CMP AL,80H JNZ GOB2 MOV DX,0FFE0H OUT DX,ALGOB3: DEC AL MOV DX,0FFE0H OUT DX,AL CMP AL,00H JNZ GOB3
JMP REPEAT INT 3H CODE ENDS END
2) ADC is realized utitilizing digital to analog converter and successive approximation method. The interface consists of an 8 bit D to A converter. The port output is latched and presented as input to the DAC. The DAC output and analog input are fed to a comparator whose output is less then the analog input.This indicates that a larger value of digital input to DAC is required. Thus this line can be monitored to determine the digital equivalent of the analog input voltage. ;ADC USING DAC INTERFACE
OUTPUT 2500AD symbols on
;8086 MICROPROCESSOR ;INTERFACING TO ADC INTERFACE WITH 8086 ;ADC USING DAC INTERFACE ;REGISTER:AX,BX,CX,DX ;PROCEDURE:NONE ;PORT:PORT 1
CODE SEGMENT ORG 4000H ASSUME CS:CODE
START: MOV SP,3000H
72
MOV AL,81H ;PORT A & PORT B ARE OUTPUT MOV DX,0FFE6H ;PORT C LOW ARE INPUT OUT DX,AL ; 0FFE6H INDICATES THE ADDRESS OF CWR ; OF 8255PPI
XOR AX,AX MOV DX,0FFE4H ; WHEN STC BUTTON PRESSED THEN PC1=1 LOOP1: IN AL,DX ( PC AS I/P) TEST AL,02H JE LOOP1 CALL DELAY ; DELAYLOOP2: IN AL,DX TEST AL,02H ; WHEN STC BUTTON RELEASED THEN PC1=0 JNE LOOP2 ; SQUARE PULSE GIVEN TO PC1
MOV AL,0FFHW2: MOV DX,0FFE0H ; COUNTER=00H INC AX ; PA AS O/P IS CONNECTED WITH 8 LED'S OUT DX,AL PUSH AX CALL DELAY MOV DX,0FFE4H ; CHECK WHETHER EOC=00 MEANS PROCESS FINISH IN AL,DX ; PC0 IS CONNECTED TO EOC OF ADC TEST AL,01H JE DONE POP AX ; JMP W2 ; IF EOC=01 THEN INCREMENT COUNTER
DONE: MOV AX,4C00H ; EXIT TO DOS INT 21H
DELAY: MOV CX,0FFFH ; DELAY BETWEEN LOGIC '1' AND '0'LOOP3: LOOP LOOP3 RET
CODE ENDS END
73