String manupulation program

download String manupulation program

of 60

description

(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

Transcript of String manupulation program

  • 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