Microprocessor File

October 14, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Microprocessor File...

Description

 

 

IT – 306 Microprocessor File

Made by: Name: Pulkit Aggarwal Roll No: 755/IT/12 NSIT,Delhi

 

1)Study of 8086 microprocessor kit and implement following basic programs programs.. a) Find sum, average & multiplication of 2 decimal numbers. Sum .model small .data msg1 db 10,13,"Enter first no.$" msg2 db 10,13,"Enter second no.$" msg3 db 10,13,"Addition is:$" .code mov ax,@data mov ds,ax lea dx,msg1 mov ah,09H int 21H mov ah,01H int 21H sub al,30H cmp al,09H JBE L1 sub al,07H L1: mov cl,04H ROL al,cl mov bl,al mov ah,01H int 21H sub al,30H cmp al,09H JBE L2 sub al,07H L2:ADD bl,al

 

 lea dx,msg2 mov ah,09H int 21H mov ah,01H int 21H sub al,30H cmp al,09H JBE L3 sub al,07H L3: mov cl,04H ROL al,cl mov bh,al mov ah,01H int 21H sub al,30H cmp al,09H JBE L4 sub al,07H L4:ADD bh,al ADD bl,bh lea dx,msg3

mov ah,09H int 21H mov ch,02H mov cl,04H L5:ROL bl,cl mov bh,bl AND bl,0FH cmp bl,09H JBE L6 ADD bl,07H

 

 L6:ADD bl,30H mov dl,bl mov ah,02H int 21H mov bl,bh dec ch JNZ L5 mov ah,4ch int 21H end

Average .model small .stack 100 .data No1

DB 63H

; First number storage

No2

DB 2EH

; Second number storage

Avg

DB ?

; Average of two numbers

.code START:

MOV AX,@data

; [ Initialises

MOV DS,AX

; data segment ]

MOV AL,NO1

; Get first number in AL

ADD AL,NO2

; Add second to it

ADC AH,00H

; Put carry in AH

SAR AX,1 MOV Avg,AL

; Divide sum by 2 ; Copy result to memory

 

 

END START

Multiplication .model small .data a db 09H b db 02H .code mov

ax, @data

mov

ds, ax

mov

ah, 0

mov

al, a

; Load number1 in al

mov

bl, b

; Load number2 in bl

mul

bl

; multiply numbers and result in ax

mov

ch, 04h

mov

cl, 04h

mov

bx, ax

; Result in reg bx

bx, cl

; roll bl so that msb comes to lsb

mov

dl, bl

; load dl with data to be displayed

and

dl, 0fH

cmp

dl, 09

 jbe

l4

add

dl, 07

l2: rol

l4: add

; Initialize data section

; Count of digits to be displayed ; Count to roll by 4 bits

; get only lsb ; check if digit is 0-9 or letter A-F

; if letter add 37H else only add 30H

dl, 30H

mov

ah, 02

int

21H

dec

ch

 jnz

l2

; Function 2 under INT 21H (Display character)

; Decrement Count

 

 

mov int

ah, ah, 4cH

; Terminate Program

21H

end

b) Bubble sort numbers in increasing order. .model small .data M1

DB 10, 13, 'Enter the total number of elememts in the array : $'

M2

DB 10, 13, 'The sorted array is : ',0dh,0ah,'$'

M3

DB 10, 13, '$'

ARRAY DB 100 DUP(0) .code START: MOV AX, @data MOV DS, AX MOV AH, 09H

; Display message M1

MOV DX, OF FSET M1 INT 21H MOV AH, 01H

; input the number of elements in the array

INT 21H SUB AL,30H MOV BH,AL MOV BL,AL XOR DI,DI MOV CL,4 BACK: MOV AH, 09H

; Carrige return and next line

MOV DX, OFFSET M3 INT 21H

 

 

MOV AH,01 INT 21H SUB AL,30H SAL AL,CL MOV CH,AL MOV AH,01 INT 21H SUB AL,30H OR CH,AL MOV [ARRAY+DI],CH INC DI DEC BL JNZ BACK MOV CH,BH

