17454201 microprocessor lab manual

129
IGNO PRACTICAL PROGRAMES Simple Assembly language programs: 1. Write a program to add two numbers present in two consecutive memory location and store the result in next memory location. Prg(add2num.asm) Title add two numbers in consecutive memory location dosseg .model small .stack .data msg1 db 13,10,"Sum of two numbers stored in memory:$" num1 db 20h num2 db 15h sum db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax mov al,num1 add al,num2 mov sum,al lea dx,msg1 mov ah,09h int 21h mov dl,sum mov ah,02h int 21h mov ax,4c00h int 21h main endp end Output: Sum of two numbers stored in memory:5

Upload: edward-raja-kumar

Post on 10-Mar-2015

146 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 17454201 Microprocessor LAB MANUAL

IGNO PRACTICAL PROGRAMES

Simple Assembly language programs:

1. Write a program to add two numbers present in two consecutive memory location and store the result in next memory location.

Prg(add2num.asm)

Title add two numbers in consecutive memory locationdosseg .model small .stack .data msg1 db 13,10,"Sum of two numbers stored in memory:$" num1 db 20h num2 db 15h sum db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax

mov al,num1 add al,num2 mov sum,al

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

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

mov ax,4c00h int 21h

main endp end

Output:

Sum of two numbers stored in memory:5

Page 2: 17454201 Microprocessor LAB MANUAL

2. Develop program to read a character from console and echo it.Prg(rdecho.asm)

Title read a character from console and echo it.dosseg .model small .stack .data msg1 db 13,10,"Enter a character:$" msg2 db 13,10,"Read a character from console and echo:$" .code main proc mov ax,@data mov ds,ax

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

mov ah,01h int 21h mov bl,al

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

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

mov ax,4c00h int 21h

main endp end

Output:

Enter a character:wRead a character from console and echo:w

Page 3: 17454201 Microprocessor LAB MANUAL

3. Develop and execute a program to read 10 chars from console.Prg(rd10chr.asm)

Title read a 10 character from console.dosseg .model small .stack .data msg1 db 13,10,"Enter a 10 character:$" .code main proc mov ax,@data mov ds,ax

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

mov cx,00 mov cl,10

rpt: mov ah,01h int 21h mov bl,al loop rpt

mov ax,4c00h int 21h

main endp end

Output:

Enter a 10 character:1234567890

Page 4: 17454201 Microprocessor LAB MANUAL

4. Write a program to exchange two memory variables using MOV and XCHG instruction. Can you do it with just XCHG?Prg(XCHGin.asm)

Title to exchange two memory variables using MOV and XCHG instructiondosseg .model small .stack .data msg1 db 13,10,"First value in memory:$" msg2 db 13,10,"Second value in memory:$" msg3 db 13,10,"After using XCHG instruction:$" msg4 db 13,10,"First value in memory:$" msg5 db 13,10,"Second value in memory:$" value1 db 35h value2 db 32h .code main proc

mov ax,@data mov ds,ax

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

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

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

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

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

;exchanging the value mov al,value1 XCHG value2,al mov value1,al

Page 5: 17454201 Microprocessor LAB MANUAL

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

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

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

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

main endp end

Output:

First value in memory:5Second value in memory:2After using XCHG instruction:First value in memory:2Second value in memory:5

Page 6: 17454201 Microprocessor LAB MANUAL

5. Write a program which will read two decimal numbers, then multiply them together , and finally print out the result (in decimal).Prg(mul2dec.asm)

Title read two decimal number and multiply them and store it in resultdosseg .model small .stack .data msg1 db 13,10,"Enter first number:$" msg2 db 13,10,"Enter second number:$" msg3 db 13,10,"Result:$" num1 db ? num2 db ? sum db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax lea dx,msg1 mov ah,09h int 21h mov ah,01h int 21h sub al,'0' mov num1,al

lea dx,msg2 mov ah,09h int 21h mov ah,01h int 21h sub al,'0' mov bl,al

mov ax,00 mov al,num1 mul bl mov sum,al

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

Page 7: 17454201 Microprocessor LAB MANUAL

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

mov ax,4c00h int 21h

main endp end

Output:

Enter first number:2Enter second number:2Result:♦

Enter first number:7Enter second number:5Result:#

Page 8: 17454201 Microprocessor LAB MANUAL

6. Write a program to convert the ASCII code to its BCD equivalent.Prg(pkdbcd.asm)

Title convert the ASCII code to bcd equivalentdosseg .model small .stack .data msg1 db 13,10,"Enter the first number:$" msg3 db 13,10,"Result of packed bcd:$" bcd db ? first db ? sec db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax

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

mov ax,00 mov ah,01h int 21h sub al,'0' mov bl,al

mov ax,00 mov ah,01h int 21h sub al,'0'

and bl,0Fh and al,0Fh mov cl,04h rol bl,cl or al,bl mov bcd,al

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

Page 9: 17454201 Microprocessor LAB MANUAL

mov dx,00 mov dl,bcd mov ah,02h int 21h

mov ax,4c00h int 21h

main endp end

OUTPUT:Enter first number:35Result of packed bcd:05

Page 10: 17454201 Microprocessor LAB MANUAL

7. Write a program, which will read in two decimal inputs and print out the sum, in decimal.Prg(desum.asm)

Title read 2 decimal number and print there sumdosseg .model small .stack .data msg1 db 13,10,"Enter first number:$" msg2 db 13,10,"Enter second number:$" msg3 db 13,10,"Sum in decimal number:$" num1 db ? sum db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h mov ah,01h int 21h sub al,'0' mov num1,al

lea dx,msg2 mov ah,09h int 21h mov ah,01h int 21h sub al,'0' add al,num1 mov sum,al

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

mov si,offset res mov ax,00 mov al,sum call hex2asc

Page 11: 17454201 Microprocessor LAB MANUAL

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

mov ax,4c00h int 21h

main endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx

Page 12: 17454201 Microprocessor LAB MANUAL

pop ax ret

hex2asc endp

end

OUTPUT:Enter first number:2Enter second number:3Sum in decimal number:05

Enter first number:5Enter second number:6Sum in decimal number:11

Page 13: 17454201 Microprocessor LAB MANUAL

8. Write a program, which will read in two decimal inputs and print out the smaller of the two, in decimal.Prg(desmall.asm)

Title read in two decimal inputs and print out the smaller of the two, in decimaldosseg .model small .stack .data msg1 db 13,10,"Enter the first number:$" msg2 db 13,10,"Enter the second number:$" msg3 db 13,10,"Smaller of two in decimal:$" num1 db ? small db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h mov ah,01h int 21h sub al,'0' mov num1,al

lea dx,msg2 mov ah,09h int 21h mov ah,01h int 21h sub al,'0'

cmp al,num1 jb sma

mov bl,num1 mov small,bl jmp prin

sma :mov small,al

prin:lea dx,msg3 mov ah,09h

Page 14: 17454201 Microprocessor LAB MANUAL

int 21h

mov si,offset res mov ax,00 mov al,small call hex2asc

lea dx,res mov ah,09h int 21h mov ax,4c00h int 21h

main endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

Page 15: 17454201 Microprocessor LAB MANUAL

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp

end

OUTPUT:Enter the first number:5Enter the second number:2Smaller of two in decimal:02

Enter the first number:8Enter the second number:9Smaller of two in decimal:08

Page 16: 17454201 Microprocessor LAB MANUAL

9. Write a program to calculate the average of three given numbers stored in memory.Prg(avgthree.asm)

Title calculate average of three given numbers stored in memorydosseg .model small .stack .data msg1 db 13,10,"Sum of three numbers stored in memory:$" msg2 db 13,10,"Average of three numbers stored in memory:$" num1 db 10h num2 db 10h num3 db 10h sum db ? avg db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax

mov al,num1 add al,num2 add al,num3 mov sum,al

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

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

mov al,sum mov ah,00h mov bl,03 div bl mov avg,al

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

mov dl,avg mov ah,02h

Page 17: 17454201 Microprocessor LAB MANUAL

