Sie sind auf Seite 1von 73

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 onchip 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 (8kbyte instruction, 8-kbyte data). The Pentium is a 0.8 micron BiCMOS Technology, three layer metal, 273- pin grid array package microprocessor.

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. 2. 3. 4. 5. 6. 7. 8. Instruction CMPXCHG8B CPUID RDTSC RDMSR WRMSR RSM Data movement instructions. Integer arithmetic and logic instructions. Shift and rotate instructions. Control transfer instructions. Bit manipulation instructions. System control instructions. Floating point instructions. Special function unit instructions. Function Compare and exchange eight bytes Return the CPU identification code Read time stamp counter Read model specific register Read model specific register Return from system management interrupt

New Pentium instructions:

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.ASM The 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.OBJ Which 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 CODE DATA DD DQ DS DUP DW ELSE END ENDIF ENDM ENDP ENDS EQU .EXIT EXTRN FAR IF MACRO .MODEL NEAR OFFSET ORQ PARA PROC PTR PUBLIC SEG SEGMENT .STARTUP WORD word .286 .386

e (as in BYTE PTR) begin code segment begin data segment DB define byte define double-word define quad word define storage duplicate define word else statement end program end if statement end macro end procedure end segment equate generate exit code external reference far reference if statement define macro model type near reference offset origin paragraph define procedure pointer public reference locate segment define segment generate startup code (as in WORD PTR) selects the 286 instruction set selects the 386 instruction set 3

.486 586

selects the 486 instruction set . 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 assembler The 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 ends code segment assume cs:code,ds:data,es:data ------------------------------int 3H code ends end 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, 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 button 2. Type A after # symbol and press enter 3. Type 1000 after starting address is requested on screen and press enter 4. Enter mnemonics and press double enter 5. Press INT after typing the program Procedure to execute a program: 1. Press INT 2. # GO 1000 (starting address) 3. Press Enter ( displays as executing) Procedure to Check the result: 1. Press RST 2. #SB 1500 (address location given in program to see the result) 3. Press Enter 4. Enter to Check the next address

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

Memory models for the assembler: Model Type Tiny Description All data and code must fit into one segment. segment of 64K bytes. Medium Compact Large This model contains one data segment of 64K bytes and any number of code segments for large programs. One code segment contains the program, and any number of data segments contain the data. The large model allows any number of code and data segments. bytes each. Flat Only available to MASM 6.X. The flat model uses one segment of 512K bytes to store all data and code. Huge This model is the same as, large, but the data segment s may contain more than 64K

Small This model contains two segments: one data segment of 64K bytes and one code

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 MOV MOV MOV MOV MOV MOV MOV ADC INC INC MOV INC DEC JNZ INT AX,DATA DS,AX ES,AX CX,COUNT SI,OFFSET A DI,OFFSET B BX,OFFSET SUM AL,[SI] AL,[DI] SI DI [BX],AL BX CX GO BACK 3H

GO BACK:

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 MOV MOV MOV MOV MOV MOV AX,DATA DS,AX ES,AX CX,COUNT SI,OFFSET A DI,OFFSET B BX,OFFSET SUM

GO BACK:

MOV SBB INC INC MOV INC DEC JNZ INT

AL,[SI] AL,[DI] SI DI [BX],AL BX CX GO BACK 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 MUL MOV MOV MOV MUL ADD MOV MOV MUL ADD MOV ADC MOV MUL ADD MOV MOV AX,NUM1 NUM2 NUM3,AX CX,DX AX,NUM1+2 NUM2 CX,AX BX,DX AX,NUM1 NUM2+2 CX,AX NUM3+2,CX BX,DX AX,NUM1+2 NUM2+2 AX,BX NUM3+4,AX NUM3+6,DX ;NUM1 X NUM2 ;UNIT PLACE X UNIT PLACE=UNIT RESULT

;NUM1+2 X NUM2 ;UNIT PLACE X TEN PLACE=TEN RESULT

; NUM1 X NUM2+2 ; TEN PLACE X UNIT PLACE=TEN RESULT