AGAIN1: MOV DI,0 AGAIN: MOV DL,[ARRAY+DI] CMP DL,[ARRAY+DI+1] JBE SKIP MOV AH,[ARRAY+DI+1] MOV [ARRAY+DI],AH MOV [ARRAY+DI+1],DL SKIP: INC DI MOV AH,0 MOV AL,BH DEC AL CMP AX,DI JNZ AGAIN DEC CH JNZ AGAIN1 MOV AH, 09H

; Display message M1

MOV DX, OFFSET M2

 

 

INT 21H MOV BL,BH XOR DI,DI BACK1: MOV AH, 09H

; Carrige return and next line

MOV DX, OFFSET M3 INT 21H MOV DL,[ARRAY+DI] AND DL,0F0H SAR DL,CL ADD DL,30H MOV AH,02 INT 21H MOV DL,[ARRAY+DI] AND DL,0FH ADD DL,30H MOV AH,02 INT 21H INC DI DEC BL JNZ BACK1 TER: MOV AH, 4CH INT 21H END START

 

 

c) Transfer of bytes from ds to es. .MODEL SMALL .STACK 64 .DATA DSMSG DB 13,10,'DS: $' ARRONE DB 'ABCDE$' ARRTWO DB 0,0,0,0,0 MSG DB 13,10,'10 bytes bytes transferred transferred to ES: $' .CODE MAIN PROC MOV AX,@DATA MOV DS,AX MOV AX,@DATA MOV ES,AX LEA SI,ARRONE LEA DX,DSMSG MOV AH,09H INT 21H SKP1:

CALL SHOWARR LEA SI,ARRONE LEA DI,ARRTWO MOV CL,10

 

MVLP:

MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI CMP CL,00H JE SKP3 DEC CL LOOP MVLP

SKP3:

LEA DX,MSG MOV AH,09H INT 21H CALL SHOWARR2 MOV AH,4CH INT 21H MAIN ENDP SHOWARR PROC LEA SI,ARRONE MOV CL,10

DSPLP:

MOV DL,[SI] MOV AH,02H INT 21H INC SI CMP CL,00H JE SKP2 DEC CL LOOP DSPLP

SKP2:

RET SHOWARR ENDP SHOWARR2 PROC LEA DI,ARRTWO MOV CL,10

 

DSPLP2:

MOV DL,ES:[DI] MOV AH,02H INT 21H INC DI CMP CL,00H JE SKP4 DEC CL LOOP DSPLP2

SKP4:

RET SHOWARR2 ENDP

END

2) Code conversion a) BCD to Binary(HEX) .MODEL SMALL .STACK 64H .DATA TESTARR DB 'abc$' CHARARR DB ? .CODE MAIN PROC MOV AX,@DATA MOV DS,AX LEA SI,CHARARR INP: MOV AH,01H INT 21H CMP AL,0DH JE SKP1

 

 

AND AX,00FFH SUB AL,30H MOV [SI],AX ADD SI,1 LOOP INP

SKP1: MOV [SI],'$' LEA SI,CHARARR MOV DL,0AH MOV AH,02H INT 21H OPT: MOV DH,[SI] CMP DH,'$' JE SKP2 ;MOV AH,02H ;INT 21H CALL BCD2BIN INC SI LOOP OPT SKP2: MOV AH,4CH INT 21H MAIN ENDP BCD2BIN PROC PUSH AX PUSH CX PUSH BX PUSH DX PUSH SI MOV CL,08H LB : SAL DH,1

 

 

JC PRTONE CMP CL,04H JG SKP3 MOV DL,48 MOV AH,02H INT 21H JMP SKP3 PRTONE: CMP CL,04H JG SKP3 MOV DL,49 MOV AH,02H INT 21H SKP3: DEC CL CMP CL,00H JE SKP4 JMP 040H SKP4: MOV DL,' ' MOV AH,02H INT 21H POP SI POP DX POP BX POP CX POP AX RET BCD2BIN ENDP

b) Binary (HEX) to BCD .MODEL SMALL

 

