You are on page 1of 60

PROJECT REPORT

STRING MANIPULATION FUNCTION




SUBMITED BY:
Parth Khatwani
SUBMITTED TO:
Sandeep Sir


DHARAMSINH DESAI UNIVERSITY
FACULTY OF TECHNOLOGY



Department of Information Technology
Faculty of Technology, Dharamsinh Desai University
College Road, Nadiad-387001
Year 2010-2011



DHARAMSINH DESAI UNIVERSITY
FACULTY OF TECHNOLOGY



DEPARTMENT OF INFORMATION TECHNOLOGY

CERTIFICATE
This is to certify that Parth Khatwani(it_40) student of B.E.
I.T. Semester V of DHARAMSINH DESAI UNIVERSITY, NADIAD
have successfully completed his term project in subject ADVANCED
MICROPROCESSOR ARCHITECTURE during the academic year
2010-11. During the whole term he was found sincere, hardworking and
punctual. He made String Manipulation Functions


Staff in Charge Head Of Department

Date :

Date :





INDEX
Introduction
Acknowledgement
Source code
Program output
Bios Function
Bibliography








INTRODUCTION
0F
PROJECT
THIS PROJECT HAS NINE FUNCTIONALITIES
(1)CONVERT INTO REVRSE STRING
(2)STRING LENGTH
(3)STRING CONCATATION
(4)PALINDROME CHECK
(5)STRING COMPARISION
(6)STRING ENCRYPTION
(7)COUNT OCCURANCE OF A WORD
(8)FIND FIRST AND LAST CHARACTER OF THE STRING
(9)SWAP THE CASE OF STRING
ACKNOWLEDGEMENT

It is really a great pleasure for us to transform an entire concept into a reality
project. This Project has indeed helped us to grasp the theory aspects from
practical perspective and know clearly the difference existing between them. It has
also increased out trouble shooting skills.
It was, though a firsthand experience in project building, it inculcated in us a great
awareness in all the stages of project building right from building the algorithms
until implementation in programming language which could never have been
accomplished in class rooms.
I would like sincerely express our gratitude to all faculty members who directly or
indirectly guided us through the project and without whom this project would
never have been turned into a reality. I would specially like to thank our term
project faculty, Sandeep Sir for meeting all out technical requirements and
providing her valuable time apart from lab hours.
Last but not the least I am also thankful to our department head of department for
keeping such a term project as a part of our academic curriculum.
SOURCE CODE
MENU MODULE:
;######## STRING OPERATIONS ########
prnstr macro msg
mov ah,09h
lea dx,msg
int 21h
endm
procedures SEGMENT PUBLIC
EXTRN SREV:far
extrn ccat:far
EXTRN len:far
EXTRN UTL:far
EXTRN unp:far
extrn coo:far
extrn fnl:far
EXTRN cCMP:FAR
extrn en1:far
procedures ends

data segment


msg1 db 0DH,0AH,'Enter choice::$'
msg2 db 0DH,0AH,'0)REV::::$'
msg3 db 0DH,0AH,'1)str_leN::$'
MSG4 DB 0DH,0AH,'2)UTL::::$'
msg5 db 0DH,0AH,'3)FNL::::$'
msg6 db 0DH,0AH,'4)concat::::$'
msg7 db 0DH,0AH,'5)COMPARE::::$'
msg8 db 0DH,0AH,'6)ENCRYPT::::$'
MSG9 DB 0DH,0AH,'7)COUNTAO::::$'
MSG10 DB 0DH,0AH,'8)PDL::::$'
msg12 db 0DH,0AH,'thnk uu$'
nwl db 10,13,'$'


flag DB 0
data ends

code segment

assume cs:code,ds:data
start:
mov ax, 3h ; CLEARING SCREEN
int 10h

mov ax,data
mov ds,ax




PRNSTR MSG2
PRNSTR MSG3
PRNSTR MSG4
PRNSTR MSG5
PRNSTR MSG6
PRNSTR MSG7
PRNSTR MSG8
PRNSTR MSG9
PRNSTR MSG10

prnstr msg1
prnstr nwl

mov ah,01h
int 21h


cmp al,30h
je REVL


cmp al,31h
je strlenL


