Friday, 2 May 2014

8086 MICROPROCESSOR LAB EXPERIMRNTS.


8086 MICROPROCESSORS LAB EXPERIMRNTS.







Note: To test 8086 asm programs download Masm from:
            https://www.facebook.com/groups/163904047131828/



Ø Steps to test and run 8086 asm programs.



Ø  Open cmd and and select the screen size as shown. 

























       1.   Download masm and copy the “MASM” folder in c:\
2.   Open cmd and maximize it.
3.   Change the directory to cd c:\masm
4.   Or else c:\
5.   Cd masm
6.   Type edit and type your program and save it with filename.asm
7.   Or else type program in notepad save it with .asm extension and copy in “c:\masm”
8.   Note:while typing the program u may not get full screen in windows 7.
9.   Now exit from editor window.

Follow following commands:
Compile :  masm filename;
Linking  :  link filename;
Debug  :  debug filename.exe;
-p : proceed
-t  : trace
Edit : edit filename.asm
Check memory location :  -d ds:1000

For linking two programs follow following commands.
Main program name : pgm1
Procedure program name : pgm2

Then
Masm pgm1;
Masm pgm2;
Link pgm1 pgm2;
To get output press
Pgm1;






        8086 lab Experiments.



Expt no 1: alp to display a message on console.


      data segment
      m1 db 0ah,0dh,"vishal$"
       
      data ends
      prg segment
      assume cs:prg , ds:data

 start: mov ax,data
      mov ds,ax
      lea dx,m1
      mov ah,09h
      int 21h
      mov ah,4ch
      int 21h
      prg ends
      end start

output:


















Expt no 2:alp to display two messages on console.

      data segment
      m1 db 0ah,0dh,"vishal$"
      m2 db 0ah,0dh,"2ji11ec061$"  

      data ends
      prg segment
      assume cs:prg , ds:data

      start: mov ax,data

      mov ds,ax

      lea dx,m1
      mov ah,09h
      int 21h

      lea dx,m2
      mov ah,09h
      int 21h



      mov ah,4ch
      int 21h
      prg ends
      end start


output:




   












Expt no 3:alp to read character from keyboard and display on console.


      data segment
      m1 db 0ah,0dh,"enter character: $"
      m2 db 0ah,0dh," entered character is: $"
      data ends
      prg segment
      assume cs:prg , ds:data
     
start: mov ax,data
      mov ds,ax
      lea dx,m1
      mov ah,09h
      int 21h
     
      mov ah,01h
      int 21h
      mov bl,al
     
       lea dx,m2
       mov ah,09h
       int 21h

       mov dl,bl
       mov ah,02h
       int 21h

      mov ah,4ch
      int 21h
      prg ends
      end start


output:


















·         Procedure to read a 8 bit hex no from keyboard and to display a 8 bit hex no on console.


data segment
data ends

prg segment
assume cs:prg,ds:data
public inp,dsp

start : mov ax,data
        mov ds,ax

        inp proc near
        push ax
        push cx
        push dx
        pushf

        mov ah,01h
        int 21h
        cmp al,41h
        jc dn1
        sub al,07h

    dn1:sub al,30h
        mov cl,04h
        ror al,cl
        mov bl,al

        mov ah,01h
        int 21h
        cmp al,41h
        jc dn2
        sub al,07h

    dn2:sub al,30h
    add bl,al

    popf
    pop dx
    pop cx
    pop ax
    ret
    inp endp

    dsp proc near
        push ax
        push bx
        push cx
        push dx
        pushf

        mov dl,bl
        and dl,0f0h
        mov cl,04
        ror dl,cl
        cmp dl,0ah
        jc dn3
        add dl,07h

 dn3:add dl,30h
   mov ah,02h
   int 21h

   mov dl,bl
   and dl,0fh
   cmp dl,0ah
   jc dn4
   add dl,07h

 dn4: add dl,30h
      mov ah,02h
      int 21h
      popf
      pop dx
      pop cx
      pop bx
      pop ax
      ret
      dsp endp

      mov ah,4ch
      int 21h
      prg ends
      end start




Expt no 1a : data transfer in various addressing modes.

data segment
n1 db 22h
n2 dw 1133h
data ends
prg segment
assume cs:prg,ds:data

start: mov ax,data
       mov ds,ax
       mov al,55h
       mov si,2500h
       mov bx,si
       mov ah,n1
       mov cx,n2
       mov [si],al
       mov dh,[si]
       mov dx,[bx-20h]
       mov cl,[bx+si]
       mov ch,[bx+si+2000h]
       mov ah,4ch
       int 21h
       prg ends
       end start

output: 












Expt no 1b : block of data transfer without overlap.

data segment

org 1000h
scrlist db 01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah

org 2000h
dstlist db 10 dup(00)

data ends

prg segment

