swap to variable  xchg fkt i C :call-b-reference: void xchg(byte *pA, byte *pB)

xchg(&etA, &etB); 

	JMP start
etA: DB "A" ; Variable
etB: DB "B"
 
start:
	PUSH etA ; adressen etA
	PUSH etB
	CALL xchg 

	MOV B,254  ; lad os printe og se om de er byttet
	MOV A, [etA]
	CALL prtbyte
	INC B 
	MOV A, [etB]
	CALL prtbyte
	HLT
 
; input  paa stak ref til 2 bytes der skal byttes i lager
;   saa man kan se paramateroverførsel på stak
;  vi overfører jo adressen til etA og etB ...
; saa i C sprog er det call-b-reference: void xchg(byte *pA, byte *pB)
; stak som den ser ud lige efter call til st
; SP+6 | ref til byte1     |
; SP+5 | ref til byte2 | 
; SP+4 | return addr from CALL strlen | 
; SP+3 | A  |
; SP+2 | B  |
; SP+1 | C  |
; SP+0 | første ledige på stak |  
; output A: antal bytes i streng excl 0 karakter
; do not scramble any registers
xchg:
	PUSH A   ; gemme a,b og c for at passe paa dem
	PUSH B
	PUSH C
	MOV C, [SP+6]
	MOV A, [C]
	MOV C, [SP+5]
	MOV B, [C]
	MOV [C], A
	MOV C, [SP+6]
	MOV [C], B
	POP C
 	POP B
	POP A
	RET
; ende strlen funktion 


; A chr to be printed
; B: position in memory (last display char is at 0xff/255
prtbyte:
	MOV [B], A
	RET