cmp al,32h
je UTLL


cmp al,33h
je FNLL


cmp al,34h
je concatL


cmp al,35h
je STCMPL

cmp al,36h
je ENCRYPTL

cmp al,37h
je COUNTAOL

cmp al,38h
je PDL





strlenL: call len
jmp stop_program



UTLl: call UTL
jmp stop_program


STCMPL: call cCMP
JMP STOP_PROGRAM


REVL: CALL sREV
JMP STOP_PROGRAM

FNLl: CALL FNL
JMP STOP_PROGRAM

COUNTAOL: CALL COO
JMP STOP_PROGRAM

ENCRYPTL: CALL EN1
JMP STOP_PROGRAM


CONCATL: CALL CCAT
JMP STOP_PROGRAM

PDL: CALL unp
JMP STOP_PROGRAM


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

int 3h


code ends
end start
CONCAT MODULE:

data segment
STR1 DB 50 DUP(0)
MSG22 db,0ah,0dh," ENTER ONE STRING :$"
MSG222 db,0ah,0dh," ENTER SECOND STRING:$"
MSG2222 db,0ah,0dh," CONCATATION IS:$"
STR2 DB 50 DUP(0)
data ends


CODE SEGMENT
ASSUME CS: CODE,DS:DATA
start: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,09
MOV DX,OFFSET MSG22
INT 21H
mov [STR1],50
MOV DX,offset STR1
MOV Ah,0ah
INT 21H
MOV AH,09
MOV DX,OFFSET MSG222
INT 21H
mov [STR2],50
MOV DX,offset STR2
MOV Ah,0ah
INT 21H
LEA DI,STR1
INC DI
MOV CL,[DI]
INC DI
SUB CH,CH
ADD DI,CX
LEA SI,STR2
INC SI
MOV CL,[SI]
INC SI
SUB CH,CH
CLD
REP MOVSB
LEA SI,STR2
INC SI
MOV CL,[SI]
LEA SI,STR1
INC SI
MOV CH,[SI]
ADD CL,CH
MOV [SI],CL
INC SI
SUB CH,CH
ADD SI,CX
MOV [SI],'$'
MOV AH,09
MOV DX,OFFSET MSG2222
INT 21H
MOV AH,09H
MOV DX,OFFSET STR1
ADD DX,2
INT 21H
code ends
end start
REVRSE MODULE:
prnstr macro msg
mov ah, 09h
lea dx, msg
int 21h
endm
data segment
buf1 db "Enter a string : $"
buf2 db 0ah, "Reversed String : $"

buf3 db 41
db 0
db 41 dup(' ')
data ends

stack_str segment stack
db 40 dup(0)
stack_top label word
stack_str ends

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


mov ax, stack_str
mov ss, ax
mov sp, offset stack_top

prnstr buf1

mov ah, 0ah
lea dx, buf3
int 21h

mov si, offset buf3 + 2
mov cl, byte ptr [si-1]
mov ch, 00h
mov ah, 00h
again :
mov al, byte ptr [si]
push ax
inc si
loop again

mov si, offset buf3 + 2
mov cl, byte ptr [si-1]
mov ah, 00h
next :
pop ax
mov byte ptr [si], al
inc si
loop next

mov byte ptr [si], '$'
prnstr buf2
prnstr buf3+2
mov ax, 4c00h
int 21h
code ends
end start
COMPARE MODULE:
DATA SEGMENT
STR1 DB "ENTER FIRST STRING HERE ->$"
STR2 DB "ENTER SECOND STRING HERE ->$"
STR11 DB "FIRST STRING : ->$"
STR22 DB "SECOND STRING: ->$"

INSTR1 DB 20 DUP("$")
INSTR2 DB 20 DUP("$")
NEWLINE DB 10,13,"$"
N DB ?
S DB ?
MSG1 DB "BOTH STRING ARE SAME$"
MSG2 DB "BOTH STRING ARE DIFFERENT$"

DATA ENDS

CODE SEGMENT

ASSUME DS:DATA,CS:CODE
START:

MOV AX,DATA
MOV DS,AX

LEA SI,INSTR1
LEA DI,INSTR2

;GET STRING
MOV AH,09H
LEA DX,STR1
INT 21H