assume cs:prg,ds:data
start: mov ax,data
       mov ds,ax
       mov si,1000h
       mov di,2000h
       mov cx,000ah

up: mov al,[si]
    mov [di],al
    inc si
    inc di
    loop up
    mov ah,4ch
    int 21h
    prg ends
    end start

output: 














Expt no 1c : block of data transfer with overlap.

data segment

org 1000h
scrlist db 01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah


data ends

prg segment

assume cs:prg,ds:data

start: mov ax,data
       mov ds,ax
       mov si,1009h
       mov di,100eh
       mov cx,000ah

up: mov al,[si]
    mov [di],al
    dec si
    dec di
    loop up
    mov ah,4ch
    int 21h
    prg ends
    end start

output :












Expt no 1d : exchange of block of data in two memory locations.

data segment

org 1000h
scrlist db 01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah

org 2000h
dstlist db 11h,12h,13h,14h,15h,16h,17h,18h,19h,2ah

data ends

prg segment

assume cs:prg,ds:data

start: mov ax,data
       mov ds,ax
       mov si,1000h
       mov di,2000h
       mov cx,000ah

up: mov al,[si]
    xchg al,[di]
    mov [si],al
    inc si
    inc di
    loop up
    mov ah,4ch
    int 21h
    prg ends
    end start

output :















Expt no 2a: Multiprecise addition of two 32-bit no.

data segment
n1 dd 44443333h
n2 dd 22221111h
org 1000h
result dd ?
data ends

prg segment
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      mov ax,word ptr n1
      add ax,word ptr n2
      mov word ptr result,ax
      mov ax,word ptr n1+2
      adc ax,word ptr n2+2
      mov word ptr result+2,ax

      mov ah,4ch
      int 21h
      prg ends
      end start

output: 











Expt no 2b: Multiprecise substraction of two 32 bit no.

data segment
n1 dd 44443333h
n2 dd 22222222h
org 1000h
result dd ?
data ends

prg segment
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      mov ax,word ptr n1
      sub ax,word ptr n2
      mov word ptr result,ax
      mov ax,word ptr n1+2
      sbb ax,word ptr n2+2
      mov word ptr result+2,ax

      mov ah,4ch
      int 21h
      prg ends
      end start

output: 











Expt no 3a: addition of two 16 bit bcd no.

data segment
m1 db 0ah,0dh,"enter first number : $"
m2 db 0ah,0dh,"enter second number: $"
m3 db 0ah,0dh,"result is : $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start : mov ax,data
        mov ds,ax
        print m1
        call inp
        mov ch,bl
        call inp
        mov cl,bl
        print m2
        call inp
        mov bh,bl
        call inp
        mov al,cl
        add al,bl
        daa
        mov cl,al
        mov al,ch
        adc al,bh
        daa

        mov ch,al
        print m3
        call dsp
        mov bl,ch
        call dsp
        mov bl,cl
        call dsp
        mov ah,4ch
        int 21h
        prg ends
        end start

output:  


















Expt no 3b: substraction of two 16 bit bcd no.

data segment
m1 db 0ah,0dh,"enter first number : $"
m2 db 0ah,0dh,"enter second number: $"
m3 db 0ah,0dh,"result is : $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start : mov ax,data
        mov ds,ax
        print m1
        call inp
        mov ch,bl
        call inp
        mov cl,bl
        print m2
        call inp
        mov bh,bl
        call inp
        mov al,cl

        sub al,bl
        das

        mov cl,al
        mov al,ch

        sbb al,bh
        das

        mov ch,al
        print m3
        call dsp
        mov bl,ch
        call dsp
        mov bl,cl
        call dsp
        mov ah,4ch
        int 21h
        prg ends
        end start

output: 

















Expt no 3c: multiplication of two 16 bit hex no.

data segment
m1 db 0ah,0dh,"enter first number : $"
m2 db 0ah,0dh,"enter second number: $"
m3 db 0ah,0dh,"result is : $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start : mov ax,data
        mov ds,ax

        print m1
        call inp
        mov ch,bl
        call inp
        mov cl,bl
      

        print m2
        call inp
        mov bh,bl
        call inp

        mov dx,0000h
        mov ax,cx
        mul bx
        print m3
        mov bl,dh
        call dsp
        mov bl,dl
        call dsp
        mov bl,ah
        call dsp
        mov bl,al
        call dsp

        mov ah,4ch
        int 21h
        prg ends
        end start

output:


















Expt no 3d: division of two 16 bit hex no.

data segment
m1 db 0ah,0dh,"enter first number : $"
m2 db 0ah,0dh,"enter second number: $"
m3 db 0ah,0dh,"quotient is : $"
m4 db 0ah,0dh,"remender is:$"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start : mov ax,data
        mov ds,ax

        print m1
        call inp
        mov ch,bl
        call inp
        mov cl,bl

        print m2
        call inp
        mov bh,bl
        call inp

        mov dx,0000h
        mov ax,cx
        div bx

        print m4
        mov bl,dh
        call dsp
        mov bl,dl
        call dsp

        print m3
        mov bl,ah
        call dsp
        mov bl,al
        call dsp

        mov ah,4ch
        int 21h
        prg ends
        end start





















