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