Assignment 5
section .data
menumsg db 10,"------------NON OVERLAPPED BLOCK TRASNFER----
--------",
db 10,"1)Block Transfer without string."
db 10,"2)Block Transfer with string."
db 10,"3)Exit.",
db 10,"Your Choice = "
menulen equ -wrmsg
bfr db 10,"---------------------------------
------"
db 10,"Block Contents before transfer : ",10
bfrlen equ -afr
srcmsg db 10,"Source Block Content : "
srcmsglen equ -destmsg
srcblck db 10h,20h,30h,40h,50h
destblck db 0h,0h,0h,0h,0h
cnt equ 05
space db 20h
lfmsg db 10,10
section .bss
optbuff resb 02
dispbuff resb 02
%macro print 2
mov eax,04
mov ebx,01
mov ecx,%1
mov edx,%2
int 80h
%endmacro
%macro accept 2
mov eax,03
mov ebx,00
mov ecx,%1
mov edx,%2
int 80h
%endmacro
%macro refresh 0
mov rdi, destblck
mov rcx, cnt
xor rax, rax ; Clearing rax register
y:
mov byte [rdi], 0h ; Store byte to destination block
inc rdi ; Move to next byte in destination block
loop y ; Loop for rcx times
%endmacro
section .text
global _start
_start:
menu:
print bfr, bfrlen
call show
print menumsg,menulen
accept optbuff, 02
cmp byte[optbuff], '1'
jne case2
call wos
jmp exit1
case2:
cmp byte[optbuff], '2'
jne case3
call ws
jmp exit1
case3:
cmp byte[optbuff],'3'
je exit
print wrmsg, wrlen
exit1:
print afr, afrlen
call show
print lfmsg, 2
refresh
jmp menu
exit:
mov rax, 60
xor rdi,rdi
syscall
dispblk:
mov rcx, cnt
rdisp:
push rcx
mov bl, [rsi]
call disp8
inc rsi
print space, 1
pop rcx
loop rdisp
ret
wos:
mov rsi, srcblck
mov rdi, destblck
mov rcx, cnt
x:
mov al, [rsi]
mov [rdi], al
inc rsi
inc rdi
loop x
ret
ws:
mov rsi, srcblck
mov rdi, destblck
mov rcx, cnt
cld
rep movsb
ret
show:
print srcmsg, srcmsglen
mov rsi, srcblck
call dispblk
print destmsg, destmsglen
mov rsi, destblck
call dispblk
ret
disp8:
mov rcx, 02
mov rdi, dispbuff
dub1:
rol bl, 4
mov al, bl
and al, 0fh
cmp al, 09h
jbe x1
add al,07
x1:
add al, 30h
mov [rdi], al
inc rdi
loop dub1
print dispbuff, 3
ret