ENVIA.ASM

(Descarga Ejecutable: Envia.Com)

envia32 macro var32m							; Macro que separa el dato a enviar en Nibbles
        mov eax,var32m

        mov cx,8
cicloesc32:
        rol eax,4
        mov ebx,eax
        and bl,1111b
        escribec bl
        loop cicloesc32
        
        mov cx,8
        mov eax,var32m
veces8:
        mov bl,al
        and bl,00001111b
        envia bl
        ror eax,4
        loop veces8

endm

envia macro nible									; Macro que envia nibbles
		mov si,0408h
	xor ax,ax ;AX = 0
		push ds
		mov ds,ax
	mov ax,word ptr [SI] ;AX = [0h:SI]
		pop ds ;recupero DS de la pila ;ahora en AX tengo la direccion base

		mov dx,ax
		sub ax,ax
		mov al,10000b
		out dx,al
		sub ax,ax
		add dx,1
ciclo:
		in al,dx
		shr al,3
		xor al,10000b
		and al,00011111b
		cmp al,10000b
		jne ciclo

		mov ecx,11111111111111111111111111111111b
etiqueta:
		loop etiqueta

		mov al,nible
		sub dx,1
		out dx,al
		mov ecx,11111111111111111111111111111111b
etiqueta2:
		loop etiqueta2
		mov al,20
		out dx,al

endm

lee macro nible									; Macro que verifica el Bit de Control

		mov si,0408h
		xor ax,ax 			;AX = 0
		push ds
		mov ds,ax
		mov ax,word ptr [SI] ;AX = [0h:SI]
		pop ds				;recupero DS de la pila
							;ahora en AX tengo la dirección base

        mov dx,ax
        sub ax,ax
        add dx,1
ciclo:
        in  al,dx
        shr al,3
        xor al,00010000b
        and al,00011111b
        cmp al,10000b
        jne ciclo

        mov cx,11111111b
etiqueta:
        loop etiqueta
        sub dx,1
        out dx,al
        add dx,1
        
ciclo2:
        in al,dx
        shr al,3
        xor al,10000b
        and al,00011111b
        cmp al,10000b
        jge ciclo2
        mov nible,al
        sub dx,1
        mov al,20
        out dx,al

endm

escribec macro car
	mov al,car
        add al,48
	mov bx,0
	mov ah,14
	int 10h
        sub al,48
endm

escritex macro texn

        mov ah,09h
        lea dx,texn
        int 21h
endm                        

																; Programa .COM

codigo segment
.386
        assume cs:codigo,ds:codigo,ss:codigo
org 100h
begin:  jmp programa
																; Declaración de Variables
car db	64
dbase db 0
nible db 0
tex1 db 'envia $'
tex2 db 'lee$'
var32 dd 0
var16 dw 0
var8 db 0

programa proc far												; Inicion del Procedimiento

        mov dx,378
        mov al,20
        out dx,al

        mov eax,var32
        envia32 eax        

        mov dx,378
        mov al,20
        out dx,al
        ret

programa endp
codigo ends
        end begin