OneCompiler

Assignment no :5

100

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 menumsgwrmsgdb10,10,"InvalidOption",10wrlenequ-menumsg wrmsg db 10,10,"Invalid Option",10 wrlen equ -wrmsg
bfr db 10,"---------------------------------------"
db 10,"Block Contents before transfer : ",10
bfrlen equ bfrafrdb10,"BlockContentsaftertransfer:",afrlenequ-bfr afr db 10,"Block Contents after transfer : ", afrlen equ -afr
srcmsg db 10,"Source Block Content : "
srcmsglen equ srcmsgdestmsgdb10,"DestinationBlockContent:"destmsglenequ-srcmsg destmsg db 10,"Destination Block Content : " destmsglen 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:
;print bfr, bfrlen
;call show
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