.STACK 64H .DATA MSG1 DB 13,10,'Enter binary code in BCD format: $' MSG2 DB 13,10,'Resultant decimal: $' BINARRAY DB ? .CODE MAIN PROC MOV AX,@DATA MOV DS,AX LEA DX,MSG1 MOV AH,09H INT 21H AND DX,00FFH LEA SI,BINARRAY IN1: MOV AH,01H INT 21H CMP AL,' ' JNE RST MOV CL,00H ADD DL,48 MOV [SI],DL INC SI AND DX,0000H RST: CMP AL,0DH JE IN1_BRK SAL DX,1 AND AX,00FFH SUB AL,30H ADD DX,AX

 

  LOOP IN1 IN1_BRK: ADD DL,48 MOV [SI],DL INC SI MOV DL,'$' MOV [SI],DL MOV DL,10 MOV AH,02H INT 21H LEA DX,MSG2 MOV AH,09H INT 21H LEA DX,BINARRAY MOV AH,09H INT 21H MOV AH,4CH INT 21H MAIN ENDP

c) Binary (HEX) to ASCII .MODEL SMALL .STACK 64H .DATA MSG1 DB 13,10,'Enter binary code in A SCII format: $' MSG2 DB 13,10,'Resultant ASCII string: $' BINARRAY DB ? .CODE

 

  MAIN PROC MOV AX,@DATA MOV DS,AX LEA DX,MSG1 MOV AH,09H INT 21H AND DX,00FFH LEA SI,BINARRAY IN1: MOV AH,01H INT 21H CMP AL,' ' JNE RST MOV CL,00H MOV [SI],DL INC SI AND DX,0000H RST: CMP AL,0DH JE IN1_BRK SAL DX,1 AND AX,00FFH SUB AL,30H ADD DX,AX LOOP IN1 IN1_BRK: MOV [SI],DL INC SI MOV DL,'$' MOV [SI],DL MOV DL,10 MOV AH,02H INT 21H LEA DX,MSG2

 

 

MOV AH,09H INT 21H LEA DX,BINARRAY MOV AH,09H INT 21H MOV AH,4CH INT 21H MAIN ENDP

d) ASCII to Binary (HEX) .MODEL SMALL .STACK 64H .DATA TESTARR DB 'abc$' CHARARR DB ? .CODE MAIN PROC MOV AX,@DATA

MOV DS,AX LEA SI,CHARARR INP: MOV AH,01H INT 21H CMP AL,0DH JE SKP1 AND AX,00FFH MOV [SI],AX ADD SI,1 LOOP INP

 

SKP1: MOV [SI],'$' LEA SI,CHARARR MOV DL,0AH MOV AH,02H INT 21H OPT: MOV DH,[SI] CMP DH,'$' JE SKP2 ;MOV AH,02H ;INT 21H CALL ASC2BIN

INC SI LOOP OPT SKP2: MOV AH,4CH INT 21H MAIN ENDP ASC2BIN PROC PUSH AX PUSH CX PUSH BX PUSH DX PUSH SI MOV CL,08H LB : SAL DH,1 JC PRTONE MOV DL,48 MOV AH,02H INT 21H

 

 

JMP SKP3 PRTONE: MOV DL,49 MOV AH,02H INT 21H SKP3: DEC CL CMP CL,00H JE SKP4 JMP 03EH SKP4: MOV DL,' ' MOV AH,02H INT 21H POP SI POP DX POP BX POP CX POP AX RET ASC2BIN ENDP

3a)Program for Password matching,palindrome checking. Palindrome Checking DATA SEGMENT MSG1 DB 10,13,'ENTER THE STRING: $' MSG2 DB 10,13,'STRING IS PALINDROME$' MSG3 DB 10,13,'STRING IS NOT PALINDROME$' NEW DB 10,13,'$' INST DB 20 DUP(0)

DATA ENDS

 

CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,MSG1 MOV AH,09H INT 21H MOV BX,00 UP: MOV AH,01H INT 21H CMP AL,0DH JE DOWN MOV [INST+BX],AL INC BX LOOP UP DOWN: MOV DI,0 DEC BX JNZ CHECK CHECK: MOV AL,[INST+BX] CMP AL,[INST+DI] JNE FAIL INC DI DEC BX JNZ CHECK LEA DX,NEW MOV AH,09H INT 21H

 