MOV AH,0AH
MOV DX,SI
INT 21H


MOV AH,09H
LEA DX,NEWLINE
INT 21H

MOV AH,09H
LEA DX,STR2
INT 21H

MOV AH,0AH
MOV DX,DI
INT 21H


MOV AH,09H
LEA DX,NEWLINE
INT 21H


;PRINT THE STRING

MOV AH,09H
LEA DX,STR11
INT 21H

MOV AH,09H
LEA DX,INSTR1+2
INT 21H

MOV AH,09H
LEA DX,NEWLINE
INT 21H

MOV AH,09H
LEA DX,STR22
INT 21H

MOV AH,09H
LEA DX,INSTR2+2
INT 21H

MOV AH,09H
LEA DX,NEWLINE
INT 21H

;STRING COMPARISION
MOV BX,00

MOV BL,INSTR1+1
MOV BH,INSTR2+1

CMP BL,BH
JNE L1

ADD SI,2
ADD DI,2

L2:MOV BL,BYTE PTR[SI]
CMP BYTE PTR[DI],BL
JNE L1
INC SI
INC DI
CMP BYTE PTR[DI],"$"
JNE L2

MOV AH,09H
LEA DX,MSG1
INT 21H

JMP L5

L1:MOV AH,09H
LEA DX,MSG2
INT 21H



L5:
MOV AH,09H
LEA DX,NEWLINE
INT 21H

MOV AH,4CH
INT 21H


CODE ENDS
END START
LENGTH MODULE:
DATA SEGMENT
STR1 DB "ENTER YOUR STRING HERE ->$"
STR2 DB "YOUR STRING IS ->$"
STR3 DB "LENGTH OF STRING IS(DIRECT) ->$"
STR4 DB "LENGTH OF STRING IS(COUNT) ->$"
INSTR1 DB 20 DUP("$")
NEWLINE DB 10,13,"$"
LN DB 5 DUP("$")
N DB "$"
S DB ?

DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:

MOV AX,DATA
MOV DS,AX

LEA SI,INSTR1

;GET STRING
MOV AH,09H
LEA DX,STR1
INT 21H

MOV AH,0AH
MOV DX,SI
INT 21H


MOV AH,09H
LEA DX,NEWLINE
INT 21H

;PRINT THE STRING

MOV AH,09H
LEA DX,STR2
INT 21H

MOV AH,09H
LEA DX,INSTR1+2
INT 21H

MOV AH,09H
LEA DX,NEWLINE
INT 21H

;PRINT LENGTH OF STRING (DIRECT)
MOV AH,09H
LEA DX,STR3
INT 21H

MOV BL,INSTR1+1

ADD BL,30H
MOV AH,02H
MOV DL,BL
INT 21H

MOV AH,09H
LEA DX,NEWLINE
INT 21H


;PRINT LENGTH OF STRING ANOTHER WAY

MOV AH,09H
LEA DX,STR4
INT 21H

ADD SI,1
MOV AX,00


L2:CMP BYTE PTR[SI],"$"
JE L1
INC SI
ADD AL,1
JMP L2

L1:;SUB AL,1
ADD AL,30H

MOV AH,02H
MOV DL,AL
INT 21H


MOV AH,4CH
INT 21H


CODE ENDS
END START
PALINDROME CHECK MODULE:
prnstr macro msg
mov ah, 09h
lea dx, msg
int 21h
endm
data segment
buf1 db "Enter a string : $"
buf2 db 0ah, "Reversed String : $"
buf3 db 41
db 0
db 41 dup(' ')
buf4 db 41
msg1 db "is palindrome :$"
msg2 db "not a palindromre:$"


newline db 10,13,'$'
data ends

stack_str segment stack
db 40 dup(0)
stack_top label word
stack_str ends

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


mov ax, stack_str
mov ss, ax
mov sp, offset stack_top

prnstr buf1

mov ah, 0ah
lea dx, buf3
int 21h

prnstr newline
prnstr buf1

mov ah, 0ah
lea dx, buf4
int 21h


mov si, offset buf3 + 2
mov cl, byte ptr [si-1]
mov ch, 00h
mov ah, 00h
again :
mov al, byte ptr [si]
push ax
inc si
loop again

