Sunday, 19 April 2015

string


section .data
    menu    db 10,"-------MENU------",10
        db "1.ENTER THE STRING",10
        db "2.DISPLAY THE LENGTH OF STRING",10
        db "3.REVERSE THE STRING",10
        db "4.EXIT",10
        db "Enter Your Choice:",10
    menumsglen equ $-menu

    msg1 db "ENTER THE STRING??",10
    msg1len equ $-msg1

    msg2 db "LENGTH OF STRING",10
    msg2len equ $-msg2

    msg3 db "REVERSE STRING IS",10
    msg3len equ $-msg3

    msgdsp db "U ENTERED THE STRING:" ,10
    msgdsplen equ $-msgdsp

section .bss
    str1 resb 20
    str1len: equ $-str1

    strlen1 resb 2

    strrev resb 20
            strrev_len equ $-strrev

    cho resb 2
    chlen: equ $-cho

    displen resb 2
    displength: equ $-displen


%macro disp 2
    mov rax,4                   
    mov ebx,1
    mov ecx,%1
    mov edx,%2
    int 80h
%endmacro

%macro accept 2
    mov rax,3
    mov ebx,0
    mov ecx,%1
    mov edx,%2
    int 80h
%endmacro

section .text
global _start
    _start:

mn:    disp  menu,menumsglen
    accept cho,chlen

 case1:
     cmp byte[cho],'1'        
    jne case2
           disp msg1,msg1len
    accept str1,str1len
   
    disp msgdsp,msgdsplen
    disp str1,str1len         
    dec ax                        
    mov [strlen1],ax           



 case2:
       cmp byte[cho],'2'        
    jne case3
            disp msg2,msg2len
    mov rax,[strlen1]
    call hextoascii

 case3:
     cmp byte[cho],'3'        
            jne case4

            mov rsi,str1              
            xor rcx,rcx                   
    mov cx,[strlen1]          
            add rsi,rcx                  
           dec rsi                      
           mov rdi,strrev            
           mov rbp,rcx
L9:   
           mov al,[rsi]                 
           mov [rdi],al                  
          dec rsi                       
          inc rdi                      
          dec rbp
          jnz L9
         disp msg3,msg3len           
          disp strrev,strrev_len



      

 case4:   
    cmp byte[cho],'4'         
    je ext

jmp mn

   ext: mov eax,1
    mov ebx,0
    int 80h


hextoascii:
    mov rcx,02
    mov rsi,displen+1
   l2:    mov rdx,00
    mov rbx,16
    div rbx
    add dl,30h
    mov [rsi],dl
    dec rsi
    dec rcx
    jnz l2
    disp displen,2   
ret

No comments:

Post a Comment