String Manipulation – length, reverse and pallindrome check (Assembly x64)
section .data m db 10,13,”Enter your choice : “,10,”1.Calculate Length.”,10,”2.Reverse the string.”,10,”3.Check if Pallindrome.”,10 ml equ $-m msg db 10 ,”Enter a string : ” msglen equ $-msg msg1 db 10 ,”Length of string is:” msg1len equ $-msg1 msg2 db 10 ,”Reverse string is:” msg2len equ $-msg2 msg3 db 10 ,”String is a Pallindrome!” msg3len equ $-msg3 msg4 db 10 ,”String is not a Pallindrome!” msg4len equ $-msg4 msg5 db 10 ,”Do you want to continue(y/n)? : ” msg5len equ $-msg5 nl db 10 section .bss string resb 50 strl equ $-string str_len resb 40 revstring resb 50 num resb 16 choice resb 2 %macro accept 2 mov rax,0 mov rdi,0 mov rsi,%1 mov rdx,%2 syscall %endmacro %macro display 2 mov rax,1 mov rdi,1 mov rsi,%1 mov rdx,%2 syscall %endmacro section .text global _start _start: display msg,msglen accept string,50 dec rax mov [str_len],rax display m,ml accept choice,2 cmp byte[choice],’1′ je A1 cmp byte[choice],’2′ je A2 cmp byte[choice],’3′ je A2 A1: display msg1,msg1len mov rbx,[str_len] call original_to_ascii jmp conti A2: mov rsi,string mov rdi,revstring mov rcx,[str_len] add rsi,rcx dec rsi l1: mov al,[rsi] mov [rdi],al dec rsi inc rdi loop l1 display msg2,msg2len display revstring,50 display nl,1 cmp byte[choice],’3′ je A3 jmp conti A3: mov rsi,string mov rdi,revstring mov rcx,[str_len] l4: mov al,[rsi] mov bl,[rdi] cmp al,bl je l5 display msg4,msg4len jmp conti l5: inc rsi inc rdi loop l4 display msg3,msg3len display nl,1 conti: display msg5,msg5len accept choice,2 cmp byte[choice],’y’ je _start exit: mov rax,60 mov rbx,0 syscall original_to_ascii : mov rcx,16 mov rdi,num l2: rol bx,4 mov dl,bl and dl,0fh cmp dl,09h jbe l3 add dl,07h l3: add dl,30h mov [rdi],dl inc rdi loop l2 display num,16 ret