Expt no 4a: square of 8 bit no.

data segment
m1 db 0ah,0dh,"enter number : $"
m2 db 0ah,0dh,"square is : $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far

start:  mov ax,data
        mov ds,ax
        print m1
        call inp
        mov al,bl
        mul al
        print m2
        mov bl,ah
        call dsp
        mov bl,al
        call dsp
        mov ah,4ch
        int 21h
        prg ends
        end start

output:



















Expt no 4b: cube of a 8 bit no.

data segment
m1 db 0ah,0dh,"enter number : $"
m2 db 0ah,0dh,"cube is : $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far

start:  mov ax,data
        mov ds,ax

        print m1
        call inp
        mov al,bl
        mov cl,bl
        mov dx,0000h
        mul al
        mul cl
       
        print m2
        mov bl,dh
        call dsp
        mov bl,dl
        call dsp

        mov bl,ah
        call dsp
        mov bl,al
        call dsp

        mov ah,4ch
        int 21h
        prg ends
        end start

output:

















Expt no 4c: 8 bit hex calculator.

data segment
m1 db 0ah,0dh,"enter first digit :$"
m2 db 0ah,0dh,"enter second digit :$"
m3 db 0ah,0dh,"enter 01 for add , 02 for substract 03 for mul , 04 for division : $"
m4 db 0ah,0dh,"enter your choice:$"
m5 db 0ah,0dh,"the results is :$"
m6 db 0ah,0dh,"invalid choice !!!!!!!! $"
data ends.


print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far

start: mov ax,data
       mov ds,ax
       print m1
       call inp
       mov cl,bl
       print m2
       call inp
       mov ch,bl
       print m3
       print m4
       call inp

       cmp bl,01h
       je dn1

       cmp bl,02h
       je dn2

       cmp bl,03h
       je dn3

       cmp bl,04h
       je dn4

       print m6
       jmp last

    dn1:add cl,ch
        mov bl,cl
        print m5
        call dsp
        jmp last

    dn2:sub cl,ch
        mov bl,cl
        print m5
        call dsp
        jmp last

    dn3:mov al,cl
        mov ah,00h
        mul ch
        mov bl,ah
        print m5
        call dsp
        mov bl,al
        call dsp
        jmp last

    dn4:mov al,cl
        mov ah,00h
        div ch
        mov bl,ah
        print m5
        call dsp
        mov bl,al
        call dsp

   last:mov ah,4ch
        int 21h
        prg ends
        end start

output:





























Expt no 5a: gcd of two 8 bit no.

data segment
m1 db 0ah,0dh,"enter first digit:$"
m2 db 0ah,0dh,"enter second digit :$"
m3 db 0ah,0dh,"GCD is : $"
data ends
print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far
start: mov ax,data
       mov ds,ax
       print m1
       call inp
       mov al,bl
       print m2
       call inp
  up1: cmp al,bl
       je dn1
       cmp al,bl
       jc dn2
       sub al,bl
       jmp up1

  dn2: sub bl,al
       jmp up1
   dn1:print m3
   mov bl,al
   call dsp
   mov ah,4ch
   prg ends
   end start


output:



















Expt no 5b: lcm of two 8 bit no.

data segment
m1 db 0ah,0dh,"enter first digit:$"
m2 db 0ah,0dh,"enter second digit :$"
m3 db 0ah,0dh,"LCM is : $"
data ends
print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far
start: mov ax,data
       mov ds,ax
       print m1
       call inp
       mov al,bl
       mov ch,bl
       print m2
       call inp
       mov cl,bl
   up1:cmp al,bl
       je dn1
       jc dn2
       sub al,bl
       jmp up1
   dn2:sub bl,al
       jmp up1
   dn1:mov al,ch
       mul cl
       div bl
       print m3
       mov  bl,al
       call dsp
       mov ah,4ch
       int 21h
       prg ends
       end start


output:

















Expt no 5c: factorial of a no.

data segment
m1 db 0ah,0dh,"Enter the no $"
m2 db 0ah,0dh,"factorial of no is $"
data ends
print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov cl,bl
      mov ch,00h
      mov ax,0001h
     up:mul cx
        loop up
        mov cx,ax
        print m2
        mov bl,ch
        call dsp
        mov bl,cl
        call dsp
        mov ah,4ch
        int 21h
        prg ends
      end start

output:

















Expt no 6a: bcd to hex conversion.

data segment
m1 db 0ah,0dh,"enter bcd no:$"
m2 db 0ah,0dh,"hex eq bcd no:$"
data ends