int 21h mov ax,4c00h int 21h

main endp end

OUTPUT:Sum of three numbers stored in memory:0Average of three numbers stored in memory:►

Page 18: 17454201 Microprocessor LAB MANUAL

10. Write a program in 8086 assembly language to find the volume of sphere using following formula: V = 4/3∏ r^3. Prg(volsph.asm)

Title volume of sphere:dosseg .model small .stack .data msg1 db 13,10,"Enter the radius:$" msg2 db 13,10,"Volume of sphere is:$" num db ? rad dw ? pi dw ? result dw ? res db 10 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

mov cx,2

mov ax,00 mov al,num

mov bx,00 mov bl,num

rpt: mov dx,00 mul bl loop rpt

mov rad,ax

mov ax,00 mov ax,22

mov bx,00 mov bx,7 cwd

Page 19: 17454201 Microprocessor LAB MANUAL

mov dx,00 div bx

mov pi,ax

mov ax,00 mov ax,rad

mov bx,00 mov bx,4

mov dx,00 mul bx

mov result,ax mov ax,00 mov ax,result

mov bx,pi

mov dx,00 mul bx

mov result,ax

mov bx,00 mov bx,3 cwd

mov ax,00 mov ax,result

mov dx,00 div bx

mov result,ax

mov si,offset res call hex2asc

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

lea dx,res

Page 20: 17454201 Microprocessor LAB MANUAL

mov ah,09h int 21h

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax

Page 21: 17454201 Microprocessor LAB MANUAL

inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Enter the radius:02Volume of sphere is:32Enter the radius:04Volume of sphere is:256

Page 22: 17454201 Microprocessor LAB MANUAL

11. Write a program to evaluates 3 * (x ^ 3) + 4x + 5 if flag = = 1 or evaluates 7x + 8 if flag = = 0 . Assume x is a 16 bit unsigned integer.Prg(flope16.asm)

Title program to evaluates 3*(x ^ 3) +4x +5 if flag = 1;or evaluate 7x +8 if flag == 0. Assume x is a 16 bit unsigned integer.dosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program to evaluate 2 functions..:$" msg1 db cr,lf,"1. 7x +8.....................:$" msg2 db cr,lf,"2. 3 * ( x ^ 3 ) + 4x +5.....:$" msg3 db cr,lf,"Enter which function of perform ......:$" msg4 db cr,lf,"Enter number <00> for first function...:$" msg5 db cr,lf,"Enter number <01> for second function...:$" msg6 db cr,lf,"Enter any number to exit................:$" msg7 db cr,lf,"Enter number for selecting function:$" msg8 db cr,lf,"Enter value for x:$" msg9 db cr,lf,"Result for 7x + 8 =$" msg10 db cr,lf,"Result for 3 * (x ^ 3 ) + 4x +5=$" fflag dw ? xnum dw ? xpwr dw ? xnump dw ?

result db 10 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc

mov ax,@data mov ds,ax

mov ah,09h mov dx,offset msg int 21h

mov ah,09h mov dx,offset msg1 int 21h

Page 23: 17454201 Microprocessor LAB MANUAL

mov ah,09h mov dx,offset msg2 int 21h

mov ah,09h mov dx,offset msg3 int 21h

mov ah,09h mov dx,offset msg4 int 21h

mov ah,09h mov dx,offset msg5 int 21h

mov ah,09h mov dx,offset msg6 int 21h

;Read for choisestrt: mov ah,09h mov dx,offset msg7 int 21h call readinteger

mov ax,fflag cmp ax,00 je frt cmp ax,01 je sec jne skip

frt: call first jmp pnxt

sec: call second jmp pnxt

;print result pnxt: mov ax,xnump mov si,offset result call hex2asc

mov ah,09h

Page 24: 17454201 Microprocessor LAB MANUAL

mov dx,offset result int 21h jmp strt

skip: mov ax,4c00h int 21h main endp

readinteger proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov fflag,ax pop ax pop bx pop dx ret

readinteger endp

readinteger1 proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov xnum,ax pop ax pop bx

Page 25: 17454201 Microprocessor LAB MANUAL

pop dx ret

readinteger1 endp

first proc near

mov ax,00 mov bx,00

mov ah,09h mov dx,offset msg8 int 21h call readinteger1

mov bx,07 mov ax,xnum mov dx,00 mul bx add ax,08 mov xnump,ax

mov dx,offset msg9 mov ah,09h int 21h ret

first endp

second proc near

mov ax,00 mov bx,00 mov cx,00

mov ah,09h mov dx,offset msg8 int 21h call readinteger1

mov cx,02 mov bx,xnum mov ax,xnum

pwr: mov dx,00 mul bx

Page 26: 17454201 Microprocessor LAB MANUAL

loop pwr

mov xpwr,ax mov ax,00 mov bx,00 mov bx,03 mov ax,xpwr mov dx,00 mul bx mov xnump,ax

mov ax,00 mov bx,00 mov bx,04 mov ax,xnum

mov dx,00 mul bx

add ax,05 add ax,xnump mov xnump,ax

mov dx,offset msg10 mov ah,09h int 21h ret

second endp atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr

Page 27: 17454201 Microprocessor LAB MANUAL

jne nxtch

;cx=length of the string mov cx,bx dec cx ;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx ;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx mov cx,10 mov ax,bx mul cx mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp

hex2asc proc near

push ax

Page 28: 17454201 Microprocessor LAB MANUAL

push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Page 29: 17454201 Microprocessor LAB MANUAL

Output:

Program to evaluate 2 functions..:1. 7x +8.....................:2. 3 * ( x ^ 3 ) + 4x +5.....:Enter which function of perform ......:Enter number <00> for first function...:Enter number <01> for second function...:Enter any number to exit................:Enter number for selecting function:00Enter value for x:10Result for 7x + 8 =78Enter number for selecting function:01Enter value for x:3Result for 3 * (x ^ 3 ) + 4x +5=98Enter number for selecting function:22

Page 30: 17454201 Microprocessor LAB MANUAL

12. Write a program to convert Centigrade (Celsius ) to Fahrenheit temperature measuring scales. Using formula : Celsius = (Fahrenheit – 32 ) * 5 / 9.

Prg(farcel.asm)

Title convert temperature celsius to Farenheit:dosseg .model small .stack .data msg1 db 13,10,"Enter a number to find fahrenheit temperature:$" msg2 db 13,10,"Fahrenheit Temperature is:$" num db ? res db 10 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

mov bx,00 mov bx,9

mov ax,00 mov al,num

mov dx,00 mul bx

mov bx,5 cwd

div bx add ax,32

mov si,offset res call hex2asc

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

lea dx,res

Page 31: 17454201 Microprocessor LAB MANUAL

mov ah,09h int 21h

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax

Page 32: 17454201 Microprocessor LAB MANUAL

inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Enter a number to find fahrenheit temperature:28Fahrenheit Temperature is:82

Enter a number to find fahrenheit temperature:40Fahrenheit Temperature is:104

Page 33: 17454201 Microprocessor LAB MANUAL

13. Write a Program which adds the sales tax in the Price list of items and replace the price list with a new list.Prg(saltax.asm)

Title adds the sales tax in the price list of items and replace price list with a new list:dosseg .model small .stack .data msg1 db 13,10,"How many numbers:$" msg2 db 13,10,"Enter number between 1 to 99:$" msg3 db 13,10,"Enter Price:$" msg4 db 13,10,"Sales tax 2 rupes for less then 100 rupees:$" msg5 db 13,10,"After add sales tax price list is:$" msg6 db 13,10,"Price number is:$" ntable db 100 DUP(0) num db ? temp db ? res db 20 DUP('$') .code main proc

mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

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

;read all numbers mov si,offset ntable mov ch,00 mov cl,num

nread:lea dx,msg3 mov ah,09h int 21h

call readnum1 mov al,temp mov [si],al

Page 34: 17454201 Microprocessor LAB MANUAL

inc si loop nread

mov si,offset ntable mov cx,00 mov cl,num

