public escribir public esperar params struc bpold dw ? retorno dd ? atrib db ? car db ? pagina db ? columna db ? fila db ? params ends codigo_a segment assume cs:codigo_a escribir proc far push bp ;salvaguardamos bp mov bp, sp push si ;salvaguardamos registros push es push dx push di push cx ;comienzo de la rutina mov ax, 0b800h ;segmento de memoria de v¡deo mov es, ax mov al, [bp].fila ;al := fila mov dl, 80 ;suponemos que trabamos en modo 80x25 mul dl ;ax := 80*fila mov si, ax sal si, 1 ;si := si*2 = ax*2 = 80*fila*2 mov di, si mov ah, 00h ;ax := 00columna mov al, [bp].columna mov si, ax sal si, 1 ;si := si * 2 add di, si ;di := di + si = fila*80*2 + columna*2 mov ah, 00h ;ax := 00pagina mov al, [bp].pagina mov si, ax ;si := pagina mov cx, 12 bucle: sal si, 1 ;si := pagina * 4096 loop bucle add di, si ;di := di + si mov ah, [bp].car mov [es:di], ah ;copia en mem.v¡deo, el car cter mov ah, [bp].atrib mov [es:di+1], ah ;copia el atributo ;fin rutina pop cx ;restauramos registros pop di pop dx pop es pop si pop bp ;restauramos bp ret endp esperar proc far push bp mov bp, sp push ax push bx push cx push dx mov ah, 02ch int 21h mov cl, dl mov bh, dl mov bl, dl add bl, ss:[bp+6] lazo: cmp bh, bl jg finlazo push cx mov ah, 02ch int 21h pop cx mov bh, dl cmp bh, cl jge lazo add bh, 100 jmp lazo finlazo: pop dx pop cx pop bx pop ax pop bp ret endp codigo_a ends end