; NUM1+2 X NUM2+2 ; TEN PLACE X TEN PLACE=100 RESULT

INT 3H CODE ENDS END 4) ;WRITE AN ALP FOR MATRIX ADDITION 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] 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 LEA DI,STRINGB CLD REP MOVSB MOV BX,9999H 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

;STARTING ADDRESS OF STRING-A ;STARTING ADDRESS OF STRING-B

;BX=BLOCK IS MOVED

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

13

LEA SI,STRINGA LEA DI,STRINGB+13 GOBACK: MOV MOV INC DEC AL,[SI] [DI],AL SI 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 MOV MOV MOV DEC NXTITER:MOV MOV AX,DATA DS,AX ES,AX DX,COUNT DX CX,DX SI,0 ;STARTING ADDRESS OF DATA SEGMENT ;STARTING ADDRESS OF EXTRA SEGMENT ;NO OF ELEMENT IN AN ARRAYS=6 ;NO OF COMPARISION=5

NXTCMP: MOV AL,ARR[SI] CMP AL,ARR[SI+1] JC NOSWAP SMALLEST XCHG AL,ARR[SI+1] MOV ARR[SI],AL NOSWAP: INC SI LOOP NXTCMP DEC DX JNZ NXTITER INT 3H CODE ENDS END START

;COMPARE TWO ELEMENTS ;CARRY=SET INDICATES 1ST ELEMENT IS ; SWAPPING OF 2 ELEMENTS ; GO COMPARE FOR 2 AND 3 ELEMENT ; GO FOR NEXT SMALLEST ELEMENT ; BREAK AND DISPLAY

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 MOV DS,AX MOV ES,AX MOV DX,COUNT DEC DX NXTITER:MOV CX,DX MOV SI,0 NXTCMP:MOV AX,ARR[SI] CMP AX,ARR[SI+2] JNC NOSWAP XCHG AX,ARR[SI+2] XCHG AX,ARR[SI+2] MOV ARR[SI],AX NOSWAP:INC SI INC SI LOOP NXTCMP DEC DX JNZ NXTITER INT 3H CODE ENDS END START

;STARTING ADDRESS OF DATA SEGMENT ;STARTING ADDRESS OF EXTRA SEGMENT ;NO OF ELEMENT IN AN ARRAYS=6 ;NO OF COMPARISION=5 ;COMPARE TWO ELEMENTS ;CARRY=CLEAR INDICATES 1ST ELEMENT IS LARGE ;SWAPPING OF 2 ELEMENTS

; GO COMPARE FOR 2 AND 3 ELEMENT ; GO FOR NEXT SMALLEST ELEMENT ; BREAK AND DISPLAY

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 MOV MOV MOV MOV LEA CLD AX,DATA DS,AX ES,AX AX,0000H CX,256 DI,STRING ;STARTING ADDRESS OF DATA SEGMENT ;STARTING ADDRESS OF EXTRA SEGMENT ; SEARCH SPACE ; INCREMENT SI/DI ; CMP AL,[DI] ; BX=5555H INDICATES NOT FOUND

REPNE SCASB JZ FOUND MOV MOV INT DEC MOV MOV MOV INT BX,5555H AX,4C00H 21H DI LEN,DI BX,9999H AX,4C00H 03H

FOUND:

; BX=9999H INDICATES FOUND ; LEN=DI =STRING LENGTH ; EXIT TO DOS

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 ENDS END 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 MOV MOV MOV MOV OUT LEA LEA CLD REPE CMPSB JNE SOUND_ALARM JMP OK SOUND_ALARM: MOV MOV OUT HLT OK: CODE NOP ENDS END AL, 01 DX, 0FFFAH DX, AL AX, DATA DS, AX ES, AX DX, OFFFEH AL, 99H DX, AL SI, PASSWORD ; Initialize data segment resister ; Initialize extra segment resister ; These next three instructions ; set up an output port on ; the SDK board ; Load source poinetr ; Load counter with password length ; Increment DI & SI ; Compare two string bytes ; If not equal sound alarm ; else continue ; To sound alarm, send a 1 ; to the output port whose ; address is in DX ; and HALT ; Prog. continues if password is ok