sl: mov ax,00 mov al,[si] add al,2 mov [si],al inc si loop sl

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

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

mov cx,00 mov cl,num mov si,offset res mov di,offset ntable rpt: mov ax,00 mov al,[di] call hex2asc

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

lea dx,res mov ah,09h int 21h inc di loop rpt

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h

Page 35: 17454201 Microprocessor LAB MANUAL

int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

readnum1 proc near mov ah,01h int 21h sub al,'0' mov bh,10 mul bh mov temp,al mov ah,01h int 21h sub al,'0' add temp,al ret

readnum1 endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah

Page 36: 17454201 Microprocessor LAB MANUAL

jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

How many numbers:04Enter number between 1 to 99:Enter Price:11Enter Price:22Enter Price:33Enter Price:44Sales tax 2 rupes for less then 100 rupees:After add sales tax price list is:Price number is:13Price number is:24Price number is:35Price number is:46

Page 37: 17454201 Microprocessor LAB MANUAL

Session 5,6,7:Loop and Comparisons:

1. Write a program to find the factorial of decimal number given by user.Prg(fact.asm)

Title factorial of a given numberdosseg .model small .stack .data msg1 db 13,10,"Enter a number to find factorial:$" msg2 db 13,10,"Factorial of given number is:$" num db ? res db 10 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

mov ax,01 mov ch,00 mov cl,num cmp cx,00 je skip

rpt: mov dx,00 mul cx loop rpt

skip:mov si,offset res call hex2asc

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

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

mov ax,4c00h

Page 38: 17454201 Microprocessor LAB MANUAL

int 21h main endp

readnum proc near

mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

Page 39: 17454201 Microprocessor LAB MANUAL

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:Enter a number to find factorial:03Factorial of given number is:06

Enter a number to find factorial:05Factorial of given number is:120

Page 40: 17454201 Microprocessor LAB MANUAL

2. Write a program to find n C r for a given n and rPrg(ncrfact.asm)

Title nCr of a given numberdosseg .model small .stack .data msg1 db 13,10,"Program to compute nCr ...:$" msg2 db 13,10,"Enter n <xx>:$" msg3 db 13,10,"Enter r <xx>:$" msg4 db 13,10,"nCr = :$" n db ? r db ? nmr db ? nf dw ? rf dw ? nmrf dw ? ncr dw ? temp dw ? res db 20 DUP('$') .code main proc

mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h lea dx,msg2 mov ah,09h int 21h call readnum1 ;n=

lea dx,msg3 mov ah,09h int 21h call readnum2 ;r= mov al,n ;nmr = n-r sub al,r mov nmr,al

;compute nf = n!

Page 41: 17454201 Microprocessor LAB MANUAL

mov al,n call fact mov nf,ax

;compute nmrf = (n-r)! mov al,nmr call fact mov nmrf,ax

;compute rf = r! mov al,r call fact mov rf,ax

;temp (n-r)! * r! mov dx,00 mov ax,nmrf mul rf mov temp,ax

;ax = ax(nf)/(nmrf*rf) mov ax,nf div temp mov ncr,ax

;convert ax to ASCII form lea dx,msg4 mov ah,09h int 21h

mov si,offset res mov ax,ncr call hex2asc

lea dx,res mov ah,09h int 21h mov ax,4c00h int 21h main endp

fact proc near

push cx push dx

Page 42: 17454201 Microprocessor LAB MANUAL

mov ch,00 mov cl,al mov ax,01

cmp cx,00 je skip

rpt: mov dx,00 mul cx loop rpt

skip:pop dx pop cx ret

fact endp

readnum1 proc near

mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov n,al mov ah,01h int 21h sub al,'0' add n,al ret

readnum1 endp

readnum2 proc near

mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov r,al mov ah,01h int 21h sub al,'0' add r,al

Page 43: 17454201 Microprocessor LAB MANUAL

ret

readnum2 endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Page 44: 17454201 Microprocessor LAB MANUAL

Output:Program to compute nCr ...:Enter n <xx>:05Enter r <xx>:02nCr = :10

Program to compute nCr ...:Enter n <xx>:06Enter r <xx>:06nCr = :01

Page 45: 17454201 Microprocessor LAB MANUAL

3. Write a program to arrange given n numbers in descending orderPrg(décor.asm)

Title sort(bubble sort) an given array element in descending orderdosseg .model small .stack .data msg1 db 13,10,"How many numbers:$" msg2 db 13,10,"Enter number:$" msg3 db 13,10,"Entered elements are:$" msg4 db 13,10,"Element:$" ntable db 100 DUP(0) num db ? temp db ? count db ? res db 10 DUP('$') .code main proc

mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

;read all numbers mov si,offset ntable mov ch,00 mov cl,num

nread:lea dx,msg2 mov ah,09h int 21h

call readnum1 mov al,temp mov [si],al inc si loop nread

;sorting an array elements mov cx,00 mov cl,num

Page 46: 17454201 Microprocessor LAB MANUAL

cmp cx,01 ;if(num=01)then print array elements je pnxt1

nxtps:mov dx,00 ;flag =false mov bx,00 ;j=1

nxtj: mov al,ntable[bx] mov ah,ntable[bx+1] cmp ah,0 je skip cmp al,ah jge skip

mov ntable[bx],ah mov ntable[bx+1],al mov dl,01

skip: inc bx cmp bx,cx jl nxtj dec cx jz pnxt1 cmp dl,01h je nxtps

;print array elementspnxt1:mov ch,00 mov cl,num mov di,offset ntable mov si,offset res lea dx,msg3 mov ah,09h int 21h

pnxt: lea dx,msg4 mov ah,09h int 21h

mov ah,00 mov al,[di] call hex2asc

lea dx,res mov ah,09h int 21h inc di

Page 47: 17454201 Microprocessor LAB MANUAL

loop pnxt

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

readnum1 proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov temp,al mov ah,01h int 21h sub al,'0' add temp,al ret

readnum1 endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

Page 48: 17454201 Microprocessor LAB MANUAL

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

How many numbers:04Enter number:06Enter number:02Enter number:01Enter number:03Entered elements are:Element:06Element:03Element:02Element:01

Page 49: 17454201 Microprocessor LAB MANUAL

4. Write a program, which will read in decimal inputs repeatedly until a zero value is read; at this point , it should print out the sum of the numbers read in so far.

Prg(sum0.asm)

Title read decimal inputs repeatedly until a zero value is read and print sum of the numbers read in so far:dosseg .model small .stack .data msg1 db 13,10,"Enter number and get the sum untill 00 is read:$" msg2 db 13,10,"Enter number:$" msg3 db 13,10,"Sum is:$" num db ? temp db ? res db 10 DUP('$') .code main proc

mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h ;read numbers mov ax,00 mov temp,al

read: lea dx,msg2 mov ah,09h int 21h call readnum

mov al,num cmp al,00 je ou mov ax,00 mov al,temp add al,num mov temp,al

mov ax,00 mov al,temp mov si,offset res

Page 50: 17454201 Microprocessor LAB MANUAL

call hex2asc

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

lea dx,res mov ah,09h int 21h mov ax,00 mov al,temp jmp read

ou: mov ax,4c00h int 21h main endp

readnum proc near

mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

Page 51: 17454201 Microprocessor LAB MANUAL

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Enter number and get the sum untill 00 is read:Enter number:11Sum is:11Enter number:22Sum is:33Enter number:33Sum is:66Enter number:44Sum is:110Enter number:00

Page 52: 17454201 Microprocessor LAB MANUAL

5. Develop and execute an assembly language program to find the LCM of two 16 bit unsigned integers.Prg(lcm16.asm)

Title program to find lcm of two 16 bit unsigned integers. dosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program for LCM of two positive Integers..:$" msg1 db cr,lf,"Enter numbe1:$" msg2 db cr,lf,"Enter number2:$" msg3 db cr,lf,"LCM=:$" num1 dw ? num2 dw ? gcd dw ? num3 dw ? lcm dw ? res db 10 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc

mov ax,@data mov ds,ax