mov si, offset buf3 + 2
mov cl, byte ptr [si-1]
mov ah, 00h
next :
pop ax
mov byte ptr [si], al
inc si
loop next

mov byte ptr [si], '$'
prnstr buf2
prnstr buf3+2
prnstr newline



LEA SI,buf3
INC SI
MOV AL,[SI]
MOV AH,00H
MOV BX,SI
ADD BX,AX
MOV CL,02
DIV CL
MOV CL,AL
MOV CH,00H
INC SI
NEXT1:
MOV DL,[BX]
CMP DL,[SI]
JNZ NOTPAL1
INC SI
DEC BX
LOOP NEXT1
MOV AH,09
LEA DX,MSG1
INT 21H
jmp o
NOTPAL1:
MOV AH,09
LEA DX,MSG2
INT 21H


o: prnstr newline




mov ax, 4c00h
int 21h
code ends
end start
ENCRYPT MODULE:
prnstr macro msg
mov ah, 09h
lea dx, msg
int 21h
endm
data segment
msg1 db "Enter a string which you want to encrypt ->$"
INSTR1 DB 20 DUP("$")
key db 5 dup("$")
msg2 db "you have entered ->$"
msg3 db "encrypted string is ->$"
msg4 db "decrypted string is ->$"
msg5 db "enter the encrypt foctor ->$" ;value db 'sanjay', '$'
NEWLINE DB 10,13,"$"
db 9 dup (?)
encrypt db 7 dup (?)
db 9 dup (?)
decrypt db 7 dup (?)
data ends

code segment
assume ds:data,cs:code
begin:
mov ax, data
mov ds, ax
lea si,instr1
prnstr msg1
MOV AH,0AH ;for string input 0A
MOV DX,SI
INT 21H


MOV AH,09H
LEA DX,NEWLINE
INT 21H





prnstr msg2
prnstr instr1+2

prnstr msg5
mov ah,00h
mov ah,01
int 21h
sub al,30h
mov key,al

lea si, instr1+2
lea di, encrypt




counter1:
mov ah, 0000h
mov al, [si]
add al, key
mov [di], al
inc di
inc si
cmp byte ptr[si],"$"
jne counter1
mov [di], '$'

; mov ah, 09h
;lea dx, encrypt
; int 21h
prnstr newline
prnstr msg3
prnstr encrypt
lea si, encrypt
lea di, decrypt




counter2:
mov ah, 0000h
mov al, [si]
sub al,key
mov [di], al
inc di
inc si
cmp byte ptr[si],"$"
jne counter2

mov [di], '$'
prnstr newline
prnstr msg4
prnstr decrypt
; mov ah, 09h
; lea dx, decrypt
; int 21h
int 03h
code ends
end begin
SWAP THE CASE MODULE:
DATA SEGMENT

MSG DB 0DH,0AH, ' ENTER THE STRING :-----> : $'
MSG2 DB 0DH,0AH,' YOUR STRING IS :-----> : $'
STR1 DB 255 DUP(?)
ONE DB ?
TWO DB ?

DATA ENDS


public utl
procedures segment public
utl proc far

ASSUME CS:procedures,DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX

LEA DX,MSG
MOV AH,09H
INT 21H

LEA SI,STR1
MOV AH,01H

READ : INT 21H
MOV BL,AL

CMP AL,0DH
JE DISPLAY

XOR AL,20H
MOV [SI],AL
INC SI

CMP BL,0DH
JMP READ



DISPLAY:

MOV AL,'$'
MOV [SI],AL

LEA DX,MSG2
MOV AH,09H
INT 21H


LEA DX,STR1
MOV AH,09H
INT 21H



MOV AH,4CH
INT 21H
int 03h
utl endp


procedures ENDS
END BEGIN
COUNT THE OCCURANCE MODULE
prnstr LE:macro msg
mov ah, 09h
lea dx, msg
int 21h
endm
DATA SEGMENT
MSG1 DB "ENTER THE STRING : $"
msg2 db "enter the char to find:$"

MSG3 DB "NO OF OCCURANCES OF entered char is : $"
NEWLINE DB 10,13,'$'
STR1 DB 150 DUP('$')
CNT DB 0
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START :
MOV AX,DATA
MOV DS,AX

