Monday, September 8, 2014

Overlap Data Transfer (NASM 64 bit)

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       

No comments:

Post a Comment

Home Java Python PHP