mov ah,09h mov dx,offset msg int 21h

;Read number1 mov ah,09h mov dx,offset msg1 int 21h call readinteger

;Read number2 mov ah,09h mov dx,offset msg2 int 21h call readinteger1

Page 53: 17454201 Microprocessor LAB MANUAL

;push num1 and num2 into stack mov ax,num1 push ax mov ax,num2 push ax call findgcd add sp,4 ;adjust stack pointer mov gcd,ax ;gcd = findgcd(num[i],num[i+1])

;LCM = (num1*num2)/gcd(num1,num2)

mov ax,num1 mov dx,00 mul num2 div gcd mov lcm,ax

;print LCM mov ah,09h mov dx,offset msg3 int 21h

mov ax,lcm mov si,offset res call hex2asc

mov ah,09h mov dx,offset res int 21h

mov ax,4c00h int 21h main endp

readinteger proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2

Page 54: 17454201 Microprocessor LAB MANUAL

push bx call atoi pop bx mov num1,ax pop ax pop bx pop dx ret

readinteger endp

readinteger1 proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov num2,ax pop ax pop bx pop dx ret

readinteger1 endp

findgcd proc near

push bp mov bp,sp push dx push bx

rpt: mov ax,[bp+4] mov bx,[bp+6]

cmp ax,bx jl skip mov [bp+6],ax

Page 55: 17454201 Microprocessor LAB MANUAL

mov [bp+6],bx

skip: mov dx,00 mov ax,[bp+6] div word ptr[bp+4] ;num2/num1 mov [bp+6],dx cmp dx,00 jne rpt

mov ax,[bp+4] pop bx pop dx pop bp ret

findgcd endp

atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr jne nxtch

;cx=length of the string mov cx,bx dec cx ;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx

Page 56: 17454201 Microprocessor LAB MANUAL

;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx mov cx,10 mov ax,bx mul cx mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

Page 57: 17454201 Microprocessor LAB MANUAL

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Program for LCM of two positive Integers..:Enter numbe1:150Enter number2:75LCM=:150

Page 58: 17454201 Microprocessor LAB MANUAL

6. Write a program for finding largest number in given n numbers.Prg(larnnum.asm)

Title largest in given n numbersdosseg .model small .stack .data msg1 db 13,10,"How many numbers:$" msg2 db 13,10,"Enter number:$" msg3 db 13,10,"Larget number is:$" ntable db 100 DUP(0) num db ? temp db ? res db 10 DUP('$') .code main proc

mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

;read all numbers mov si,offset ntable mov ch,00 mov cl,num

nread:lea dx,msg2 mov ah,09h int 21h

call readnum1 mov al,temp mov [si],al inc si loop nread

mov si,offset ntable mov bl,[si] mov cl,01

nchk: inc si

Page 59: 17454201 Microprocessor LAB MANUAL

cmp cl,num je nomore cmp bl,[si] jge skip mov bl,[si]

skip:inc cl jmp nchk

nomore:mov ah,00 mov al,bl mov si,offset res call hex2asc

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

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

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

readnum endp

readnum1 proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah

Page 60: 17454201 Microprocessor LAB MANUAL

mul bh mov temp,al mov ah,01h int 21h sub al,'0' add temp,al ret

readnum1 endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx

Page 61: 17454201 Microprocessor LAB MANUAL

pop ax ret

hex2asc endp end

Output:

How many numbers:05Enter number:20Enter number:05Enter number:00Enter number:99Enter number:70Larget number is:99

How many numbers:06Enter number:01Enter number:05Enter number:04Enter number:06Enter number:00Enter number:03Larget number is:06

7. Develop and execute a program to sort a given set of 8 bit unsigned integers into ascending order.Prg(ascor.asm)

Title sort(bubble sort) an given array element in ascending orderdosseg .model small .stack .data msg1 db 13,10,"How many numbers:$" msg2 db 13,10,"Enter number:$" msg3 db 13,10,"Sorted elements in ascending order are:$" msg4 db 13,10,"Element:$" ntable db 100 DUP(0) num db ? temp db ? count db ? res db 10 DUP('$') .code main proc

Page 62: 17454201 Microprocessor LAB MANUAL

mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

;read all numbers mov si,offset ntable mov ch,00 mov cl,num

nread:lea dx,msg2 mov ah,09h int 21h

call readnum1 mov al,temp mov [si],al inc si loop nread

;sorting an array elements mov cx,00 mov cl,num cmp cx,01 ;if(num=01)then print array elements je pnxt1

nxtps:mov dx,00 ;flag =false mov bx,00 ;j=1

nxtj: mov al,ntable[bx] mov ah,ntable[bx+1] cmp ah,0 je skip cmp al,ah jle skip

mov ntable[bx],ah mov ntable[bx+1],al mov dl,01

skip: inc bx cmp bx,cx jl nxtj

Page 63: 17454201 Microprocessor LAB MANUAL

dec cx jz pnxt1 cmp dl,01h je nxtps

;print array elementspnxt1:mov ch,00 mov cl,num mov di,offset ntable mov si,offset res lea dx,msg3 mov ah,09h int 21h

pnxt: lea dx,msg4 mov ah,09h int 21h

mov ah,00 mov al,[di] call hex2asc

lea dx,res mov ah,09h int 21h inc di loop pnxt

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

Page 64: 17454201 Microprocessor LAB MANUAL

readnum endp

readnum1 proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov temp,al mov ah,01h int 21h sub al,'0' add temp,al ret

readnum1 endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

Page 65: 17454201 Microprocessor LAB MANUAL

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

How many numbers:04Enter number:04Enter number:03Enter number:02Enter number:01Sorted elements in ascending order are:Element:01Element:02Element:03Element:04

8. Develop and execute an assembly language program to sort a given set of 16 bit unsigned integers into descending order.Prg(decor16.asm)

Title program to sort(bubble sort) a given set of 16 bit unsigned integers into descending order usingdosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program to sort 16 bit number into descending order..:$" msg1 db cr,lf,"Number of Elements:$" msg2 db cr,lf,"Enter Element:$" msg3 db cr,lf,"After sorting.....:$" msg4 db cr,lf,"Elements are.....:$" msg5 db cr,lf,"Element:$"

Page 66: 17454201 Microprocessor LAB MANUAL

count dw ? tab1 dw 20 DUP(0) num dw ? tnum dw ? temp dw ? result db 10 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc

mov ax,@data mov ds,ax

mov ah,09h mov dx,offset msg int 21h

;Read element count mov ah,09h mov dx,offset msg1 int 21h call readinteger

mov cx,count ;cx=count mov bx,02 ;Table Index bx=tab[1]

rdnxt: mov ah,09h mov dx,offset msg2 int 21h call readinteger1

mov ax,tnum mov tab1[bx],ax add bx,2 loop rdnxt

;sorting an array elements mov cx,count ;cx=count add cx,count cmp cx,01 je pnxt

Page 67: 17454201 Microprocessor LAB MANUAL

nxts: mov dx,00 mov bx,02 ;Table Index bx=tab[1]

nxts1: mov ax,tab1[bx+2] mov temp,ax mov ax,tab1[bx] cmp ax,00 je skip cmp ax,temp jge skip

mov tab1[bx+2],ax mov ax,temp mov tab1[bx],ax mov dx,01

skip: inc bx cmp bx,cx jl nxts1 dec cx dec cx jz pnxt cmp dx,01h je nxts

;print result pnxt: mov ah,09h mov dx,offset msg3 int 21h

mov ah,09h mov dx,offset msg4 int 21h

mov cx,count ;cx=count mov bx,02 ;Table Index bx=tab[1]

rdnxt1: mov ah,09h mov dx,offset msg5 int 21h

mov ax,tab1[bx] mov si,offset result call hex2asc

mov ah,09h

Page 68: 17454201 Microprocessor LAB MANUAL

mov dx,offset result int 21h

add bx,2 loop rdnxt1

skip2: mov ax,4c00h int 21h main endp

readinteger proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov count,ax pop ax pop bx pop dx ret