DI, INPUT_WORD ; load destination pointer

MOV CX, STR_LENGTH

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 DATA ARR1 ARR2 DATA OF A GIVEN NUMBER SEGMENT DW 1 DW 5 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 ENDS END 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 SQR: SUMSQR PROC NEAR 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 SEGMENT MESSAGE1 DB 0AH,0DH,'THIS IS EEE DEPARTMENT',0AH,0DH, "$" MESSAGE2 DB 0AH,0DH,'SREE NIDHI COLLEGE OF ENGINEERING',0AH,0DH,"$" DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET MESSAGE1 MOV AH,09H INT 21H MOV MOV INT INT 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 MESSAGE2 db DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA 0AH,0DH,"STRINGS ARE MATCHING",0AH,0DH,"$" 0AH,0DH,"STRINGS ARE NOT MATCHING",0AH,0DH,"$" DX,OFFSET MESSAGE2 AH,09H 21H 3H

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) NOT ;8086 MICROPROCESSOR ;BY USING STRING OPERATION AND INSTRUCTION PREFIX ;WRITE AN ALP TO DISPLAY AND FIND WHETHER A STRING IS PALINDROME OR ;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

26

27

28

29

30

31

32

33

34

35

36

37

38

8. INTERFACE 8279 CARD WITH 8086

Aim: To interface 8279 study card with 8086 and illustrate various modes

of operation

39

40

41

42

43

44

45

46

47

Example: 4 CLEAR THE DISPLAY

48

9. INTERFACE OF 8259 WITH 8086 Aim: To interface 8259 study card with 8086

49

50

51

52

53

54

55

56

57

58

59

60

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 MOV DX,0FFE7H OUT DX,AL MOV AL,88H GO:MOV DX,0FFE1H OUT DX,AL CALL DELAY ROR AL,1 JNZ GO INT 3H DELAY:MOV CX,0FFFH LOOP1:NOP NOP LOOP LOOP1 RET END ;INITIALIZE 8255 ;ALL PORTS ARE OUTPUT ; 0FFE7H INDICATES ADDRESS OF CWR ; ; ; ; PA3-PA0 ARE CONNECTED TO 4 FIELD 0FFE1H INDICATE PORT A ADDRESS 1=ON AND 0=OFF DELAY BETWEEN FIELDS

; ROTATE CONTINOUSLY

61

11.TRAFFIC LIGHT CONTROLLER 1. 2. AIM: 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. To simulate the control operation of traffic signals using a microcontroller.

62

LED connection details are given below: LI L2 L3 L4 L5 L6 L7 L8 L9 LIO LII Ll2 Ll3 Ll4 Ll5 Ll6 L17 Ll8 PCO PAO PAl PA2 PA3 PC4 PC4 PC4 PC4 PC2 PA4 PA5 PA6 PA7 PC5 PC5 PC5 PC5 Ll9 L20 L21 L22 L23 L24 L25 L26 L27 L28 L29 L30 L31 L32 L33 L34 L35 L36 PCI PBO PBI PB2 PB3 PC6 PC6 PC6 PC6 PC3 PB4 PB5 PB6 PB7 PC7 PC7 PC7 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 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 ;NORTH GREEN -------->COND-1

64

MOV AL,88H 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 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

;NORTH AMBER WEST AMBER---->COND-2

;WEST GREEN-------------->COND-3

MOV AL,84H 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 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 MOV DX,0FFE0H

;WEST

AMBER SOUTH AMBER--->COND-4

;SOUTH GREEN------->COND-5

;SOUTH AMBER EAST AMBER-->COND-6

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 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 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

;EAST GREEN--->COND-7

;ALL PED GREEN

66

12. REAL TIME CLOCK INTERFACE


