;address => register
macro xmov reg,addr
{
	local .nextline
	call .nextline
	.nextline:
		pop reg
	sub reg,$-1
	add reg,addr
}

;value from address => register
macro pxmov reg,addr,size
{
	push edi
	xmov edi,addr
	mov size reg, size [edi]
	pop edi
}

;register => memorty location
macro ymov addr,reg,size
{
	push edi
	xmov edi,addr
	mov size [edi],size reg
	pop edi
}

;OR function from register to memory location
macro yor addr,reg,size
{
	push edi
	xmov edi,addr
	or size [edi],size reg
	pop edi
}

;AND function from memory location to register 
macro xand addr,reg,size
{
	push edi
	xmov edi,addr
	and size reg,size [edi]
	pop edi
	
}

;AND function from register to memory location
macro yand addr,reg,size
{
	push edi
	xmov edi,addr
	and size [edi],size reg
	pop edi
	
}

;DEC a memory location
macro xdec addr,size
{
	push edi
	xmov edi, addr
	dec size [edi]
	pop edi
}

;INC a memory location
macro xinc addr,size
{
	push edi
	xmov edi,addr
	inc size [edi]
	pop edi
}

;ADD a memory adress to a register
macro xadd reg,addr
{
	push edi	
	xmov edi,addr
	add  reg,edi
	pop edi
}

;ADD a memory location to a register
macro pxadd reg,addr
{
	push edi	
	xmov edi,addr
	add  reg,[edi]
	pop edi
}

;ADD a register to a memory location
macro yadd reg,addr
{
	push edi	
	xmov edi,addr
	add  [edi],reg
	pop edi
}

;SUB a memory address to a register
macro xsub reg,addr
{
	push edi	
	xmov edi,addr
	sub  reg,edi
	pop edi
}

;SUB a memory location (pointer)to a register
macro pxsub reg,addr
{
	push edi	
	xmov edi,addr
	sub  reg,[edi]
	pop edi
}

;SUB a register to a memory location
macro ysub reg,addr
{
	push edi	
	xmov edi,addr
	sub  [edi],reg
	pop edi
}

 