print macro m
push dx
push ax
lea dx,m
mov ah,09h
int 21h
pop ax
pop dx
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data
start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov al,bl
      and al,0f0h
      mov cl,04h
      ror al,cl
      mov cl,0ah
      mul cl
      and bl,0fh
      add al,bl
      print m2
      mov bl,al
      call dsp

      mov ah,4ch
      int 21h
      prg ends
      end start

output:

















Expt no 6b: hex to bcd conversion.

data segment
m1 db 0ah,0dh,"enter hex number:$"
m2 db 0ah,0dh,"bcd equ of hex number is:$"
data ends

print macro m
push dx
push ax
lea dx,m
mov ah,09h
int 21h
pop ax
pop dx
endm
        prg segment
        assume cs:prg,ds:data
        extrn inp:far,dsp:far
        start:mov ax,data
              mov ds,ax

              print m1
              call inp
              mov al,bl
              mov ah,00h
              mov bl,64h
              div bl

              print m2
              mov bl,al
              call dsp
              mov al,ah
              mov bl,0ah
              mov ah,00h
              div bl

              mov cl,04h
              ror al,cl
              add al,ah
              mov bl,al
              call dsp
              mov ah,4ch
              int 21h
              prg ends
              end start

output:


















Expt no 6c : hex to ascii conversion using aam istn.

data segment
m1 db 0ah,0dh,"enter the hex number: $"
m2 db 0ah,0dh,"ascii equivalent of hex is: $"
data ends
print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data
start:  mov ax,data
        mov ds,ax
        print m1
        call inp
        mov al,bl
        mov ah,00h
        aam
        add ax,3030h
        print m2
        mov bl,ah
        call dsp
        mov bl,al
        call dsp
        mov ah,4ch
        int 21h
        prg ends
        end start


output:


















Expt no 7a: alp to count no of 0’s and 1’s in a 8 bit no.

data segment
m1 db 0ah,0dh,"enter the number:$"
m2 db 0ah,0dh,"number of ones is:$"
m3 db 0ah,0dh,"number of zeros is:$"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:near

start:mov ax,data
      mov ds,ax

      print m1
      call inp
      mov cl,08h
      mov ch,00h
      mov ah,00h
      mov al,00h

   up:rol bl,01h
      jc dn3
      inc al
      loop up
      jmp last

  dn3:inc ah
      loop up

  last:print m2
      mov bl,ah
      call dsp

      print m3
      mov bl,al
      call dsp

      mov ah,4ch
      int 21h
      prg ends
      end start

output:



















Expt no 7b: alp to check for 2 out of 5 code.

data segment
m1 db 0ah,0dh,"enter the no:$"
m2 db 0ah,0dh,"the number is two out of five:$"
m3 db 0ah,0dh,"the number is not two out of five:$"
data ends


print macro m
push dx
push ax
lea dx,m
mov ah,09h
int 21h
pop ax
pop dx
endm

prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far

start :mov ax,data
       mov ds,ax
       print m1
       call inp
       mov al,bl
       and al,0e0h
       jnz dn1
       mov ah,00h
       mov cx,00005h

   up1:ror bl,01h
       jnc dn2
       inc ah
      

    dn2:loop up1

        cmp ah,02h
        jne dn1
        print m2
        jmp last

    dn1:print m3

    last: mov ah,4ch
          int 21h
          prg ends
          end start
       

output:





















Expt no 7c: alp to check whether a given 16 bit no is nibble wise palindrome
                    Or not.

data segment
m1 db 0ah,0dh,"enter the 16 bit no: $"
m2 db 0ah,0dh,"the no is nibble wise palindrom $"
m3 db 0ah,0dh,"the no is not nibblewise palindrom $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data
start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov bh,bl
      call inp
      mov cl,04h
      ror bl,cl
      cmp bl,bh
      jne dn1
      print m2
      jmp last
      dn1:print m3
      last:mov ah,4ch
      int 21h
      prg ends
      end start

output:




















Expt no 7d: alp to check whether a given 16 bit no is bitwise palindrome
                    Or not.

data segment
m1 db 0ah,0dh,"enter the 16 bit no: $"
m2 db 0ah,0dh,"the no is bitwise palindrom $"
m3 db 0ah,0dh,"the no is not bitwise palindrom $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov ah,bl
      call inp
      mov al,bl

      mov bx,ax
      mov cx,0010h

   up:rol bx,1
      rcr ax,1
      loop up
      xor ax,bx
      jnz npal
      print m2
      jmp last

 npal:print m3
 last:mov ah,4ch
      int 21h
      prg ends
      end start


output:






















Expt no 8a: alp to find smallest no.