Aim: the To interface a real time clock with 8051 (parallel interface)and set 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 2300H DB 09H ; X1 SECONDS DB 05H ; X10 SECONDS DB DB DB DB OUTSTRG EQU 0FE00:1B55H OUTBYTE EQU 0FE00:1B64H ORG 2500H MOV MOV MOV MOV READ: MOV MOV MOV MOV OUT AX,0000H DS,AX ES,AX CS,AX BL,00H SI,0000H AL,90H DX,0FFE6H DX,AL ;BL=ADDRESS ;SI=[ADDRESS] ; PA=I/P PB=O/P PC=O/P OF 8255PPI ; 0FFE6H INDICATES CWR ADDRESS ; TO MAKE HOLD=1 09H 05H 09H 02H ; X1 MINUTES ; X10 MINUTES ; X1 HOURS ; X10 HOURS

TBL:

---2300H ---2301H ---2302H ---2303H ---2304H ---2305H

MOV AL,10H MOV DX,0FFE4H OUT DX,AL GOBACK: MOV AL,28H DEC AL JNZ GOBACK MOV AL,30H MOV DX,0FFE4H OUT DX,AL

; DELAY OF 150USEC FOR HOLD=1

; HOLD=1 AND READ=1

67

READ1:

MOV AL,BL MOV DX,0FFE2H OUT DX,AL MOV AL,02H DEC AL JNZ READLY MOV DX,0FFE0H IN AL,DX AND AL,0FH MOV TBL[SI],AL INC BL CMP BL,08H JE STOP2 INC SI JMP READ1

; BL=ADDRESS=[00]=XS1 ; PB IS CONNECTED TO ADDRESS LINE OF RTC ; DELAY FOR READ ACCESS TIME

READLY:

; I/P PA IS CONNECTED TO DATA LINES OF RTC ; USE ONLY 4 LSBITS ; STORE DATA IN 2300H ; GET NEXT ADDRESS OF XS1,XS10,XM1,XM10,XH1 ; GET CONTENTS OF ADDRESS ; HOLD=1 AND READ=1

STOP2:

MOV AL,00H MOV DX,0FFE4H OUT DX,AL MOV BX,2304H CALL DATA AND AL,3FH CALL OUTBYTE CALL SPACE MOV BX,2302H CALL DATA CALL OUTBYTE CALL SPACE MOV BX,2300H CALL DAT CALL OUTBYTE CALL SPACE CALL REWRT

REPEAT:

; GET HRS VALUE ; O/P HRS VALUE ; GET MIN VALUE ; O/P MIN VALUE

; GET SEC VALUE ; O/P SEC VALUE

; ;BACK: ; ; ; ; ; ;

MOV CX,29H LEA DX,BAK MOV SI,DX PUSH CX CALL OUTSTRG POP CX DEC CL CMP CL,00H ; JNE BACK JMP REPEAT MOV AND MOV INC MOV AND MOV ROL AL,[BX] AL,0FH DL,AL BX AL,[BX] AL,0FH CX,0004H AL,CL ; ; ; ; DISPLAY UPDATE VALVES BY REPEATING ROUTINE TO CLUB THE LOWER NIBBLE VALUES OF THE MEMORY LOCATION OF 2300H TO 230CH

DAT:

68

OR AL,DL RET REWRT: MOV BX,2300H MOV AL,[BX] PUSH AX CALL READ POP AX MOV BX,2300H CMP AL,[BX] JE REWRT RET ;ROUTINE TO CHECK UPDATING OF THE ;SECS IN LOCATION 23OOH

SPACE: BAK: CODE ENDS

DB 20H,20H,20H,20H,20H,00H RET DB 08H,08H,08H,08H INT 3H 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 DB DB DB DB DB 09H 05H 09H 05H 09H 02H ; X1 SECONDS ; X10 SECONDS ; X1 MINUTES ; X10 MINUTES ; X1 HOURS ; X10 HOURS ---2300H ---2301H ---2302H ---2303H ---2304H ---2305H

PORTA PORTB PORTC CWR

EQU EQU EQU EQU