LEA DX,MSG2 MOV AH,09H INT 21H JMP FINISH FAIL: LEA DX,MSG3 MOV AH,09H INT 21H FINISH: MOV AH,4CH INT 21H CODE ENDS END START END

Password Matching .MODEL SMALL .DATA MSG1 DB 13,10,'Create password: $' MSG2 DB 13,10,'Input password: $' MSG3 DB 13,10,'Password matched.$' MSG4 DB 13,10,'Password did not match.$' PASSWORD DB 20 DUP(0) INPUTSTR DB 20 DUP(0) .CODE MAIN PROC MOV DX,@DATA MOV DS,DX

 

  MOV ES,DX LEA DX,MSG1 MOV AH,09H INT 21H LEA SI,PASSWORD CALL INSTRING LEA DX,MSG2 MOV AH,09H INT 21H LEA SI,INPUTSTR CALL INSTRING MOV DL,10 MOV AH,02H INT 21H LEA SI,PASSWORD LEA DI,INPUTSTR CALL PASSCHECK MOV AH,4CH INT 21H MAIN ENDP INSTRING PROC INPASS_LP1: MOV AH,01H INT 21H CMP AL,0DH JE INPASS_SKP AND AX,00FFH MOV [SI],AX ADD SI,1 LOOP INPASS_LP1 INPASS_SKP: MOV [SI],'$' RET

 

 INSTRING ENDP PASSCHECK PROC PASSCHECK_LP: MOV DX,[SI] MOV CX,[DI] CMP DX,CX JNE FAIL CMP DL,'$' JE SUCCESS ADD SI,1 ADD DI,1 LOOP PASSCHECK_LP SUCCESS: LEA DX,MSG3 MOV AH,09H INT 21H RET FAIL: LEA DX,MSG4 MOV AH,09H INT 21H RET PASSCHECK ENDP

3b) Find the register bit width, byte order of your processor. Byte order DATA_HERE SEGMENT MSG DB "SIZE IS:",13,10,'$' DATA_HERE ENDS CODE_HERE SEGMENT

 

 

ASSUME DS:DATA_HERE, CS:CODE_HERE, START: MOV AX, DATA_HERE MOV DS,AX XOR BX,BX ADD BX, 1 MOV DX,BX MOV CX,0 LOOPS:

ROL BX,1 CMP BX,DX JZ LOOPO INC CX JMP LOOPS

LOOPO:

MOV DL,CL ADD DL,30H MOV AH,02H INT 21H MOV AX, 4C00H INT 21H

CODE_HERE ENDS END START Register Width

DATA_HERE SEGMENT MSG1 DB "LITTLE ENDIAN",13,10,'$' MSG2 DB "BIG ENDIAN",13,10,'$' TEMP DW 1 DUP(0) DATA_HERE ENDS CODE_HERE SEGMENT ASSUME DS:DATA_HERE, CS:CODE_HERE, START: MOV AX, DATA_HERE

 

 

MOV DS,AX LEA SI, TEMP MOV [SI], 1234H MOV CX,[SI] CMP CH,CL JL MSG MOV DX, OFFSET MSG2 MOV AX,0 MOV AH, 09H INT 21H MSG:

MOV DX, OFFSET MSG1 MOV AX,0 MOV AH, 09H INT 21H MOV AH,08H INT 21H MOV AX, 4C00H INT 21H

CODE_HERE ENDS END START

c) Generation of time delay counters. .MODEL SMALL .DATA MSGIN DB 'Enter delay duration (0-50): $' MSG1 DB 'Hello_World!$' DELAYTIME DW 0000H