data segment
m1 db 0ah,0dh,"Enter the value on N: $"
m2 db 0ah,0dh,"enter the no one by one:$"
m3 db 0ah,0dh,"smallest no is: $"
m4 db 0ah,0dh,"$"
list db 100 dup(00)
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov cl,bl
      mov dl,bl
      print m2
      mov ch,00h
      lea si,list

   up:print m4
      call inp
      mov [si],bl
      inc si
      loop up
      lea si,list
      dec dl
      mov cl,dl
      mov al,[si]

  up1:inc si
      cmp al,[si]
      jc dn
      mov al,[si]

 dn:loop up1
      print m3
      mov bl,al
      call dsp
      mov ah,4ch
      int 21h
      prg ends
      end start



output:




















Expt no 8b: alp to find largest no.

data segment
m1 db 0ah,0dh,"Enter the value on N: $"
m2 db 0ah,0dh,"enter the no one by one:$"
m3 db 0ah,0dh,"largest no is: $"
m4 db 0ah,0dh,"$"
list db 100 dup(00)
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov cl,bl
      mov dl,bl
      print m2
      mov ch,00h
      lea si,list

   up:print m4
      call inp
      mov [si],bl
      inc si
      loop up
      lea si,list
      dec dl
      mov cl,dl
      mov al,[si]

  up1:inc si
      cmp al,[si]
      jnc dn
      mov al,[si]

 dn:loop up1
      print m3
      mov bl,al
      call dsp
      mov ah,4ch
      int 21h
      prg ends
      end start

output:





















Expt no 8c: alp to find average of n no.

data segment
m1 db 0ah,0dh,"enter the value of n:$"
m2 db 0ah,0dh,"enter the nos 1 by 1:$"
m3 db 0ah,0dh,"the average is $"
m4 db 0ah,0dh,"$"
list db 100 dup (00)
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
assume cs:prg,ds:data
extrn inp:far,dsp:far
start:mov ax,data
mov ds,ax

print m1
call inp
mov cl,bl
mov dl,bl
mov ch,00h
lea si,list
print m2
up:print m4
   call inp
   mov [si],bl
   inc si
   loop up
   mov cl,dl
   mov ax,00h
   lea si,list
up1:mov bl,[si]
    mov bh,00h
    add ax,bx
    inc si
    loop up1
    div dl
    print m3
    mov bl,al
    call dsp
   mov ah,4ch
   int 21h
   prg ends
   end start

output:


















Expt no 9a: alp to sort no in ascending order.

data segment
m1 db 0ah,0dh,"Enter the value of N $"
m2 db 0ah,0dh,"Enter the no 1 by 1 $"
m3 db 0ah,0dh,"The ascending order is $"
m4 db 0ah,0dh,"$"

list db 100 dup(00)
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov cl,bl
     mov dl,bl
      mov ch,00h
      mov dh,bl
      lea si,list
      print m2

    up:print m4
       call inp
       mov [si],bl
       inc si
       loop up
       dec dh

    up2:lea si,list
        mov cl,dh

    up1:mov al,[si]
        mov bl,[si+01]
        cmp al,bl
        jc dn
        xchg al,bl
        mov [si],al
        mov [si+01],bl

     dn:inc si
        loop up1
        dec dh
        jnz up2
        print m3
        lea si,list
        mov cl,dl

     up3:print m4
         mov bl,[si]
         call dsp
         inc si
         loop up3
         mov ah,4ch
         int 21h
         prg ends
         end start


output:






















Expt no 9b: alp to sort no in descending order.

data segment
m1 db 0ah,0dh,"Enter the value of N $"
m2 db 0ah,0dh,"Enter the no 1 by 1 $"
m3 db 0ah,0dh,"The descending order is $"
m4 db 0ah,0dh,"$"

list db 100 dup(00)
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      print m1
      call inp
      mov cl,bl
     mov dl,bl
      mov ch,00h
      mov dh,bl
      lea si,list
      print m2

    up:print m4
       call inp
       mov [si],bl
       inc si
       loop up
       dec dh

    up2:lea si,list
        mov cl,dh

    up1:mov al,[si]
        mov bl,[si+01]
        cmp al,bl
        jnc dn
        xchg al,bl
        mov [si],al
        mov [si+01],bl

     dn:inc si
        loop up1
        dec dh
        jnz up2
        print m3
        lea si,list
        mov cl,dl

     up3:print m4
         mov bl,[si]
         call dsp
         inc si
         loop up3
         mov ah,4ch
         int 21h
         prg ends
         end start

output:























Expt no 10a: alp to separate positive and negative no.

data segment
m1 db 0ah,0dh,"enter the value of n$"
m2 db 0ah,0dh,"enter the no one by one $"
m3 db 0ah,0dh,"the +ve no list $"
m4 db 0ah,0dh,"the -ve no list $"
m5 db 0ah,0dh,"$"
list db 100 dup(00)
plist db 100 dup(00)
nlist db 100 dup(00)
data ends
print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
assume cs:prg, ds:data
extrn inp:far,dsp:far