0FFE0H 0FFE2H 0FFE4H 0FFE6H

;CWR OF 8255

OUTSTRG EQU 0FE00:1B55H OUTBYTE EQU 0FE00:1B64H ORG 2400H XCHG AX,AX MOV BL,00H ; CLEAR AX ; BL CONTAINS ADDRESS

69

MOV MOV MOV OUT

SI,0000H AL,80H DX,0FFE6H DX,AL

; SI CONTAINS CONTENTS OF ADDRESS ; PORTA=PORTB=PORTC=OUTPUT ; ADDRESS OF CWR ;PC4=HOLD=1 TO MAKE STATIC XS1 FOR 150US

MOV AL,10H MOV DX,0FFE4H OUT DX,AL HLDY1: SET: MOV AL,28H DEC AL JNE HLDY1 MOV AL,BL MOV DX,0FFE2H OUT DX,AL MOV AL,50H MOV DX,0FFE4H OUT DX,AL MOV AL,10H MOV DX,0FFE4H OUT DX,AL INC BL CMP BL,08H JZ STOP1 INC SI JMP SET STOP1: MOV AL,00H MOV DX,0FFE4H OUT DX,AL INT 3H

;DELAY FOR HOLD SET UP TIME =150US

; PORTA IS CONNECT TO DO-D4 ; TBL=2300:0000=[XS1] ; HRS:MIN:SE ; HOLD=1 AND WRITE=1

; HOLD=1

; ; ; ;

TO GET NEXT PARAMETER XS1,--XS10,XM1,XM10,H1,H10 12 HOURS OR 24 HOURS FORMAT AM OR PM

; SI INDICATES CONTENT OF ADDRESS ; HOLD=0 ,READ=0,WRITE=0

; RETURN TO MONITOR

70

13. INTERFACING DAC AND ADC WITH 8086


Aim: To interface ADC and DACs 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 DACs 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 MOV DX,0FFE6H OUT DX,AL REPEAT: GOB: MOV MOV OUT INC CMP JNZ MOV OUT AL,00H DX,0FFE0H DX,AL AL AL,80H GOB DX,0FFE0H DX,AL ;INTIALIZE 8255PPI ;PORTA,PORTB,PORTC ARE OUTPUT ;0FFE6H CONTAINS CWR OF 8255 ;0FFE0H INDICATES PORT A

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

GOB2:

GOB3:

MOV DX,0FFE0H OUT DX,AL 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,AL 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 ;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 WITH 8086

72

MOV AL,81H MOV DX,0FFE6H OUT DX,AL XOR AX,AX MOV DX,0FFE4H IN AL,DX TEST AL,02H JE LOOP1 CALL DELAY IN AL,DX TEST AL,02H JNE LOOP2 MOV AL,0FFH MOV DX,0FFE0H INC AX OUT DX,AL PUSH AX CALL DELAY MOV DX,0FFE4H IN AL,DX TEST AL,01H JE DONE POP AX JMP W2 MOV AX,4C00H INT 21H MOV CX,0FFFH LOOP LOOP3 RET

;PORT A & PORT B ARE OUTPUT ;PORT C LOW ARE INPUT ; 0FFE6H INDICATES THE ADDRESS OF CWR ; OF 8255PPI ; WHEN STC BUTTON PRESSED ( PC AS I/P) ; DELAY ; WHEN STC BUTTON RELEASED THEN PC1=0 ; SQUARE PULSE GIVEN TO PC1 ; COUNTER=00H ; PA AS O/P IS CONNECTED WITH 8 LED'S THEN PC1=1

LOOP1:

LOOP2:

W2:

; CHECK WHETHER EOC=00 MEANS PROCESS ; PC0 IS CONNECTED TO EOC OF ADC

FINISH

; ; IF EOC=01 THEN INCREMENT COUNTER ; EXIT TO DOS ; DELAY BETWEEN LOGIC '1' AND '0'

DONE: DELAY: LOOP3: CODE ENDS END

73

Das könnte Ihnen auch gefallen