readinteger endp

readinteger1 proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi

Page 69: 17454201 Microprocessor LAB MANUAL

pop bx mov tnum,ax pop ax pop bx pop dx ret

readinteger1 endp

atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr jne nxtch

;cx=length of the string mov cx,bx dec cx ;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx ;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

Page 70: 17454201 Microprocessor LAB MANUAL

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx mov cx,10 mov ax,bx mul cx mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

Page 71: 17454201 Microprocessor LAB MANUAL

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Program to sort 16 bit number into descending order..:Number of Elements:05Enter Element:11Enter Element:44Enter Element:22Enter Element:55Enter Element:33After sorting.....:Elements are.....:Element:55Element:44Element:33Element:22Element:11

9. Write a program which adds the sales tax in the price list of items and replace the price list with calculated values.( Repeated program in session 3 and 4 : Simple assembly programs)

10. Write a program to Convert ASCII number into decimal digit.

Prg(ascdec.asm)

Title convert ASCII to decimal digitdosseg .model small

Page 72: 17454201 Microprocessor LAB MANUAL

.stack .data msg1 db 13,10,"Enter a number:$" msg2 db 13,10,"Decimal number is:$" num db ? res db 10 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h call readnum

skip:mov si,offset res mov ax,00 mov al,num call hex2asc

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

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

mov ax,4c00h int 21h main endp

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov num,al mov ah,01h int 21h sub al,'0' add num,al ret

Page 73: 17454201 Microprocessor LAB MANUAL

readnum endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Page 74: 17454201 Microprocessor LAB MANUAL

Output:

Enter a number:12Decimal number is:12

Page 75: 17454201 Microprocessor LAB MANUAL

11. Write a program for performing the following operation. Z=((A-B)/10*C)*2.Prg(funope.asm)

Title perform the following operation Z = ((A-B)/10 *C)*2dosseg .model small .stack .data msg1 db 13,10,"The following program performs the operation:$" msg2 db 13,10,"Z = ((A-B)/10*C)*2......$" msg3 db 13,10,"Enter the value for A:$" msg4 db 13,10,"Enter the value for B:$" msg5 db 13,10,"Enter the value for C:$" msg6 db 13,10,"Result Z=:$" numa db ? numb db ? numc db ? numab db ? numabc db ? result db ? res db 10 DUP('$') .code main proc mov ax,@data mov ds,ax

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

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

lea dx,msg3 mov ah,09h int 21h call readnum

lea dx,msg4 mov ah,09h int 21h call readnum1

lea dx,msg5 mov ah,09h

Page 76: 17454201 Microprocessor LAB MANUAL

int 21h call readnum2

;numab = (A - B) mov ax,00 mov al,numa sub al,numb cwd mov numab,al

;numabc = (numab)/10*C mov ax,00 mov bx,00 mov bl,0Ah mov al,numab mov dx,00 div bx mov bx,00 mov bl,numc mul bx mov numabc,al

;result=(numabc)*2 mov ax,00 mov al,numabc mov bx,00 mov bl,02 mul bx mov result,al

mov ax,00 mov al,result mov si,offset res call hex2asc

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

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

mov ax,4c00h int 21h main endp

Page 77: 17454201 Microprocessor LAB MANUAL

readnum proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov numa,al mov ah,01h int 21h sub al,'0' add numa,al ret

readnum endp

readnum1 proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov numb,al mov ah,01h int 21h sub al,'0' add numb,al ret

readnum1 endp

readnum2 proc near mov ah,01h int 21h sub al,'0' mov bh,0Ah mul bh mov numc,al mov ah,01h int 21h sub al,'0' add numc,al ret

readnum2 endp

Page 78: 17454201 Microprocessor LAB MANUAL

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Page 79: 17454201 Microprocessor LAB MANUAL

Output:

The following program performs the operation:Z = ((A-B)/10*C)*2......Enter the value for A:30Enter the value for B:10Enter the value for C:10Result Z=:40

Page 80: 17454201 Microprocessor LAB MANUAL

12. Write a program for adding an array of binary digits.Prg(arbinad.asm)

Title program to add array of binary digitsdosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program to add array of binary element....:$" msg1 db cr,lf,"How many elements to enter...............:$" msg2 db cr,lf,"Enter Element:$" msg3 db cr,lf,"After adding array element...............:$" msg4 db cr,lf,"Total=:$"

count dw ? tab1 dw 20 DUP(0) num dw ? tnum dw ? temp dw ? result db 10 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc

mov ax,@data mov ds,ax

mov ah,09h mov dx,offset msg int 21h

;Read element count mov ah,09h mov dx,offset msg1 int 21h call readinteger

mov cx,count ;cx=count mov bx,02 ;Table Index bx=tab[1]

rdnxt: mov ah,09h

Page 81: 17454201 Microprocessor LAB MANUAL

mov dx,offset msg2 int 21h call readinteger1

mov ax,tnum mov tab1[bx],ax add bx,2 loop rdnxt

;adding array element mov cx,count ;cx=count add cx,count cmp cx,01 je pnxt

mov bx,02 mov cx,00 mov cx,count mov dx,00

rpt: mov ax,tab1[bx] add ax,dx mov temp,ax mov dx,temp inc bx inc bx loop rpt ;print result pnxt: mov ah,09h mov dx,offset msg3 int 21h

rdnxt1: mov ah,09h mov dx,offset msg4 int 21h

mov ax,temp mov si,offset result call hex2asc

mov ah,09h mov dx,offset result int 21h

skip2: mov ax,4c00h

Page 82: 17454201 Microprocessor LAB MANUAL

int 21h main endp

readinteger proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov count,ax pop ax pop bx pop dx ret

readinteger endp

readinteger1 proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov tnum,ax pop ax pop bx pop dx ret

readinteger1 endp

Page 83: 17454201 Microprocessor LAB MANUAL

atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr jne nxtch

;cx=length of the string mov cx,bx dec cx ;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx ;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx mov cx,10 mov ax,bx mul cx

Page 84: 17454201 Microprocessor LAB MANUAL

mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

Page 85: 17454201 Microprocessor LAB MANUAL

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Program to add array of binary element....:How many elements to enter...............:02Enter Element:11Enter Element:22After adding array element...............:Total=:33

Program to add array of binary element....:How many elements to enter...............:05Enter Element:1234Enter Element:22Enter Element:134Enter Element:2134Enter Element:5432After adding array element...............:Total=:8956

Page 86: 17454201 Microprocessor LAB MANUAL

13. Write a program, which takes the input of 4 digit number, and display the sum of square of digits as given below.Ex: input = 4721 4 ^2 + 7 ^ 2 + 2 ^ 2 + 1 ^ 2 = 16+49+4+1 Result = 70(Display)

Title program to sum of square of digitsdosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program to sum of square of digits........:$" msg1 db cr,lf,"Enter 4 digits<xxxx>.....................:$" msg2 db cr,lf,"Enter Element:$" msg3 db cr,lf,"After adding digits......................:$" msg4 db cr,lf,"Total=:$"

count dw ? tab1 dw 20 DUP(0) num dw ? tnum dw ? temp dw ? result db 10 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc

mov ax,@data mov ds,ax

mov ah,09h mov dx,offset msg int 21h

mov ah,09h mov dx,offset msg1 int 21h

;Read element count mov ah,09h mov dx,offset msg2

Page 87: 17454201 Microprocessor LAB MANUAL

int 21h call readinteger

mov cx,00 mov temp,cx mov cx,04 rpt: mov bx,00 mov bx,10 mov ax,00 mov ax,num

mov dx,00 div bx mov num,ax mov tnum,dx

mov ax,00 mov bx,00 mov ax,tnum mov bx,tnum mov dx,00 mul bx add ax,temp mov temp,ax mov ax,num loop rpt

;print result mov ah,09h mov dx,offset msg3 int 21h

mov ah,09h mov dx,offset msg4 int 21h

mov ax,temp mov si,offset result call hex2asc

mov ah,09h mov dx,offset result int 21h

