OneCompiler

ASSIGNMENT 5

202
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 $-menumsg
	wrmsg db 10,10,"Invalid Option",10
	wrlen equ $-wrmsg
	bfr db 10,"_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_"
	    db 10,"Block Contents before transfer : ",10
	bfrlen equ $-bfr
	afr db 10,"Block Contents after transfer : ",
	afrlen equ $-afr
	srcmsg db 10,"Source Block Content : "
	srcmsglen equ $-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