start: mov ax,data
       mov ds,ax
       print m1
       call inp
       mov cl,bl
       mov bh,cl
       print m2
       lea si,list
       mov ch,00h

   up1:print m5
       call inp
       mov [si],bl
       inc si
       loop up1
       lea si,list
       lea di,plist
       mov dh,00h
       mov cl,bh

   up2:mov al,[si]
       rol al,01h
       jc up3
       mov al,[si]
       mov [di],al
       inc di
       inc dh

   up3:inc si
       loop up2
       lea si,list
       lea di,nlist
       mov dl,00h
       mov cl,bh

  up4: mov al,[si]
       rol al,01h
       jnc up5
       mov al,[si]
       mov [di],al
       inc di
       inc dl

  up5: inc si
       loop up4
       print m3
       lea si,plist
       mov cl,dh

   up6:print m5
       mov bl,[si]
       call dsp
       inc si
       loop up6
       print m4
       mov cl,dl
       lea si,nlist

   up7:print m5
       mov bl,[si]
       call dsp
       inc si
       loop up7
       mov ah,4ch
       int 21h
       prg ends
       end start

output:



























Expt no 10b: alp to separate even and odd no.

data segment
m1 db 0ah,0dh,"enter the value of n: $"
m2 db 0ah,0dh,"enter the no one by one: $"
m3 db 0ah,0dh,"the even no list :$"
m4 db 0ah,0dh,"the odd no list:$"
m5 db 0ah,0dh,"$"
list db 100 dup(00)
plist db 100 dup(00)
nlist db 100 dup(00)
data ends
print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
assume cs:prg, ds:data
extrn inp:far,dsp:far

start: mov ax,data
       mov ds,ax
       print m1
       call inp
       mov cl,bl
       mov bh,cl
       print m2
       lea si,list
       mov ch,00h

   up1:print m5
       call inp
       mov [si],bl
       inc si
       loop up1
       lea si,list
       lea di,plist
       mov dh,00h
       mov cl,bh

   up2:mov al,[si]
       ror al,01h
       jc up3
       mov al,[si]
       mov [di],al
       inc di
       inc dh

   up3:inc si
       loop up2
       lea si,list
       lea di,nlist
       mov dl,00h
       mov cl,bh

  up4: mov al,[si]
       ror al,01h
       jnc up5
       mov al,[si]
       mov [di],al
       inc di
       inc dl

  up5: inc si
       loop up4
       print m3
       lea si,plist
       mov cl,dh

   up6:print m5
       mov bl,[si]
       call dsp
       inc si
       loop up6
       print m4
       mov cl,dl
       lea si,nlist

   up7:print m5
       mov bl,[si]
       call dsp
       inc si
       loop up7
       mov ah,4ch
       int 21h
       prg ends
       end start

output:

























Expt no 11a: alp to search a key in a string.

  data segment
  m1 db 0ah,0dh,"enter the string:$"
  m2 db 0ah,0dh,"enter the key to be searched:$"
  m3 db 0ah,0dh,"the key is present:$"
  m4 db 0ah,0dh,"the key is not present:$"

  str db 100 dup(00)
  data ends

  print macro m
  push ax
  push dx
  lea dx,m
  mov ah,09h
  int 21h
  pop dx
  pop ax
  endm

  prg segment
 
  assume cs:prg,ds:data

  start:mov ax,data
        mov ds,ax
        print m1
        mov cx,0000h
        lea si,str

     up:mov ah,01h
        int 21h
        cmp al,0Dh
        je dn
        mov [si],al
        inc si
        inc cx
        jmp up

     dn:print m2
        mov ah,01h
        int 21h
        lea si,str

    up1:cmp al,[si]
        je dn1
        inc si
        loop up1
        print m4
        jmp last
    dn1:print m3

  last: mov ah,4ch
        int 21h
        prg ends
        end start

 

output:




















Expt no 11b:alp to concantinate two strings.

  data segment
  m1 db 0ah,0dh,"enter the first string:$"
  m2 db 0ah,0dh,"enter the second string:$"
  m3 db 0ah,0dh,"concantinated string is:$"

  str1 db 100 dup(00)
  str2 db 100 dup(00)
  data ends

  print macro m
  push ax
  push dx
  lea dx,m
  mov ah,09h
  int 21h
  pop dx
  pop ax
  endm

  prg segment
 
  assume cs:prg,ds:data

  start:mov ax,data
        mov ds,ax
        print m1
        mov cx,0000h
        lea si,str1

     up:mov ah,01h
        int 21h
        cmp al,0Dh
        je dn
        mov [si],al
        inc si
        inc cx
        jmp up

     dn:mov bx,cx
        mov cx,0000h
        print m2
        lea si,str2

    up1:mov ah,01h
        int 21h
        cmp al,0dh
        je dn1
        mov [si],al
        inc si
        inc cx
        jmp up1

   dn1:lea si,str1
       add si,bx
       lea di,str2

   up2:mov al,[di]
       mov [si],al
       inc si
       inc di
       loop up2
       mov byte ptr[si],'$'
       print m3
       print str1
       mov ah,4ch
       int 21h
       prg ends
       end start