skip2: mov ax,4c00h int 21h

Page 88: 17454201 Microprocessor LAB MANUAL

main endp

readinteger proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov num,ax pop ax pop bx pop dx ret

readinteger endp

atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr jne nxtch

;cx=length of the string mov cx,bx dec cx

Page 89: 17454201 Microprocessor LAB MANUAL

;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx ;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx mov cx,10 mov ax,bx mul cx mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h

Page 90: 17454201 Microprocessor LAB MANUAL

mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:Program to sum of square of digits........:Enter 4 digits<xxxx>.....................:Enter Element:3421After adding digits......................:Total=:30

Program to sum of square of digits........:Enter 4 digits<xxxx>.....................:Enter Element:6743After adding digits......................:Total=:110

Page 91: 17454201 Microprocessor LAB MANUAL

14. Write a program which should adds two 5-byte numbers (numbers are stored in array NUM1 and NUM2 ) and stores the sum in another array named RESULT.Prg(ad5bnm.asm)

Title add 5 byte numbers(num1 and num2 array) and stores the sum array named RESULTdosseg .model small .stack .data len equ 05h msg db 13,10,"To calculate sum of 5 byte number stored in memory.....$" msg1 db 13,10,"Element in first array................................$" msg2 db 13,10,"Element is:$" msg3 db 13,10,"Element in second array...............................$" msg4 db 13,10,"Sum is:$" num1 db 31h, 32h, 33h, 34h, 35h num2 db 31h, 32h, 33h, 34h, 35h sum db 6 DUP(0) res db 10 DUP(0) .code main proc mov ax,@data mov ds,ax

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

;print first array element lea dx,msg1 mov ah,09h int 21h

mov cx,00 mov cl,05 mov di,00

nxt: lea dx,msg2 mov ah,09h int 21h

mov dl,num1[di] mov ah,02h

Page 92: 17454201 Microprocessor LAB MANUAL

int 21h inc di loop nxt

;print second array element lea dx,msg3 mov ah,09h int 21h

mov cx,00 mov cl,05 mov si,00

nxt1:lea dx,msg2 mov ah,09h int 21h

mov dl,num2[si] mov ah,02h int 21h inc si loop nxt1

;adding 2 array element mov si,00 mov cx,00 mov cl,05 clc

again:mov al,num1[si] adc al,num2[si] mov sum[si],al inc si loop again

rcl al,01h and al,01h mov sum[si],al

;printing array sum mov cx,00 mov cl,06 mov si,00 lea dx,msg4 mov ah,09h int 21h

Page 93: 17454201 Microprocessor LAB MANUAL

pnxt:mov dl,sum[si] mov ah,02h int 21h inc si loop pnxt

mov ax,4c00h int 21h

main endp end

Output:

To calculate sum of 5 byte number stored in memory.....Element in first array................................Element is:1Element is:2Element is:3Element is:4Element is:5Element in second array...............................Element is:1Element is:2Element is:3Element is:4Element is:5Sum is:bdfhj

Page 94: 17454201 Microprocessor LAB MANUAL

15. Write a program which should convert 4 digits BCD number into its binary equivalent.Prg(bcdbin.asm)

Title convert 4 digit bcd number into its binary equivalentdosseg .model small .stack .data thou equ 3E8h ;1000 =3E8h msg db 13,10,"To convert bcd number of 4 digit:$" msg1 db 13,10,"Stored in memory to binary equivalent:$" msg2 db 13,10,"Hex number for 10 is 0Ah:$" msg3 db 13,10,"Hex number for 100 is 64h:$" msg4 db 13,10,"Hex number for 1000 is 3E8h:$" msg5 db 13,10,"The number stored in memory is 4567h:$" msg6 db 13,10,"Its Hex number is 11D7h:$" msg7 db 13,10,"After converting bcd number to binary number:$" msg8 db 13,10,"Binary number is:$" bcd dw 4567h hex dw ? res db 40 DUP('$') .code main proc

mov ax,@data mov ds,ax

lea dx,msg mov ah,09h int 21h lea dx,msg1 mov ah,09h int 21h

lea dx,msg2 mov ah,09h int 21h lea dx,msg3 mov ah,09h int 21h

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

Page 95: 17454201 Microprocessor LAB MANUAL

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

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

;converting bcd to binary mov ax,bcd mov bx,ax mov al,ah mov bh,bl

mov cl,04 ror ah,cl ror bh,cl and ax,0F0Fh and bx,0F0Fh mov cx,ax

;multiplying the number by 10,100,1000 to set to there place value mov ax,0000h mov al,ch mov di,thou mul di

mov dh,00h mov dl,bl add dx,ax mov ax,0064h mul cl add dx,ax

mov ax,000Ah mul bh add dx,ax

mov hex,dx

;printing the binary number ;its hex value is stored in memory lea dx,msg7 mov ah,09h int 21h

Page 96: 17454201 Microprocessor LAB MANUAL

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

mov ax,00 mov si,offset res mov ax,hex call hex2asc

mov dx,offset res mov ah,09h int 21h

mov ax,4c00h int 21h

main endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

Page 97: 17454201 Microprocessor LAB MANUAL

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

To convert bcd number of 4 digit:Stored in memory to binary equivalent:Hex number for 10 is 0Ah:Hex number for 100 is 64h:Hex number for 1000 is 3E8h:The number stored in memory is 4567h:Its Hex number is 11D7h:After converting bcd number to binary number:Binary number is:4567

Page 98: 17454201 Microprocessor LAB MANUAL

16. Write a program to conduct a binary search on a given sorted array of 16 bit, unsigned integers.Prg(binser.asm)

Title binary search on sorted array of 16 bit,unsigned integerdosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program for Binary search..:$" msg1 db cr,lf,"Number of Elements:$" msg2 db cr,lf,"Enter Element:$" msg3 db cr,lf,"Element to be searched:$" msg4 db cr,lf,"Element found in the list:$" msg5 db cr,lf,"Element Not found in the list:$" msg6 db cr,lf,"Element found at Location:$"

count dw ? tab1 dw 20 DUP(0) num dw ? tnum dw ? result db 10 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc

mov ax,@data mov ds,ax

mov ah,09h mov dx,offset msg int 21h

;Read element count mov ah,09h mov dx,offset msg1 int 21h call readinteger

mov cx,count ;cx=count mov bx,02 ;Table Index bx=tab[1]

Page 99: 17454201 Microprocessor LAB MANUAL

rdnxt: mov ah,09h mov dx,offset msg2 int 21h call readinteger1

mov ax,tnum mov tab1[bx],ax add bx,2 loop rdnxt

mov ah,09h mov dx,offset msg3 int 21h call readinteger2

;performing binary search,cx - low,dx-high,bx-mid mov cx,01 mov dx,countchknxt:cmp cx,dx jg nfound

;bx =mid = (low+high)/2 mov bx,cx add bx,dx shr bx,01

;read data from the table push bx shl bx,01 mov ax,tab1[bx] pop bx

cmp num,ax je found jl lhalf ;low = mid +1 inc bx mov cx,bx jmp skip1

lhalf: dec bx mov dx,bx

skip1: jmp chknxt

Page 100: 17454201 Microprocessor LAB MANUAL

;Data not found in the list nfound:mov ah,09h mov dx,offset msg5 int 21h jmp skip2

;Data found in the list ;location of element is in bx registerfound: mov ah,09h mov dx,offset msg4 int 21h mov ax,bx mov si,offset result call hex2asc

;print result mov ah,09h mov dx,offset msg6 int 21h

mov ah,09h mov dx,offset result int 21h

skip2: mov ax,4c00h int 21h main endp

readinteger proc near push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov count,ax pop ax pop bx pop dx

Page 101: 17454201 Microprocessor LAB MANUAL

ret

readinteger endp

readinteger1 proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov tnum,ax pop ax pop bx pop dx ret

readinteger1 endp

readinteger2 proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov num,ax pop ax pop bx pop dx ret

Page 102: 17454201 Microprocessor LAB MANUAL

readinteger2 endp

atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr jne nxtch

;cx=length of the string mov cx,bx dec cx ;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx ;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx mov cx,10 mov ax,bx

Page 103: 17454201 Microprocessor LAB MANUAL

mul cx mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

Page 104: 17454201 Microprocessor LAB MANUAL

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Program for Binary search..:Number of Elements:05Enter Element:5Enter Element:99Enter Element:250Enter Element:545Enter Element:999Element to be searched:100Element Not found in the list:

Program for Binary search..:Number of Elements:05Enter Element:5Enter Element:99Enter Element:250Enter Element:545Enter Element:999Element to be searched:250Element found in the list:Element found at Location:03

Page 105: 17454201 Microprocessor LAB MANUAL

Session 8:Strings

1) Write a program which takes 2 string as input and display the concatenated string.

Prg(strcon.asm)Title string concatdosseg .model small .stack .data msg1 db 13,10,"Enter a string with dolar symbol as a break:$" msg2 db 13,10,"Enter second string with dolar symbol as a break:$" msg3 db 13,10,"Concated string is:$" strg db 20 DUP(0) .code main proc mov ax,@data mov ds,ax lea di,strg

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

first:mov ah,01h int 21h cmp al,24h je next ; inc di mov [di],al inc di jmp first

next: lea dx,msg2 mov ah,09h int 21h

second:mov ah,01h int 21h cmp al,24h je con ; inc di mov [di],al inc di jmp second

Page 106: 17454201 Microprocessor LAB MANUAL

con : lea dx,msg3 mov ah,09h int 21h lea di,strg dis: mov al,[di] cmp al,0 je ou mov dl,al mov ah,02h int 21h inc di jmp dis

ou: mov ax,4c00h int 21h

main endp end

Output:

Enter a string with dolar symbol as a break:saint$Enter second string with dolar symbol as a break:alosius$Concated string is:saintalosius

Page 107: 17454201 Microprocessor LAB MANUAL

2) Write a program which converts string lower case character to upper case characters and upper case character to lower case characters.

Prg(strul.asm)Title convert string upper case to lower case and lower case to upper casedosseg

.model small .stack .data msg1 db 13,10,"Enter a string with dolar symbol as a break:$" msg2 db 13,10,"Modified string is:$"

buf db 80 DUP(0) revbuf db 80 DUP(0) strlen db ? .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h lea si,buf

read: mov ah,01h int 21h mov [si],al inc si cmp al,24h je check jmp read

check:lea si,buf lea di,revbuf

start:mov al,[si] cmp al,'$' je dis cmp al,60h jb lower cmp al,7Ah jb upper jmp start

Page 108: 17454201 Microprocessor LAB MANUAL

lower:cmp al,40h jb skip cmp al,5Ah jb up

up:add al,20h mov [di],al inc di inc si jmp start

upper:cmp al,60h ja lo

lo: sub al,20h mov [di],al inc di inc si jmp start

skip: mov [di],al inc si inc di jmp start

dis:mov al,'$' mov [di],al lea dx,msg2 mov ah,09h int 21h

lea dx,revbuf mov ah,09h int 21h ou:mov ax,4c00h int 21h main endp end

Output:

Enter a string with dolar symbol as a break:SaiNt$Modified string is:sAInT

Page 109: 17454201 Microprocessor LAB MANUAL

3) Write a program for reversing a given string.

Prg(strrev.asm)Title reversing a stringdosseg .model small .stack .data msg1 db 13,10,"Enter a string with dolar symbol as a break:$" msg2 db 13,10,"Reverse of a string is:$" strg db 20 DUP(0) restr db 20 DUP(0) .code main proc mov ax,@data mov ds,ax mov es,ax

mov di,00

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

read:mov ah,01h int 21h cmp al,24h je next inc di mov strg[di],al jmp read

next: mov si,00

start:cmp di,0 je dmsg2 mov al,strg[di] mov restr[si],al inc si dec di jmp start

dmsg2:lea dx,msg2 mov ah,09h int 21h

Page 110: 17454201 Microprocessor LAB MANUAL

dis:mov al,restr[di] cmp al,0 je ou mov dl,al mov ah,02h int 21h inc di jmp dis ou: mov ax,4c00h int 21h

main endp end

Output:

Enter a string with dolar symbol as a break:saint$Reverse of a string is:tnias

Page 111: 17454201 Microprocessor LAB MANUAL

4) Write a program to determine a given string is a palindrome. If ‘Yes ‘ output the message “The given string is a palindrome”. If ‘NO’ output the message “No it is not a palindrome”.

Prg(strpal.asm)Title string palindromedosseg

.model small .stack .data msg1 db 13,10,"Enter a string with dolar symbol as a break:$" msg2 db 13,10,"Reverse of a given string is:$" msg3 db 13,10,"String length is:$" msg4 db 13,10,"Is Palindrome:$" msg5 db 13,10,"Not a Palindrome:$" buf db 80 DUP(0) revbuf db 80 DUP(0) strlen db ? .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h lea si,buf

read: mov ah,01h int 21h mov [si],al inc si cmp al,24h je cou jmp read

cou: lea si,buf mov bx,00

count:mov al,[si] inc si ;inc bl cmp al,24h je rev inc bx jmp count

Page 112: 17454201 Microprocessor LAB MANUAL

rev: lea di,revbuf lea si,buf add si,bx mov cx,00 mov cx,bx dec si

revst:mov al,[si] mov [di],al dec si inc di loop revst lea di,revbuf lea si,buf add di,bx add si,bx mov al,[si] mov [di],al dis:lea dx,msg2 mov ah,09h int 21h

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

lea si,buf lea di,revbuf mov cx,bx

check:mov al,[si] cmp [di],al jne pal inc di inc si loop check

lea dx,msg4 mov ah,09h int 21h jmp ou

pal:lea dx,msg5 mov ah,09h

Page 113: 17454201 Microprocessor LAB MANUAL

int 21h

ou:mov ax,4c00h int 21h

main endp end

Output:

Enter a string with dolar symbol as a break:srrs$Reverse of a given string is:srrsIs Palindrome:

Page 114: 17454201 Microprocessor LAB MANUAL

5) Write a program to search a character in a given string and calculate the number of occurrence of the character in the given string.Prg(strchr.asm)

Title count character occourence in a stringdosseg

.model small .stack .data msg1 db 13,10,"Enter a string with dolar symbol as a break:$" msg2 db 13,10,"Enter a character to count:$" msg3 db 13,10,"Number of times occoured in a given string:$" buf db 80 DUP(0) chr db 10 DUP('$') strlen db ? res db 10 DUP('$') .code main proc mov ax,@data mov ds,ax

lea dx,msg1 mov ah,09h int 21h mov si,offset buf

read: mov ah,01h int 21h mov [si],al inc si cmp al,24h je next jmp read

next: lea dx,msg2 mov ah,09h int 21h

read1:mov si,offset chr mov ah,01h int 21h mov [si],al inc si mov al,24h mov [si],al

Page 115: 17454201 Microprocessor LAB MANUAL

mov bx,00

mov si,offset buf mov ax,00 mov di,offset chr

check:mov al,[si] cmp al,[di] je count cmp al,'$' je dis inc si jmp check

count:inc bl inc si jmp check dis:mov strlen,bl

lea si,res mov ax,00 mov al,strlen call hex2asc

lea dx,msg3 mov ah,09h int 21h lea dx,res mov ah,09h int 21h ou:mov ax,4c00h int 21h

main endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h

Page 116: 17454201 Microprocessor LAB MANUAL

mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Enter a string with dolar symbol as a break:saintalosius$Enter a character to count:aNumber of times occoured in a given string:02

Page 117: 17454201 Microprocessor LAB MANUAL

Lab Assignment:

1) Write and run an assembly language program that accepts two input values of single ASCII digit each, converts these values to binary and multiplies the two values. The Result is kept in AL register.Prg(2isamul.asm)

