8086 MICROPROCESSORS LAB EXPERIMRNTS.
Note: To test 8086 asm programs download Masm from:
https://www.facebook.com/groups/163904047131828/
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:
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
· 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….
Special thanks to….
Somali
bhosale , Indrayani kamat , Hrishikesh kamat.
********************************************************************************
********************************************************************************