output:


















Expt no 11c: alp to reverse a string and check whether it is palindrome
                     or not.

data segment
m1 db 0ah,0dh,"Enter the string: $"
m2 db 0ah,0dh,"The reversed string is: $"
m3 db 0ah,0dh,"the string is palindrome: $"
m4 db 0ah,0dh,"The string is not a palindrome: $"
str1 db 100 dup(00)
str2 db 100 dup(00)
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
assume cs:prg,ds:data
start:mov ax,data
      mov ds,ax
      print m1
      lea si,str1
      mov cx,0000h
   
  up:mov ah,01h
     int 21h
     cmp al,0dh
     je dn
     mov [si],al
     inc si
     inc cx
     jmp up
  dn:mov bx,cx
     lea si,str1
     lea di,str2
     add si,bx
     dec si

  up1:mov al,[si]
      mov [di],al
      inc di
      dec si
      loop up1
     
      print m2
      lea di,str2
      mov cx,bx
    up3:  mov dl,[di]
      mov ah,02h
      int 21h
      inc di
      loop up3
      lea si,str1
      lea di,str2
      mov cx,bx

  up2:mov al,[si]
      cmp al,[di]
      jne dn2
      inc si
      inc di
      loop up2
      print m3
      jmp last

   dn2:print m4
   last :mov ah,4ch
        int 21h
        prg ends
        end start

output:






















Expt no 11d: alp to change the case of string.

  data segment
  m1 db 0ah,0dh,"enter the  string:$"
  m2 db 0ah,0dh,"the result:$"


  str db 100 dup(00)
  data ends

  print macro m
  push ax
  push dx
  lea dx,m
  mov ah,09h
  int 21h
  pop dx
  pop ax
  endm

  prg segment
 
  assume cs:prg,ds:data

  start:mov ax,data
        mov ds,ax
        print m1
        mov cx,0000h
        lea si,str

     up:mov ah,01h
        int 21h
        cmp al,0Dh
        je dn
        mov [si],al
        inc si
        inc cx
        jmp up

     dn:lea si,str
       
    up1:mov al,[si]
        cmp al,'A'
        jc d2
        cmp al,'Z'
        jnc d1
        add al,20h
        mov [si],al
        jmp d2

      d1:cmp al,'a'
         jc d2
         cmp al,'z'
         jnc d2
         sub al,20h
         mov [si],al

      d2:inc si
         loop up1

         mov byte ptr[si],'$'
         print m2
         print str
         mov ah,4ch
         int 21h
         prg ends
         end start


output:




















Expt no 12a: alp to display system date on console.



data segment
m1 db 0ah,0dh,"the system date is :$"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm

prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax

      mov ah,2ah
      int 21h
      print m1
      mov bh,dl
      mov bl,al
     
      call dsp
      mov dl,':'
      mov ah,02h
      int 21h
     
      
      mov bl,bh
      call dsp
      mov dl,':'
      mov ah,02h
      int 21h
     
      mov bl,dh
      call dsp
      mov ah,02h
      int 21h

      mov bl,ch
      call dsp
      mov bl,cl
      call dsp
      mov ah,4ch
      int 21h
      prg ends
      end start

output:





     












Expt no 12b: alp to display system time on console.

data segment
m1 db 0ah,0dh,"the system time is: $"
data ends

print macro m
push ax
push dx
lea dx,m
mov ah,09h
int 21h
pop dx
pop ax
endm
prg segment
extrn inp:far,dsp:far
assume cs:prg,ds:data

start:mov ax,data
      mov ds,ax
      mov ah,2ch
      int 21h
      print m1
      mov bl,ch
    
      call dsp
      mov dl,':'
      mov ah,02h
      int 21h
   
     
      mov bl,cl
      call dsp
      mov dl,':'
      mov ah,02h
      int 21h
   
      mov bl,dh
      call dsp
      mov ah,4ch
      int 21h

      prg ends
      end start

output:



















         



               8086 Microprocessor Interfacing.






Steps for  interfacing:

·         Go to start>als>alsplxpc107>sample VBapplications.
·         Note the port address.
·         Save the program with .asm extension and exit from editor window
·         Compile: masm filename;
·         Link : link filename;
·         Allowio port_address filename.exe
·         Eg: allowio 0x0c880 fiename.exe



               8086 Interfacing programs.


Expt no 1:Interfacing logic controller.

Expt no 1a:alp to implement ring counter.

data segment
ba equ 0c880h
pa equ ba+00h
pb equ ba+01h
pc equ ba+02h
cwr equ ba+03h

data ends