Title program to accepts two input values of single ASCII digit,;converts these values to binary and multiplies the two values;Result is kept in AL registerdosseg .model small .stack .data msg db 13,10,"Program to accepts two numbers from single ASCII digit:$" msg1 db 13,10,"Multiply two numbers and store it in AL register:$" msg2 db 13,10,"Enter two values whose result is less then 250:$" msg3 db 13,10,"Enter the two number <xx>:$" msg4 db 13,10,"First number in 10th position is :$" msg5 db 13,10,"Second number in 1th position is:$" msg6 db 13,10,"Result is:$" num1 db ? num2 db ? total db ? res db 20 DUP('$') .code main proc mov ax,@data mov ds,ax

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

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

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

;reading the two number lea dx,msg3 mov ah,09h int 21h

Page 118: 17454201 Microprocessor LAB MANUAL

call readinteger

;printing the two numbers ;printing the first number lea dx,msg4 mov ah,09h int 21h

mov ax,00 mov si,offset res mov al,num1 call hex2asc

mov dx,offset res mov ah,09h int 21h

;printing the second number lea dx,msg5 mov ah,09h int 21h

mov ax,00 mov si,offset res mov al,num2 call hex2asc

mov dx,offset res mov ah,09h int 21h

;multiplying the two numbers mov ax,00 mov bx,00 mov bl,num2 mov al,num1 mul bl mov total,al

;printing the total lea dx,msg6 mov ah,09h int 21h

mov ax,00 mov si,offset res

Page 119: 17454201 Microprocessor LAB MANUAL

mov al,total call hex2asc

mov dx,offset res mov ah,09h int 21h

mov ax,4c00h int 21h

main endp

readinteger proc near mov bx,00 mov bl,10 mov ah,01h int 21h sub al,'0' mul bl mov num1,al

mov ah,01h int 21h sub al,'0' mov num2,al ret

readinteger endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

Page 120: 17454201 Microprocessor LAB MANUAL

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endp end

Output:

Program to accepts two numbers from single ASCII digit:Multiply two numbers and store it in AL register:Enter two values whose result is less then 250:Enter the two number <xx>:23First number in 10th position is :20Second number in 1th position is:03Result is:60

Page 121: 17454201 Microprocessor LAB MANUAL

2) Write and run an assembly program that checks if two strings are identical. Assume that the strings are stored one after the other in the memory. In case the two strings are identical the program output should be IDENTICAL, otherwise the output should be NOT IDENTICAL.Prg(stride.asm)

Title program to check if two string are identical or not.dosseg

.model small .stack .data msg db 13,10,"Program to check two strings entered identical or Not:$" msg1 db 13,10,"End the string with dolor as break symble:$" msg2 db 13,10,"Enter two strings of equal length:$" msg3 db 13,10,"Enter first string:$" msg4 db 13,10,"Enter the second string:$" msg5 db 13,10,"Entered two string are identical:$" msg6 db 13,10,"Entered two string are not identical:$" buf db 80 DUP(0) revbuf db 80 DUP(0) .code main proc mov ax,@data mov ds,ax

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

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

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

;reading first string lea dx,msg3 mov ah,09h int 21h lea si,buf

read: mov ah,01h int 21h mov [si],al

Page 122: 17454201 Microprocessor LAB MANUAL

inc si cmp al,24h je sec jmp read

;reading second stringsec: lea dx,msg4 mov ah,09h int 21h lea si,revbuf

read1: mov ah,01h int 21h mov [si],al inc si cmp al,24h je cou jmp read1

cou: mov bx,00 mov cx,00 lea si,buf

cou1: mov al,[si] inc si cmp al,24h je dis inc bx jmp cou1

dis: lea si,buf lea di,revbuf mov cx,00 mov cx,bx

check:mov al,[si] cmp [di],al jne pal inc di inc si loop check

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

Page 123: 17454201 Microprocessor LAB MANUAL

jmp ou

pal:lea dx,msg6 mov ah,09h int 21h

ou:mov ax,4c00h int 21h

main endp end

Output:

Program to check two strings entered identical or Not:End the string with dolor as break symble:Enter two strings of equal length:Enter first string:saint$Enter the second string:saint$Entered two string are identical:F:\masm>stride

Program to check two strings entered identical or Not:End the string with dolor as break symble:Enter two strings of equal length:Enter first string:staint$Enter the second string:saint$Entered two string are not identical:

3) Write and run a assembly subroutine that multiplies two numbers passed to it as parameters. You must write and run the appropriate main program that calls the subroutine.Prg(submul.asm)

Title program to multiply two numbers passed as parameterdosseg .model small .stack .data cr equ 0dh lf equ 0ah msg db cr,lf,"Program to multiply two number passed as paramets to subfunction....:$" msg1 db cr,lf,"Enter firs numbe:$" msg2 db cr,lf,"Enter second number:$" msg3 db cr,lf,"After multiply the two number.......................:$" msg4 db cr,lf,"Total=:$" num1 dw ?

Page 124: 17454201 Microprocessor LAB MANUAL

num2 dw ? total dw ? result db 30 DUP(0)

buff db 80 db 0 db 80 DUP(?) .code main proc mov ax,@data mov ds,ax

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

lea dx,msg1 mov ah,09h int 21h call readinteger

lea dx,msg2 mov ah,09h int 21h call readinteger1

;multiplying the two numbers lea dx,msg3 mov ah,09h int 21h

call multiple

;printing the total lea dx,msg4 mov ah,09h int 21h

mov ax,00 mov si,offset result mov ax,total call hex2asc

mov dx,offset result mov ah,09h int 21h

Page 125: 17454201 Microprocessor LAB MANUAL

mov ax,4c00h int 21h

main endp

readinteger proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov num1,ax pop ax pop bx pop dx ret

readinteger endp

readinteger1 proc near

push dx push bx push ax

mov ah,0ah mov dx,offset buff int 21h mov bx,offset buff add bx,2 push bx call atoi pop bx mov num2,ax pop ax pop bx pop dx

Page 126: 17454201 Microprocessor LAB MANUAL

ret

readinteger1 endp

atoi proc near

push bp mov bp,sp push si push dx push cx push bx

mov si,[bp+4] ;finding the length of the string mov bx,00

nxtch: mov al,[si] inc bx inc si cmp al,cr jne nxtch

;cx=length of the string mov cx,bx dec cx ;si is pointing outside the string so adjust dec si mov dx,00 mov bx,01

nxt: dec si push dx ;dx:ax=digit xor dx,dx mov ah,00 mov al,[si] sub al,'0' mul bx pop dx add dx,ax

;generate multiples bx=10,100,1000.... push dx push cx xor dx,dx

Page 127: 17454201 Microprocessor LAB MANUAL

mov cx,10 mov ax,bx mul cx mov bx,ax pop cx pop dx loop nxt

mov ax,dx pop bx pop cx pop dx pop si pop bp ret atoi endp

hex2asc proc near

push ax push bx push cx push dx push si mov cx,00h mov bx,0Ah

rpt1: mov dx,00 div bx

add dl,'0' push dx

inc cx cmp ax,0Ah jge rpt1

add al,'0' mov [si],al

rpt2: pop ax inc si mov [si],al loop rpt2

Page 128: 17454201 Microprocessor LAB MANUAL

inc si mov al,'$' mov [si],al

pop si pop dx pop cx pop bx pop ax ret

hex2asc endpmultiple proc near mov ax,num1 mov bx,num2 mul bx mov total,ax retmultiple endp endOutput:

Program to multiply two number passed as paramets to subfunction....:Enter firs numbe:10Enter second number:10After multiply the two number.......................:Total=:100Program to multiply two number passed as paramets to subfunction....:Enter firs numbe:20Enter second number:20After multiply the two number.......................:Total=:400

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>END<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Page 129: 17454201 Microprocessor LAB MANUAL

5. Write a program to find the sum of two BCD numbers stored in memory.(Repeat of programe 1 in session 3 and 4 :Simple assembly program)6. Develop and execute an assembly language program to find the HCF of two unsigned 16 bit numbers.7. Write a program to convert a string in upper case to lower case of lower case to upper case.( Repeated in session 8: Strings)