Overlap Data Transfer:
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro read 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
SECTION .data
msg : db "The destination data::",0xA
len : equ $-msg
msg1 : db "The Source data::",0xA
len1 : equ $-msg1
msg3 : db "Successfully Moved::",0xA
len3 : equ $-msg3
msg4 : db "Enter the six chracters::",0xA
len4 : equ $-msg4
msg5 : db "Enter the chracter::",0xA
len5 : equ $-msg5
msg6 : db "--------------------------->>"
len6 : equ $-msg6
msg7 : db "Enter the offset (between 1 to 5):"
len7: equ $-msg7
menu : db 0xA,"1)Display source",0xA,"2)Display Destination",0xA,"3)Move data ",0xA,"4)Exit",0xA
lmenu : equ $-menu
SECTION .bss
characters: resq 30
count: resb 1
count1: resb 1
count2: resb 1
choice: resb 2
address: resb 16
number: resb 2
SECTION .text
print msg4,len4
mov byte[count],8
mov rbx,characters
acceptI:
print msg5,len5
read rbx,8
add rbx,8
dec byte[count]
jnz acceptI
;print msg7,len7
;read number,2
;mov al,[number]
menuprint:
print menu,lmenu
read choice,2
cmp byte[choice],31h
je DisplaySource
cmp byte[choice],32h
je DisplayDest
cmp byte[choice],33h
je MoveRegister
cmp byte[choice],34h
je Exit
DisplaySource:
print msg1,len1
mov byte[count],8
mov rbx,characters
displayI:
call convert_Result
print address,16
;mov [address],rdx
print msg6,len6
print rbx,8
;call convert_Result
add rbx,8
dec byte[count]
jnz displayI
jmp menuprint
DisplayDest:
print msg,len
mov byte[count],8
mov rbx,characters
displayI2:
call convert_Result
print address,16
print msg6,len6
print rbx,8
add rbx,8
dec byte[count]
jnz displayI2
jmp menuprint
MoveRegister:
mov esi,characters+4
mov edi,characters+7
mov byte[count],05
next1:
mov al,[esi]
mov [edi],al
dec esi
dec edi
dec byte[count]
jnz next1
;jmp DisplayDest
jmp menuprint
Exit:
mov rax,60
mov rdi,00
syscall
convert_Result:
mov rsi,address
mov rcx,10h
loopx:
rol rbx,04
mov al,bl
and al,0Fh
cmp al,09h
jbe loopx1
add al,07h
loopx1:
add al,30h
mov [rsi],al
inc rsi
loop loopx
;print address,8
RET
%macro print 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro read 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
SECTION .data
msg : db "The destination data::",0xA
len : equ $-msg
msg1 : db "The Source data::",0xA
len1 : equ $-msg1
msg3 : db "Successfully Moved::",0xA
len3 : equ $-msg3
msg4 : db "Enter the six chracters::",0xA
len4 : equ $-msg4
msg5 : db "Enter the chracter::",0xA
len5 : equ $-msg5
msg6 : db "--------------------------->>"
len6 : equ $-msg6
msg7 : db "Enter the offset (between 1 to 5):"
len7: equ $-msg7
menu : db 0xA,"1)Display source",0xA,"2)Display Destination",0xA,"3)Move data ",0xA,"4)Exit",0xA
lmenu : equ $-menu
SECTION .bss
characters: resq 30
count: resb 1
count1: resb 1
count2: resb 1
choice: resb 2
address: resb 16
number: resb 2
SECTION .text
print msg4,len4
mov byte[count],8
mov rbx,characters
acceptI:
print msg5,len5
read rbx,8
add rbx,8
dec byte[count]
jnz acceptI
;print msg7,len7
;read number,2
;mov al,[number]
menuprint:
print menu,lmenu
read choice,2
cmp byte[choice],31h
je DisplaySource
cmp byte[choice],32h
je DisplayDest
cmp byte[choice],33h
je MoveRegister
cmp byte[choice],34h
je Exit
DisplaySource:
print msg1,len1
mov byte[count],8
mov rbx,characters
displayI:
call convert_Result
print address,16
;mov [address],rdx
print msg6,len6
print rbx,8
;call convert_Result
add rbx,8
dec byte[count]
jnz displayI
jmp menuprint
DisplayDest:
print msg,len
mov byte[count],8
mov rbx,characters
displayI2:
call convert_Result
print address,16
print msg6,len6
print rbx,8
add rbx,8
dec byte[count]
jnz displayI2
jmp menuprint
MoveRegister:
mov esi,characters+4
mov edi,characters+7
mov byte[count],05
next1:
mov al,[esi]
mov [edi],al
dec esi
dec edi
dec byte[count]
jnz next1
;jmp DisplayDest
jmp menuprint
Exit:
mov rax,60
mov rdi,00
syscall
convert_Result:
mov rsi,address
mov rcx,10h
loopx:
rol rbx,04
mov al,bl
and al,0Fh
cmp al,09h
jbe loopx1
add al,07h
loopx1:
add al,30h
mov [rsi],al
inc rsi
loop loopx
;print address,8
RET
No comments:
Post a Comment