prg segment
assume cs:prg,ds:data
   start:mov ax,data
         mov ds,ax

        up: mov al,8ah
         mov dx,cwr
         out dx,al
         mov cx,0008h
         mov al,80h
       
up1: mov dx,pa
        out dx,al
        call delay
        ror al,01
        loop up1
           mov ah,0bh
            int 21h
            or al,al
            jz up

         delay proc near
         push bx
         push cx
         push ax
         mov bx,0f00fh
  
      up2:mov cx,0f00fh
         here:loop here

         up3:mov ax,00ffh

         hre:loop hre
        dec bx
         jnz up2
         pop ax
         pop cx
         pop bx

         ret
         delay endp
         mov ah,4ch
         int 21h
         prg ends
          end start



Expt no 1b: alp to implement bcd counter.

data segment
ba equ 0c880h
pa equ ba+00h
pb equ ba+01h
pc equ ba+02h
cwr equ ba+03h

data ends

prg segment
assume cs:prg,ds:data

   start:mov ax,data
         mov ds,ax

        up: mov al,8ah
            mov dx,cwr
            mov cx,0100
            out dx,al
            mov al,00h

        up1:mov dx,pa
            out dx,al
            call delay
            add al,01h
            daa
            loop up1
            mov ah,0bh
            int 21h
            or al,al
            jz up

         delay proc near
         push bx
         push cx
         push ax
         mov bx,0f00fh
  
      up2:mov cx,0f00fh
         here:loop here

         up3:mov ax,00ffh

         hre:loop hre
        dec bx
         jnz up2
         pop ax
         pop cx
         pop bx

         ret
         delay endp
         mov ah,4ch
         int 21h
         prg ends
          end start



Expt no 1c:alp to check parity.

data segment
baseaddr equ 0c880h
porta equ baseaddr+00h
portb equ baseaddr+01h
portc equ baseaddr+02h
cwr equ baseaddr+03h
data ends

prg segment
assume cs:prg,ds:data

start: mov ax,data
       mov ds,ax

    up:mov al,8ah
       mov dx,cwr
       out dx,al
       mov dx,portb
       in al,dx
       add al,00h
       jp epb
       mov al,00h
       mov bx,porta
       out dx,al
       call delay
       jmp exit
      

   epb:mov al,0ffh
       mov dx,porta
       out dx,al
       call delay

    delay proc near

      push dx
      push cx
      mov dx,0fffh

  uu1:mov cx,0ffffh

here:loop here
      dec dx
      jnz uu1
      pop cx
      pop dx
      ret
    delay endp

 exit:mov ah, 0dh
     
      int 21h
      or al,al
      jz up

      mov ah,4ch
      int 21h
     prg ends
     end start


Expt no 2:Interfacing stepper motor
               

data segment
ba equ 0c880h
pa equ ba+00h
pb equ ba+01h
pc equ ba+02h
cwr equ ba+03h
data ends


prg segment
assume cs:prg,ds:data

      start:mov ax,data
            mov ds,ax


            mov al,80h
            mov dx,cwr
            out dx,al

           again:mov cx,0064h
                mov dx,portc
                mov al,0eeh

                up:out dx,al
                call delay
                rol al,01
                loop up

                mov cx,00c8h

                up1:out dx,al
                call delay
                ror al,01h
                loop up1

                mov ah,0bh
                int 21h
                or al,al

                jz again


                delay proc near
                push ax
                push bx
                push cx
                mov bh,0ffh

             up3:mov cx,0ffffh
                here:loop here

             up4:mov ax,0ffffh

           there:loop there
                dec bh
                jnz up3
                jnz up4

                pop cx
                pop bx
                pop ax
           
                ret
                delay endp

                prg ends
                end start


Expt no 3:Interfacing seven segment display.

data segment
ba equ 0c880h
pa equ ba+00h
pb equ ba+01h
pc equ ba+02h
cwr equ ba+03h
list db 3fh,06h,5bh,4fh,66h,6dh
data ends


prg segment
assume cs:prg,ds:data

      start:mov ax,data
            mov ds,ax


            mov al,80h
            mov dx,cwr
            out dx,al

  again:mov cx,0006h
            mov bl,00h
            lea si,list

        up:mov al,bl
            mov dx,pc
            out dx,al
            mov al,[si]
            mov dx,pa
            out dx,al
            call delay
            inc si
            inc bl
            loop up

            mov ah,0bh
            int 21h
            or al,al
            jz again
            mov ah,4ch
            int 21h



            delay proc near
             push bx
             push cx
             mov bx,0fffh
 
    vi: mov cx,0fffh

   here:loop here
               dec bx
               jnz vi
               pop cx
               pop bx
               ret
               delay endp

                prg ends
                end start
*********************************THE END***************************************
    Special thanks to….
    Somali bhosale , Indrayani kamat , Hrishikesh kamat.

********************************************************************************