.CODE

 

  MOV DX,@DATA MOV DS,DX LEA DX,MSGIN MOV AH,09H INT 21H IN1: MOV AH,01H INT 21H CMP AL,0DH JE NXT SUB AL,30H MOV DL,AL MOV AX,BX MOV CL,0AH MUL CL MOV BX,AX AND DX,00FFH ADD BX,DX MOV DELAYTIME,BX LOOP IN1 NXT: MOV CX,DELAYTIME MOV DL,10 MOV AH,02H INT 21H LEA SI,MSG1 LP: PUSH DX MOV DL,[SI] CMP DL,'$' JE NXT2 MOV AH,02H

 

  INT 21H ADD SI,1 POP DX MOV DI,DELAYTIME MOV AH, 0 INT 1Ah MOV BX, DX Delay: MOV AH, 0 INT 1Ah SUB DX, BX CMP DI, DX JA Delay LOOP LP NXT2: MOV AH,4CH INT 21H END

4) Implement prefix to postfix conversion of a mathematical expression. .model small .data prefix db '-+abc-d$' length dw ($-prefix) postfix db 56 dup(0) temp db 28 dup(0) enter db 10,13,'$' msg1 db 'The prefix string is: $' msg2 db 'The corresponding postfix string is: $'

 

.code mov ax, @data mov ds, ax lea si, prefix lea di, postfix mov es, di

;moving pointer of postfix to es

lea di, temp mov cx, length mov ah, 09h lea dx, msg1 int 21h lea dx, prefix int 21h label1: cmp cx,0  jz label6 cmp [si],'*'  jz label2 cmp [si],'/'  jz label2 cmp [si],'+'  jz label2 cmp [si],'-'  jz label2  jmp label3 label2: mov al, [si] mov [di], al ;di points to ttemp emp inc di inc si dec cx

 

 

jmp label1

label3: push di mov di, es

;di pointing to temp is stored ;di points to postfix

mov al,[si] mov [di],al

;operand put in postfix

inc di mov es, di pop di

;storing back pointer of postfix and ;retrieving pointer of temp

dec di label5: cmp [di],'\' ;di poi pointing nting to ttemp emp  jz label4 inc di mov [di],'\' inc di inc si dec cx  jmp label1 label4: dec di

;di pointing to temp

cmp [di],'\'  jz label4 push si

;storing si which points to prefix

push di

;storing di which points to temp

mov si, di

;si now points to temp

mov di, es

;di now points to postfix

mov al, [si] mov [di], al ;putting operator to postfi postfixx inc di

mov es, di pop di

;storing back pointer of postfix ;di now points to temp

 

 

mov di, 0 pop si

;clearing the last operator used from temp ;si now points to prefix

 jmp label5 label6: mov ah, 09h lea dx, enter int 21h lea dx, msg2 int 21h lea dx, postfix int 21h end

5) Data structures programs: a) Implement linked list : creation ,insertion ,deletion. .model small .stack 128 .data s1 db 13,10," 1. insert a node ",13,10,'$' s2 db " 2. delete a node ",13,10,'$' s3 db " 3. display the list ",13,10,'$' s4 db " 4. exit ",13,10,'$' s5 db "enter the choice : $" s6 db 13,10,13,10," enter the data : $" s7 db 13,10,13,10,'$' s8 db "

$"

s9 db 13,10," insert first node or after any any node (1/2) : $" s10 db 13,10," after which node : $"

 

mem db 10 dup(0) .code main proc mov ax,@data mov ds,ax mov si,0100h mov bp,0104h ok: lea dx,s1 mov ah,09h int 21h lea dx,s2 mov ah,09h int 21h lea dx,s3 mov ah,09h int 21h lea dx,s4 mov ah,09h int 21h lea dx,s5 mov ah,09h int 21h mov ah,01h

;taking input

int 21h cmp al,34h

;if exit

 je exit cmp al,31h

;insert

 je insert

cmp al,33h  je display1

;display

 

 jmp ok

;45

insert:

lea dx,s9 mov ah,09h int 21h mov ah,01h int 21h cmp al,31h  je first  jmp after ok1: jmp ok first: lea dx,s6 mov ah,09h int 21h mov ah,01h int 21h mov byte ptr [si],al inc si mov word ptr [si],0000h  jmp ok after: lea dx,s6 mov ah,09h int 21h mov ah,01h int 21h mov cl,al

lea dx,s10 mov ah,09h

; cl contains the data

 

 

int 21h mov ah,01h int 21h