prnstr msg1

MOV AH,0AH
LEA DX,STR1
INT 21H

prnstr newline
prnstr msg2
MOV AH,0AH
MOV DX,SI
INT 21H
; mov character,al

LEA SI,STR1+1
MOV CL,BYTE PTR[SI]
MOV CH,00H

L1 : INC SI

CMP BYTE PTR[SI],'a'

JNZ L2
INC CNT
L2 : LOOP L1

ADD CNT,'0'

MOV AH,09H
LEA DX,MSG3
INT 21H

MOV AH,02H
MOV DH,00H
MOV DL,CNT
INT 21H

MOV AH,4CH
INT 21H
CODE ENDS
END START
FIRST AND LAST CHAR MODULE:
DATA SEGMENT
STR1 DB "ENTER YOUR STRING HERE ->$"
STR2 DB "YOUR STRING IS ->$"
STR3 DB "FIRST CHARACTER IS ->$"
STR4 DB "LAST CHARACTER IS ->$"
INSTR1 DB 20 DUP("$")
NEWLINE DB 10,13,"$"
N DB "$"
S DB ?

DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:

MOV AX,DATA
MOV DS,AX

LEA SI,INSTR1

;GET STRING
MOV AH,09H
LEA DX,STR1
INT 21H

MOV AH,0AH
MOV DX,SI
INT 21H


MOV AH,09H
LEA DX,NEWLINE
INT 21H

;PRINT THE STRING

MOV AH,09H
LEA DX,STR2
INT 21H

MOV AH,09H
LEA DX,INSTR1+2
INT 21H

MOV AH,09H
LEA DX,NEWLINE
INT 21H

;PRINT FIRST CHARACTER OF STRING

MOV AH,09H
LEA DX,STR3
INT 21H

MOV AH,02H
MOV DL,INSTR1+2
INT 21H

MOV AH,09H
LEA DX,NEWLINE
INT 21H

;PRINT LAST CHARACTER OF STRING

MOV AH,09H
LEA DX,STR4
INT 21H

ADD SI,3

L1:
DEC SI
MOV BL,BYTE PTR[SI]

; MOV AH,09H
; LEA DX,NEWLINE
; INT 21H

; MOV AH,02H
; MOV DL,BL
; INT 21H

; ADD SI,2
CMP BYTE PTR[SI],"$"
JNE L1

MOV AH,02H
MOV DL,BL
INT 21H

MOV AH,4CH
INT 21H


CODE ENDS
END START
SCREEN SHOTS
menu:




reverse:

concat:


compare:

len:


BIOS FUNCTIONS

INT 21h / AH=1
Read character from standard input, with echo, result is stored in AL.
if there is no character in the keyboard buffer, the function waits until any key is
pressed.

Example:

MOV AH, 1
INT 21H


INT 21h / AH=2
Write character to standard output.
DL = character to write, after execution AL = DL.

Example:

MOV AH, 2
MOV DL, 'A'
INT 21H


INT 21h / AH=9
Output of a string at DS: DX. String must be terminated by '$'.

Example:

ORG 100H
MOV DX, OFFSET MSG
MOV AH, 9
INT 21H
RET
MSG DB "HELLO WORLD $"


INT 21h / AH=0Ah
Input of a string to DS: DX, fist byte is buffer size; second byte is number of chars
actually read. This function does not add '$' in the end of string. To print using
INT 21h / AH=9 you must set dollar character at the end of it and start printing
from address DS: DX + 2.

Example:

ORG 100H
MOV DX, OFFSET BUFFER
MOV AH, 0AH
INT 21H
JMP PRINT
BUFFER DB 10 ? 10 DUP (' ')
PRINT:
XOR BX, BX
MOV BL, BUFFER[1]
MOV BUFFER[BX+2], '$'
MOV DX, OFFSET BUFFER + 2
MOV AH, 9
INT 21H
RET
The function does not allow to enter more characters than the specified
buffer size.






BIBILOGRAPHY
Reference books:
1) Microprocessors and Interfacing programming and hardware
By: DOUGLAS V.HALL
2) Microprocessor and architecture of 8085
By: RAMESH S.GAONKAR

You might also like