;exercise 4-2


.model small

CR EQU 0Dh
LF EQU 0Ah
BS EQU 08h

CONSTANT EQU 0F0h

data segment

	buffer db 81 dup(?)
	
data ends


code segment

	assume cs:code, ds:data
	
start:
	mov ax,data
	mov ds,ax

  	mov si, 0
  	
    loop1:
    	mov ah, 1
    	int 21h
    	
    	cmp al, CR
    	je transcode
    	
    	cmp al, BS
    	je backspace
    	
    	jmp continue
    	
    backspace:
    	cmp si, 0
    	je loop1
    	
    	mov ah, 3
    	mov bh, 0
    	int 10h
    	
    	dec bl
    	
    	mov ah, 2
    	int 10h
    	
    	mov ah, 0Ah
    	mov cx, 1
    	mov al, ' '
    	int 10h
    	
    	dec si
    	jmp loop1
    	
    continue:
    	mov buffer[si], al
    	
    	inc si
    	
    	cmp si, 80
    	je transcode
    	
    	jmp loop1
    	
    transcode:
    	mov buffer[si], '$'
    	
    	mov si, 0
    	
    loop2:
   	cmp buffer[si], '$'
     	je output2
     	
    	xor buffer[si], CONSTANT
    	
    	inc si
    	jmp loop2
    	
    output2:
    	mov ah, 2
    	mov dl, LF
    	int 21h
    	mov dl, CR
    	int 21h
    	
    	mov ah, 9
    	mov dx, offset buffer
    	int 21h
		
	mov ax,4c00h
	int 21h

code ends

end start