;al contains after which node

mov di,0100h search :

cmp byte ptr [di],al  je nowinsert cmp word ptr [di+1],0000h  je ok1 inc di mov ax,word pt ptrr [di] mov di,ax  jmp search nowinsert:

;90 mov bx,word ptr [di+1] mov byte ptr [bp],cl

; storing the data

mov word ptr [bp+1],bx

;storind address

mov dx,bp inc di mov word ptr [di],dx inc bp inc bp inc bp inc bp  jmp ok1

exit : jmp exit1 ok2 :jmp ok1

display1 : mov si,0100h

 

 

lea dx,s7 mov ah,09h int 21h now: mov dl,byte ptr [si] mov ah,02h int 21h lea dx,s8

;for space

mov ah,09h int 21h inc si mov cx , wor word d ptr [si] cmp cx,0000h  je ok2 mov si,word ptr[si]  jmp now

exit1: mov ax,4c00h int 21h main endp end main

;129

 

 

b) Implement binary search tree. .MODEL SMALL .STACK 100H .DATA PROMPT_1 DB 'State 1 : $' PROMPT_2 DB 13,10,'State 2 : $' ARRAY DB 5,3,9,0,2,6,1,7,8,4 .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV BX, 10 LEA DX, PROMPT_1

; initialize DS

; set BX=10 ; load and display the string PROMPT_1

MOV AH, 9 INT 21H LEA SI, ARRAY CALL PRINT_ARRAY LEA SI, ARRAY

; set SI=offset address of ARRAY ; call the procedure PRINT_ARRAY ; set SI=offset address of the ARRAY

CALL BUBBLE_SORT

; call the procedure BUBBLE_SORT

LEA DX, PROMPT_2 MOV AH, 9 INT 21H

; load and display the string PROMPT_2

LEA SI, ARRAY CALL PRINT_ARRAY MOV AH, 4CH

; set SI=offset address of ARRAY ; call the procedure PRINT_ARRAY ; return control to DOS

 

  INT 21H MAIN ENDP ;**************************************************************************; ;**************************************************************************; ;------------------------- Procedure Definitions ------------------------; ;**************************************************************************; ;**************************************************************************; ;**************************************************************************; ;----------------------------- PRINT_ARRAY ------------------------------; ;**************************************************************************; PRINT_ARRAY PROC ; this procedure will print the elements of a given array ; input : SI=offset address of the array ; : BX=size of the array ; output : none PUSH AX PUSH CX PUSH DX

; push AX onto the STACK ; push CX onto the STACK ; push DX onto the STACK

MOV CX, BX

; set CX=BX

@PRINT_ARRAY: XOR AH, AH MOV AL, [SI]

; loop label ; clear AH ; set AL=[SI]

CALL OUTDEC MOV AH, 2 MOV DL, 20H INT 21H

; call the procedure OUTDEC ; set output function ; set DL=20H ; print a character

INC SI ; set SI=SI+1 LOOP @PRINT_ARRAY ; jump to label @PRINT_ARRAY while CX!=0 POP DX POP CX POP AX

; pop a value from STACK into DX ; pop a value from STACK into CX ; pop a value from STACK into AX

RET ; return control to the calling procedure PRINT_ARRAY ENDP

BUBBLE_SORT PROC ; this procedure will sort the array in ascending order ; input : SI=offset address of the array ; : BX=array size ; output : none PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI

; push AX onto the STACK ; push BX onto the STACK ; push CX onto the STACK ; push DX onto the STACK ; push DI onto the STACK

MOV AX, SI MOV CX, BX DEC CX

; set AX=SI ; set CX=BX ; set CX=CX-1

@OUTER_LOOP: MOV BX, CX MOV SI, AX MOV DI, AX

; loop label ; set BX=CX ; set SI=AX ; set DI=AX

 

  INC DI @INNER_LOOP: MOV DL, [SI]

; set DI=DI+1 ; loop label ; set DL=[SI]

CMP DL, [DI] ; compare DL with [DI] JNG @SKIP_EXCHANGE ; jump to label @SKIP_EXCHANGE if DL
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF