%macro scall 4 ;general macro with 4 parameters
mov rax,%1
mov rdi,%2
mov rsi,%3
mov rdx,%4
syscall ;call the kernel (interrupt)
%endmacro
section .data
menu db 10d,13d," MENU"
db 10d,"1. Enter the String"
db 10d,"2. Calculate Length of the string"
db 10d,"3. Reverse String"
db 10d,"4. Check Palindrome"
db 10d,"5. Exit"
menulen equ $-menu
m1 db 10d,"Enter String: "
l1 equ $-m1
m2 db 10d,"Length Of String: "
l2 equ $-m2
m3 db 10d,"Reversed String: "
l3 equ $-m3
m4 db 10d,"String is Palindrome!!!"
l4 equ $-m4
m5 db 10d,"String is not Palindrome!!!"
l5 equ $-m5
section .bss
string resb 50
string2 resb 50
length resb 16
answer resb 16
section .text
global _start
_start:
scall 1,1,menu,menulen
scall 1,1,m1,l1 ;Enter String: "
scall 0,0,string,50 ;length is returned in rax
mov [length],rax
scall 1,1,m2,l2 ;Length Of String:
mov rax,[length]
call display ;call procedure
call stringreverse ;call procedure
scall 1,1,m3,l3 ;"Reversed String: "
scall 1,1,string2,[length]
mov rsi,string
mov rdi,string2
mov rcx,[length]
loop3:
mov al,[rsi] ;MADAM
cmp al,[rdi] ;MADAM
jne skip2
inc rsi
inc rdi
dec byte[length]
jnz loop3
scall 1,1,m4,l4 ;String is Palindrome!!!"
jmp exit
skip2:
scall 1,1,m5,l5 ;String is not Palindrome!!!"
exit: ;exit instructions
mov rax,60
mov rdx,0
syscall
;*PROCEDURES*
display: ;hex to ascii-hex
mov rsi,answer+15
mov rcx,16
loop1: mov rdx,0
mov rbx,16
div rbx
cmp dl,09h
jbe skip1
add dl,07h
skip1: add dl,30h
mov [rsi],dl
dec rsi
dec rcx
jnz loop1
scall 1,1,answer,16
ret
stringreverse:
mov rsi,string
mov rdi,string2
mov rcx,[length]
add rdi,rcx
dec rdi
loop2:
mov al,[rsi]
mov [rdi],al
dec rdi
inc rsi
loop loop2
ret
To embed this project on your website, copy the following code and paste it into your website's HTML: