Listado de Programas Autor: Nery Guzmán No estan en orden de dificultad pero con las descripciones mas que todo

servirá como referencia a algunas interrupciones clásicas en un curso de assembler. 1.

2.

3.

4.

5.

6.

7.

8.

9.

10. ; editor de texto mas avanzado con teclas y funciones especiales. 11.

; Nery Guzman ;2007 Universidad del Valle de Guatemala ;http://docs.huihoo.com/help-pc/ pagina de referencia donde estan las interrupciones ;EXCEPCION AH07 de la int 21 h ;programa que lee una tecla del buffer sin repeticion en pantalla( sin eco) ; luego se manda con la excepcion ah07 dentro de al y se compara ; siendo 00 tecla de funcion .MODEL SMALL .STACK 64 .DATA .CODE

JUAN PROC FAR

MOV AH, 07H INT 21H CMP AL, 00 JNZ SALIDA

; Petición de ; ; en AL ; ; si NO

la función lee la tecla, no hace eco retorna carácter leído. Es 00 (tecla de función)? es 00, termina. Ya está carácter en AL

SALIDA: MOV AH,4CH INT 21H JUAN ENDP END JUAN

title lee los sectores de disco .model small .stack 64 ;-------------------------------------------------------------------.data row db 00 col db 00 xlatab db 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h db 41h,42h,43h,44h,45h,46h readmsg db '*** read error ***', 0dh, 0ah rdblock rdhead rdcylr rdsect rdnosec rdbuffr ; estructura del bloque ; cabeza lectura/escritura ; cilindro ; sector inicial ; numero de sectores ; desplazamiento de buffer de entrada, ; proporciona un sector de datos dw seg _data ; operador seg identifica direccion del ; segmento de datos iobuffr db 5120 dup (' ') mensaje db ('ingrese el sector abs '), '$' entrada db 20 dup (‘ ‘) ; área de entrada db dw dw dw dw dw 0 0 0 4 10 iobuffr

se divide . al add buffer. cargo lo quiero dividir en ax . al add buffer. buffer.0 mov al. buffer. ax mov residuo. ax al.bx buffer. se mueve el coiente a cilindro .'$' .4 mov bx. cargo el divisor a bl . al add buffer. se mueve el ah a resudio . al al al al al al al . ah xor mov mov div mov ax. al add buffer.0 jne multi2 cien: mov mov mov sub multi3: add add add add add add add x. 18 bl rdsect.4 bx.área de caracteres a copiar pagina db 0 cursor db 0 x dw 4 y db 0 residuo db ? . inicializar ax . al dec x cmp x. al add buffer. inicializar ax . buffer mov bl.bx multi2: add buffer. muevo el ah a sectores sectorA endp conversion1 proc far mil: mov x.code sectorA proc near xor ax. 1 al. al add buffer.arreglo[bx] x. al add buffer. residuo bl. buffer. al add buffer. '$' blur dw 0 arreglo db 80 dup (?).buffer db 0 .arreglo[bx] sub x. 80 div bl mov rdcylr.-------------------------------------------------------------------. al add buffer. buffer. ax . buffer. ax mov al. buffer. [es:di] mov al.

07h 21h buffer. buffer. buffer. al buffer. 03h bh. buffer.pagina actual getcursor endp pedir proc far mov ah.blur .bx buffer. buffer. buffer. 2 al. 09h lea dx. arreglo[3] add buffer. al al. 0dh mov bx. dx cursor. mov mov sub multi: add add add add add add add add add add dec cmp jne uni: buffer. buffer.arreglo[bx] x. x x. buffer. buffer int 21h conversion1 endp getcursor proc near mov mov int mov mov ret ah. buffer. dh . al buffer.0 multi3 4 bx. 0h 10h ax. mensaje int 21h ciclus: mov int mov cmp ah. al x x.add add add dec cmp jne diez: mov x.llama a getpagina para posicionarse en . al mov ah.0 multi al al al al al al al al al al mov al. 09h lea dx. buffer.

0000 mov dx. 00 mov dh. . 184fh int 10h ret limpia_pantalla endp . obtiene datos del sector .se dice cuantas veces se va a imprimir en la pocision del cursor esa letra int 10h . establece cursor pos_cursor proc near mov ah. 01h . row . 0ah . si lectura es valida.se pone la pagina actual mov cx. readmsg call error jmp salida . ax mov es. 4c00h . coloca el cursor . continuar. peticion mov bh. convertir y desplegar salida: mov ax. 0h . salir al dos int 21h main endp . @data mov ds. buffer arreglo[bx].-----------------------------------------------------------.se avanza un espacio el cursor mov ah. al blur mov ah. columna int 10h ret . 02h . [es:di] al.mov mov mov inc al.petición mov bh. recorrido de la pantalla limpia_pantalla proc near mov ax.se pone la pagina int 10h cmp blur. atributo mov cx.se llama al modo ingresar caracter mov al. buffer mov bh. inicializa registros de segmento . 01 . limpia pantalla . lectura no valida continuar: call despliegue . renglon (fila) mov dl. 0600h .interrupcion call getcursor . 4 jne ciclus ret pedir endp main proc far mov ax. 0h. ax call pedir call conversion1 call limpia_pantalla call pos_cursor call lee_sector jnc continuar lea dx.se llaman las coordenadas del cursor para avanzar add dl.-----------------------------------------------------------. 02h . peticion mov bh. 1eh . col .

0fh .----------------------------------------------------------------.------------------------------------------------------------end main . ioctl para dispositivo de bloque mov bx. 2=unidad c mov ch. lee los datos del sector lee_sector proc near mov ax.pos_cursor endp .---------------------------------------------------------------caracter proc near mov ah. 61h . longitud de mensaje int 21h inc row ret error endp .--------------------------------------------------------------. desplegar mensaje. 1=unidad a. 1 . desplegar datos del sector despliegue proc near lea si. traducir el hex call caracter inc si inc col cmp col. manejador 01 = pantalla mov cx. dx contiene direccion mov bx. 1 . desplegar mensaje de error en disco error proc near mov ah. 00 call pos_cursor cmp row. al int 21h ret caracter endp . xlatab . 64 jbe c20 inc row mov col. direccion para estructura de bloque int 21h call sectora ret lee_sector endp . 20 . [si] shr al. 1 shr al. rdblock . 08 . 40h . 4 equivale pero da error shr al. 16 jbe c20 ret despliegue endp . correr a la derecha un digito hex lea bx. borrar digito hex de la izq xlat . designar direccion a la tabla xlat . 01 . 02h . iobuffr c20: mov al.-----------------------------------------------------------. 0=unidad por default. shr al. categoria del dispositivo mov cl. 1 shr al. peticion para imprimir caracter mov dl. traducir el hex call caracter inc col mov al. [si] and al. 01 . 440dh . lee sector lea dx.

La suma debe tener un resultado de 2 digitos.DATA .Luis Fernando Reina Carn‚ 05070 .10.-----------------------------------------------------------------------.muestra mensaje en pantalla . . 1 usa como base Programa Ejercio No.Guarda la salida TERMI DB '$' . menores que 100 .Sumar los numeros pares de cinco n£meros predefinidos. Definicion de constantes.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ . arreglos y cadenas.@data MOV DS.MODEL SMALL .13.huihoo. Longitud ingresada DATOS DB 06 DUP ('.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NUM DW 05 DUP (0) . .'$' BIENVE DB 'Ingrese 5 némeros.http://docs. 1 Temario No.') . Espera un enter para salir al DOS . ..inicializa segmento de datos .'.------------------------------------------------------------------------. Peticion . 3 .-----------------------------------------------------------------------.Terminador para la salida CADENA DB 13.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .CODE MAIN PROC FAR MOV AX.Universidad del Valle de Guatemala .'$' INGRES DB 10. Datos ingresados en teclado . 09h LEA DX.Guarda los n£meros ingresados NUM_6 DW 00 .'Listados : '.Guarda la suma de los pares Cent DW ? .Nery Fernando Guzman Carn‚ 06153 .'$' conta db 05 . Inicio de lista de parametros MAXLEN DB 06 . Longitud máxima (recibe 6 digitos y enter) ACTLEN DB ? . el cual debe de ser menor que 100. BIENVE INT 21H CALL Contar MOV AH. .com/help-pc/ pagina de referencia donde estan las interrupciones .-----------------------------------------------------------------------.Pide y suma los números. . 0H MOV AH. Definicion de datos . 0AH LEA DX.Guarda centenas Dece DW ? .-----------------------------------------------------------------------.Guarda unidades Salida DB 03 DUP ('. Programa Tarea NO.'Por favor ingrese un numero: '. y mayores que 0. Inicio del codigo . Para el manejo de las cadenas.Desplegar el Resultado.Guarda decenas Unid DW ? .-----------------------------------------------------------------------.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ NUMERO LABEL BYTE .STACK 64 . NUM_6 INT 21H .13.AX MOV AL.') .

muestra mensaje en pantalla MOV AH.salida al DOS . RET .-----------------------------------------------------------------------Contar proc far SIG: MOV SI. NUMERO . 00H .-----------------------------------------------------------------------Conver proc far MOV BX. Guarda un numero . 0AH .************************************* . NUM[BX-2] .MOV AH. 10 Snum: Call Pedir . 10 . AL . retorna al programa Par endp . Contador inicial a 10 AX. Salta si no est en 0. Suma el num6 a AX MOV NUM_6. lista de parametros RET Pedir endp . 4CH INT 21H MAIN ENDP . DATOS[BX-1] . 2 . Se hace la mascara en BX impar . NUM[BX-2] ADD AX. 3 . Procedimiento Contar . Procedimiento Pedir . Se trabaja de 2 en 2 por ser una palabra y no bytes AL.-----------------------------------------------------------------------.-----------------------------------------------------------------------. Peticion LEA DX. 30H . Regresa a ejecuci¢n Conver endp . MOV NUM[SI-2]. Resta 1 al contador JNZ SIG . Se borra NUM_6 que contiene la suma de numeros MOV NEXT: MOV AND JPO BX. Mueve a AL el los datos ingresados LIFO SUB AL. Inicia a 0 BX MOV AL. 0h . 0001H . Resta 30H para quitar el ASCII MOV DATOS[BX-1].-----------------------------------------------------------------------. Mueve a num6 el AX (acumulador) impar: SUB BX.************************************* .-----------------------------------------------------------------------.la suma de los numeros esta en NUM_6 . Bit de paridad define el salto MOV AX.-----------------------------------------------------------------------Pedir proc far MOV AH. AX .-----------------------------------------------------------------------Par proc far pares MOV NUM_6. Convierte los numeros ascii a numeros CALL Suma . Procedimiento Conver . INGRES INT 21H . MUeve el nuevo dato al registro DEC BX . 09h LEA DX. AX . Pide un numero CALL Conver . Carga direccion de la INT 21H . Resta 2 por ser palabra JNZ NEXT RET . Procedimiento Par . Guarda la suma en una constante.

CX. 00H .Se aplica una mascara para borrar ax MOV AL. DATOS[bx-1] CX.Se coloca el n£mero a dividir en registro .CALL Par . 100 BL SALIDA[0]. Regresa para pedir el siguiente numero RET Contar endp .Residuo se obtiene en AH (Decenas y AND AX. Guarda en decenas Inicia a 0 al Guarda en AL el numero actual en datos .En registro BL se coloca el divisor . SALIDA[1] . Resta 2 al contador por trabajar con palabras . CX CENT.Residuo se obtiene en AH (Unidades) . 10 BL SALIDA[1]. CX.Cociente se obtiene en AL (Centenas) . CX DECE. AL. Procedimiento Suma . DATOS[1] .Se coloca el n£mero a dividir en registro AX MOV DIV MOV MOV BL. SUB SI. 0000H . Procedimiento Desplegar . Despliega en pantalla la suma de los pares hasta el momento. AL SALIDA[2].-----------------------------------------------------------------------.Cociente se obtiene en AL (Decenas) .Se divide .-----------------------------------------------------------------------Dsplgr proc far MOV AH. AL SALIDA[1]. Comprueba que numeros son pares y los suma . 09h LEA DX. guarda en centenas Inicia a 0 al Guarda en AL el numero actual en datos Multiplica por 10 . AX AX. 100 . mueve centenas a cl suma centenas a las decenas y unidades Regresa (deja en AL la suma) Suma endp . AH .----------------------------------------------------------------------.debemos convertir el numero para poder mostrarlo . AX AX. 00H . DECE AX. 5h AL. mueve decenas a cl suma decenas y unidades . 10 .muestra mensaje en pantalla .-----------------------------------------------------------------------. CADENA INT 21H correctamente MOV AX MOV DIV MOV MOV unidades) AX. Guarda en AL el numero actual en datos Multiplica por 100 . AL.En registro BL se coloca el divisor .Se divide .-----------------------------------------------------------------------Suma proc far MOV AX. 2 JNZ Snum . CENT AX. . . CX . DATOS[2] . 0000H mov MOV MOV MUL MOV MOV MOV MOV MUL MOV MOV MOV MOV ADD MOV ADD RET bx. CX . CX. AH . NUM_6 BL. Inicia a 0 al .

ADD SALIDA[0].Se suma 30H para desplegar ASCII ADD SALIDA[2].Se coloca en DX la direcci¢n de Centenas MOV AH.muestra el caracter en pantalla . 30H .Se borra DX LEA DX. 09H INT 21H RET Dsplgr endp END MAIN . SALIDA[0] . 30H . 30H . 00H .Se suma 30H para desplegar ASCII ADD SALIDA[1].Se suma 30H para desplegar ASCII MOV DX.

05H . 0A0CH . 0605H MOV BH.CODE DB DB 20 DUP (‘ 20 DUP (‘ ‘) ‘) . 00 . ENTRADA . 3FH . 10H 0605H 61H 0A0CH 0E34H . Llama al DOS .startup . columna 52 . . Petición MOV BX. Petición MOV AL. BH. Columna 12 (MOV DX. Número de página MOV DH. DX. Carga la dirección del área de . CX. 050CH) INT 10H .huihoo. columna 28 . se crea el primer cuadro MOV MOV MOV MOV INT AX. 12 .com/help-pc/ pagina de referencia donde estan las interrupciones . posiciona el cursor y deja escribir 20 caracteres sin verificar . se usa el manejador con la primera cadena MOV AH.DATA ENTRADA ENTRADA2 . se posiciona el cursor MOV AH. Manejador para teclado MOV CX.http://docs. Desde fila 10. 46H .se cambia de pagina de memoria MOV AH. Nery Guzman . columna 28 . Máximo 20 caracteres LEA DX. 0 . entrada INT 21H . Fila 10 MOV DL. Área de entrada .EXCEPCION AH07 . Petición MOV BH. se hace el 2ndo cuadro MOV AX.MODEL SMALL .STACK 64 . 20 . Número de página INT 10H .2007 Universidad del Valle de Guatemala .. Hasta fila 14. Área de entrada2 eje PROC FAR . por medio del manejador de teclado . programa que hace 2cuadros en el centro de la pantalla. Desde fila 10. MOV CX. 01h . 0Ah . 02H .

ENTRADA2 . Número de página DH. Petición BX. Máximo 20 caracteres DX. 050CH) 10H mov al. 1 . columna 52 osiciona el cursor AH. 12 . Llama al DOS mov ax. entrada INT 21H . 00 . 3FH . 0E34H INT 10H . Hasta fila 14. Columna 12 (MOV DX. 4CH INT 21H eje endp end eje . Petición BH.00h .0 MOV AH.salida al DOS . 20 . Carga la dirección del área de . Fila 10 DL.MOV DX. 0Ah . Manejador para teclado CX.se MOV MOV MOV LEA manejan otros 20 caracteres AH. 02H .se MOV MOV MOV MOV INT .

2007 Universidad del Valle de Guatemala . 02h mov bh. pagina mov dh.definicion de datos entrada db 3 dup () .---------------------------------------------------------------------. Nery Guzman .stack 64 . 0 int 10h mov ah.fila x .número de página .model small . blur inc blur cmp al..petición . arreglo[bx] jne sigue2 inc letra cmp bx.este programa lo que hace es agarrar un arreglo que ingresa el usuario y le quita todos los espacios en blanco .data . ah= residuo .'$' . y lo imprime de nuevo sin los espacios ( aca se debio haber usado scas y stows pero yo utilize escritura directa en memoria .com/help-pc/ pagina de referencia donde estan las interrupciones . 0h sigue2: mov bx.10h int 16h mov blur.contador mov ah.'$' residuo 0 db ? .área de caracteres a copiar contador db 0 cont db 0 aux dw 0 aux2 db 0 aski db 0 pagina db 0 cursor db 0 kursor dw 0 diez db 10 blur dw letra dw 0. contador mov dl. al = cociente .huihoo.http://docs.01h mov al.área de entrada arreglo db 80 dup (?).columna 0 para empezar la linea endm .40h jb sigue2 endm conversion macro . para explorar y reescribir los arreglos) buskeda macro add contador.

20h call getpagina .---------------------------------------------------------------------getpagina proc near mov ah.se dice cuantas veces se va a imprimir en la pocision del cursor esa letra int 10h .comparacion db 0 .se atrasa 2 veces porque el metodo ascii avanza uno entonces solo hubiera dejado un espacio en blanco DX dont: ret backspace endp .petición mov bh. 0fh int 10h pagina actual mov pagina.se llama al modo ingresar caracter mov al.pagina actual getcursor endp .se atraza un espacio el cursor mov ah.---------------------------------------------------------------------.---------------------------------------------------------------------ascii proc near call getpagina .---------------------------------------------------------------------.se mandan a traer las coordenadas del cursor cmp dl. 02h . bh ret .avanza uno el cursor para simular el avanze de un space despues de un tecladazo mov aski. pagina . dx cursor. 0ah . 02h . aski .---------------------------------------------------------------------getcursor proc near en call getpagina mov mov int mov mov ret ah.---------------------------------------------------------------------.se llama las coordenadas de la pagina mov ah. pagina 10h ax.se llama las coordenadas de la pagina .----------------------------------------------------------------------backspace proc near call getcursor .petición mov bh.se guarda el aski metido anteriormente en la variable aski mov bh.proceso ascii es el que escribe la letra en pantalla .0h je dont add dl.se guarda en bh el numero de getpagina endp .-01h . pagina . 01 .code .llama a getpagina para posicionarse .---------------------------------------------------------------------.se pone la pagina int 10h .se pone la pagina actual mov cx.interrupcion mov ah.se pone la pagina int 10h . pagina . 03h bh. dh .

1c0dh je clinea cmp ax.se avanza un espacio el cursor mov ah.avanza uno el cursor para simular el avanze de un space despues de un tecladazo ret ascii endp .si ya llego entonces brinca a cambio de linea simula . pagina .---------------------------------------------------------------------.ACA SE VA METIENDO EL ASCII DE MEMORIA AL ARREGLO mov bx.se llama al modo ingresar caracter .10h int 16h mov aski. esto hace la peticion para escribir 80 caracteres por linea .compara si ya llego al final de la linea adimitido .se pone la pagina actual .interrupcion mov bh.se dice cuantas veces se va a imprimir en la pocision . para con enter y llena de espacios ingreso: mov ah. pagina mov cx.es backspace? .se pone la pagina int 10h . aski .SE COMPARA SI ES BARRA ESPACIADORA je sigue . [es:di] . SI ES BARRA ESPACIADORA NO SE COPIA EN LA CADENA ARREGLO call getcursor .blur mov mov mov inc sigue: inc inc al. 02h . 0e08h je cback call ascii cmp aux.aski mov ah. al blur aux aux2 . 01 del cursor esa letra int 10h cmp aski.se incrementa la linea pop bx call getcursor .si si brinka a backspace :P . al cmp ax. 01h . aski arreglo[bx].si si .es enter ?? .si no es tecla especial brinca al asciii .20h .se guarda el aski metido anteriormente en la variable .petición mov bh.si no simula de nuevo la entrada para seguir metiendo .esto es lo que reemplaza a las funcionas scas al. 50h ja clinea enter askis clinea: call c2linea ret jmp ingreso .---------------------------------------------------------------------insert proc far . 0ah mov al.se llaman las coordenadas del cursor para avanzar add dl.

se llama la pagina actual .petición mov bh.0 je fuera div diez fuera: .---------------------------------------------------------------------buskeda2 proc far call getpagina que ya termino de escribir buskeda call exit .---------------------------------------------------------------------c2linea proc far call getpagina que ya termino de escribir add contador.columna 0 para empezar la linea int 10h mov aux. pagina .01h mov al. contador .0h call getcursor mov kursor.se llama la pagina actual .fila x mov dl.proceso para cambiar de linea despues de ret buskeda2 endp exit proc far dec letra mov ax. letra cmp ah. 0 . arreglo INT 21H call buskeda2 ret . 09h .dx MOV AH.contador mov ah.cback: call getpagina call backspace ret insert endp .muestra mensaje en pantalla LEA DX. 02h .proceso para cambiar de linea despues de c2linea endp .número de página mov dh.

0000 dx. 07h cx.4c00h . salida de protocolo DX mov al.add MOV LEA INT mov int mov mov int mov mov mov mov int mov int ret letra. 00h . 30h AH. 09h . cargo a ah 00h mov al.10h int 16h salida: mov ah. 07h mov cx. 05h . ax mov ah. 0600h mov bh. arreglo INT 21H mov ah. @data . asigna modo texto a color 80x25 int 10h insertado: call insert . 0 10h ax. 05h . inicializar area de datos mov ds. letra 21H ah. 0000 mov dx. 184fh int 10h mov ax. 09h .10h 16h ah.muestra mensaje en pantalla DX.salida al dos 21h exit endp begin proc far mov ax.muestra mensaje en pantalla LEA DX. salida de protocolo DX al.---------------------------------------------------------------------- .salida al dos int 21h ret begin endp end begin . 184fh 10h ax.llama al procedimiento q empieza a dibujar cmp contador.4c00h . 0600h bh. 0 int 10h mov ax. 5 jne insertado MOV AH. 03h .

'$' pressAKey db 'Presione una tecla para salir $' .data fileName db 'fileASMTest. 0dh.data int 21h ret writeFile endp . 0dh.------------------------------------------------------------ .model small .code main proc far .txt$' fileDescriptor dw ? dataToWrite db 'Line 1'. dataToWrite . ax . 0dh. Crear archivo xor cx. pressAKey call cout call cin mov ax. 'Line 2'.Escribir a archivo mov bx.html . fileDescriptor mov cx.-----------------------------------------------------------. '$' errorWriting db 'Error al escribir en el archivo'. 3c00h . Escribe un arcrivo en el disco utilizando las funciones que provee el DOS con la int 21h . 0ah.Info y ejemplo: http://www.'$' success db 'Archivo creado con exito'.------------------------------------------------------------writeFile proc near mov ax. atributo normal lea dx. 0dh. Numero de bytes a escribir lea dx.. 14 . errorWriting call cout endProgram: lea dx. 0ah.stack 64 . fileName . 0ah.-----------------------------------------------------------createFile proc near mov ax.startup call createFile jc cError call writeFile jc wError lea dx. 4000h . 4c00h .-----------------------------------------------------------.net/forums/asm/197748-tut-asmbeginners-advanced-users.guarda el handler ret createFile endp . 0ah. nombre del archivo int 21h mov fileDescriptor. success call cout jmp endProgram cError: lea dx. '$' errorCreating db 'Error al crear el archivo'.--------------------------------------------------. cx = 0.gamerzplanet. salir al DOS int 21h main endp . cx .File Writing by 414C485649 . errorCreating call cout jmp endProgram wError: lea dx.

-----------------------------------------------------------cin proc near mov ax.cout proc near mov ax. 0900h int 21h ret cout endp . 0a00h int 21h ret cin endp .-----------------------------------------------------------end main .

0 .com/help-pc/ pagina de referencia donde estan las interrupciones .--------------------------------------------------------------------------------------exit proc near MOV AH.salida al DOS exit endp . 05H .MODEL SMALL .----------------------------------------------------------------------------------------start proc near mov int mov MOV ah.solamente la primera impresion lo demas saka basura hay que corregirlo!!! TITLE . Número de página INT 10H mov ax.programa que pateticamente muestra un descansador de pantalla.huihoo.garbage 21H dx. 07H .http://docs.4C00H INT 21H . Petición MOV AL.DATA . el cual funciona .CODE insert proc far insert endp . Definicion de datos data db ' **** ' db ' ****' data2 db' ++++ ' db ' ----' data23 db ' nery ' db ' Dman' up dw 0 tope dw 85 .STACK 64 .2007 Universidad del Valle de Guatemala . 05H . tope AH.. Nery Guzman . Petición .

Petición MOV AL.5h . COMPROBAR SI ES ENTER Je gogogo . atributo ciclus: mov al. 6h STOSW cmp di. mensaje se carga en bx mov ah.0B800h . interrupcion para limpiar basura si no se hace zaz int 21H mov dx.----------------------------------------------------------------------------------------pag2 proc near mov di. 01 . hasta llegar al tamaño de la cadena ah. Número de página . 00h int 16h CMP AL. 0 etiketaloka1: inc bx inc up cmp up.MOV AL.ax . 0dH . dx jne ciclus MOV INT JNZ JMP .0 mov ah.0 tag1: mov up. 07H . data . si es enter pasa start endp . inicializa contador a cero lea bx. mov di. 01h . si no es enter se sale gogogo: CALL pag2 . HASTA Q haya tecladazo comp: jmp ciclus mov ah. 00 INT 10H . se carga al registro ES la dir direcc mem mov di. direccion de inicio de memoria de video mov es. REPETIR COMP .0 CALL exit .[bx] mov ah. CLICLO tag1 . 0 . 16h . incrementa puntero de la cadena .320 jne etiketaloka1 mov di. Número de página mov ax. incrementa contador . tope MOV AH. 05H .

INT 10H mov ax,0B900h ; direccion de inicio de memoria de video mov es,ax ; se carga al registro ES la dir direcc mem mov di,168 tag12: mov up, 0 ; inicializa contador a cero lea bx, data2 ; mensaje se carga en bx mov ah,5h ; atributo inicial mov dx, tope add di, -168 ciclus2: mov al,[bx] mov ah, 6h

STOSW cmp di,320 jne etiketaloka2 mov di, 168 etiketaloka2: inc bx inc up cmp up, dx jne ciclus2

; incrementa puntero de la cadena ; incrementa contador ; hasta llegar al tamaño de la cadena

MOV ah, 01h ; INT 16h JNZ COMP2 JMP tag12 ; esperar tecladazo comp2: jmp ciclus2 mov ah, 00h int 16h CMP AL, 0dh ; enter Je gogogo2 ; CALL exit ;si no se sale gogogo2: pag2 endp ;----------------------------------------------------------------------------------------pag3 proc near CALL pag3 ; si si continua

mov ah, 07H ; interrupcion para limpiar basura si no se hace zaz int 21H mov dx, tope MOV AH, 05H ; Petición MOV AL, 03 ; Número de página INT 10H mov ax,0Ba00h ; direccion de inicio de memoria de video mov es,ax ; se carga al registro ES la dir direcc mem mov di,168

tag123:

mov up, 0 ; inicializa contador a cero lea bx, data23 ; mensaje se carga en bx mov ah,5h ; atributo inicial mov dx, tope add di, -168 ciclus23: mov al,[bx] mov ah, 6h

STOSW cmp di,320 jne etiketaloka23 mov di, 168 etiketaloka23: inc bx ; incrementa puntero de la cadena inc up ; incrementa contador cmp up, dx ; hasta llegar al tamaño de la cadena jne ciclus23 MOV ah, 01h ; INT 16h ; REPETIR JNZ COMP23 ; CLICLO JMP tag123 ; HASTA QUE EL USUARIO PRESIONE comp23: jmp ciclus23 mov ah, 00h int 16h CMP AL, 0DH ;ver si es enter jz gogogo23 ; CALL exit ; si no es enter se sale gogogo23: pag3 endp ;----------------------------------------------------------------------------------------begin proc far mov ax, mov mov ah, mov al, int 10h @DATA ds, ax 00h 03h ; inicializar area de datos ; cargo a ah 00h ; asigna modo texto a color 80x25 CALL start ; regresa al principio

CALL start begin endp end begin

;llama al procedimiento q empieza a dibujar

;-----------------------------------------------------------------------------------------

; Nery Guzman ;2007 Universidad del Valle de Guatemala ;http://docs.huihoo.com/help-pc/ pagina de referencia donde estan las interrupciones ; programa que cambia de minusculas a mayusculas (Y) TITLE MINMAY Conversion de minusculas a mayusculas ;------------------------------------------------; las letras de la A a la Z son desde 41H a 5AH ; las letras de la a a la z son desde 61H a 7AH ; la diferencia se encuentra en el bit 5: mayusc 0, minusc 1 .MODEL SMALL .STACK 64 .DATA ; Definicion de datos tiket DB ? ; numero real de caracteres de entrada

;------------------------------------------------; Inicio del codigo .CODE

print proc far mov ax,0B800h ; dirección de inicio de memoria de video ; pagina 0 mov es,ax ; se carga al registro ES la direcc mem ¡MUY IMPORTANTE ¡

cmp bl,30h je cero

mov mov mov rep

mov di,0 cx,2000 al,31h ah,5 stosw

; numero de veces que se repite la impresion ; se carga el caracter que va a imprimirse (B) ; atributo ; almacena el contenido del acumulador en ; la memoria. El prefijo REP junto con CX ; hace que se repita la operacion CX veces ; El par ES:DI hace referencia al area de ; memoria donde sera almacenado

mov ax,4C00H int 21h ;-------------------------------------------------------------mov ax,0B900H ; dirección de inicio de memoria de video ; pagina 1 mov es,ax ; se carga al registro ES la direcc mem ¡MUY

se carga el caracter que va a imprimirse (B) . almacena el contenido del acumulador en . dirección de inicio de memoria de video .30h je cero mov mov mov rep mov di. se carga el caracter que va a imprimirse (B) . se carga al registro ES la direcc mem ¡MUY IMPORTANTE ¡ mov mov mov rep mov di.5 stosw . El par ES:DI hace referencia al area de .4C00H int 21h enddd: MOV AH.0 cx. la memoria. memoria donde sera almacenado mov ax. atributo . numero de veces que se repite la impresion . numero de veces que se repite la impresion . memoria donde sera almacenado mov ax.2000 al. la memoria.4C00H int 21h . El prefijo REP junto con CX . El par ES:DI hace referencia al area de . atributo . El par ES:DI hace referencia al area de .salida al DOS . almacena el contenido del acumulador en . hace que se repita la operacion CX veces . El prefijo REP junto con CX . 4CH . hace que se repita la operacion CX veces . la memoria.0B900H .0 cx.5 stosw .---------------------------------------------------------------166 2 mov ax.IMPORTANTE ¡ cmp bl.30h ah. pagina 1 mov es.30h ah. memoria donde sera almacenado mov ax. atributo . se carga el caracter que va a imprimirse (B) .2000 al.ax . hace que se repita la operacion CX veces . almacena el contenido del acumulador en .31h ah.7 stosw .0 cx. El prefijo REP junto con CX . numero de veces que se repite la impresion .2000 al.4C00H int 21h jmp enddd cero: mov mov mov rep mov di.

MOV BH. esquina superior izq fila: columna. 79 (pantalla completa) .------------------------------------------------END BEGIN .inicializa segmento de datos MOV AX. al . Petición de la función . esquina inferior der fila: columna . Hasta 24.Limpiar la pantalla .INT 21H print endp .AX .llenar la pantalla de letra loka call print BEGIN ENDP . atributo blanco (7) sobre azul (1) . lee la tecla . Desde MOV DX. peticion del teclado MOV AH. INT 10H 0600H 71H 0000H 00.-------------------------------------------------------------------------------------------------------BEGIN PROC FAR MOV AX. 07H INT 21H mov bl. MOV CX. AL 00 pantalla completa . .@data MOV DS.00 184FH . Petición AH=06. .

mitad del programa del editor de texto.----------------------------------------------------------------------------------------home proc far CALL getpagina .00 int 10h mov ax.CODE . se guarda en bh el numero de pagina actual XD mov pagina. Nery Guzman .dx ret getcursor endp .03h mov bh..com/help-pc/ pagina de referencia donde estan las interrupciones . bh ret getpagina endp . que se cuenten la cantidad de caracteres que se kieren por linea y ademas contiene una .00 mov dx. lo que permite .----------------------------------------------------------------------------------------doend proc far mov ah. DEFINICION DE DATOS ENTRADA DB 40 DUP (‘ COPI DB 40 DUP (‘ ‘) CONTADOR DB 0 CONT DB 0 tabulador db ' '.http://docs.MODEL SMALL .0fh int 10h .DATA .'$' fila db 0 aux db 0 loc db 0 renglon db ? pagina db ? ‘) .-----------------------------------------------------------------------------------------s getcursor proc far mov ah. ÁREA DE ENTRADA .2007 Universidad del Valle de Guatemala .----------------------------------------------------------------------------------------getpagina proc far mov ah.02h mov bh. verificacion de cuantos enters puede hacer muy bueno TITLE .STACK 64 . que deja ir metiendo askis sin necesidad de una cadena sin verificacion.huihoo. 184fh int 10h doend endp . aka se fuma un proceso interesante .

PETICIÓN .-1 .4C00H INT 21H EXIT ENDP . 00H MOV DL. 050CH) . CONTADOR . 0 . 02H INT 10H . COLUMNA 0 para empezar la linea INT 10H mov aux. NÚMERO DE PÁGINA . FILA x MOV DL. NÚMERO DE PÁGINA MOV DH.SALIDA AL DOS . pagina .0h RET CAMBIO ENDP .07h ret tab endp . FILA 0 .0h ret home endp . PETICIÓN MOV BH.add dh.CONTADOR MOV AH. 0H INT 10H mov aux. PETICIÓN add aux. COLUMNA 0 (MOV DX. se llama la pagina actual:P .----------------------------------------------------------------------------------------tab proc far call getcursor MOV AH.----------------------------------------------------------------------------------------CAMBIO PROC FAR call getpagina .01H MOV AL. 02H MOV BH.0h mov contador. 02H .----------------------------------------------------------------------------------------COPY PROC FAR call getcursor RET COPY ENDP .call backspace MOV AH.----------------------------------------------------------------------------------------.PROCESO PARA CAMBIAR DE LINEA DESPUES DE QUE YA TERMINO DE ESCRIBIR ADD CONTADOR.PROCESO HECHIZO PARA SALIR :P EXIT PROC FAR MOV AX. PAGINA MOV DH.

. 05H . es enter ?? je clinea . si es home lo q presiono cmp ax. si si cmp ax.01h ingreso: int 21h inc aux cmp ax. BH. 5 LINEAS CAFÉ CON PRIMER PLANO AZUL DESDE FILA 10. es home ? je chome . PETICION PARA POSICIONAR EL CURSOR :P .----------------------------------------------------------------------------------------INSERT PROC FAR . CX. 0100h . PETICIÓN MOV AL.00 . SI cmp ax. COLUMNA 52 . ESTO HACE LA PETICION PARA ESCRIBIR SUPUESTAMENTE 40 CARACTERES POR LINEA . 10H 0605H 61H 0000H 0fFFFH . . AL 05. es end ? je cend cmp aux. 0100h .. COLUMNA 28 HASTA FILA 14. ¿ES TAB??? JE TABs . 0109h .----------------------------------------------------------------------------------------START PROC FAR MOV AH. 010dh .call backspace CALL TAB RET cend: call doend chome: call home ret INSERT ENDP . es tecla de funcion ? je clinea CMP Ax. PARA CON ENTER Y LLENA DE ESPACIOS mov ah. NÚMERO DE PÁGINA INT 10H . FONDO . 00H . DX. 40h ja clinea jmp ingreso clinea: CALL CAMBIO ret COPIS: CALL COPY RET TABs: . PARA HACER UN CUADRITO DE COLOR PARA METER LAS INSTRUCCIONES ADENTRO :) MOV MOV MOV MOV INT AX.

050CH) CICLO: CMP CONTADOR.09H JE EXIT1 CALL INSERT JMP CICLO RET EXIT1: CALL EXIT START ENDP .SALIDA AL DOS MOV AX. . DH. AX 00H 03H . . CARGO A AH 00H .MOV MOV MOV MOV INT AH. 10H 02H 0 00H 0H .----------------------------------------------------------------------------------------BEGIN PROC FAR MOV AX. MOV AL.LLAMA AL PROCEDIMIENTO Q EMPIEZA A DIBUJAR . .4C00H INT 21H BEGIN ENDP END BEGIN . INICIALIZAR AREA DE DATOS . BH.----------------------------------------------------------------------------------------- . DL. PETICIÓN NÚMERO DE PÁGINA EMPIEZA EN LA 0 FILA 0 COLUMNA 0 (MOV DX. MOV MOV AH. INT 10H @DATA DS. ASIGNA MODO TEXTO A COLOR 80X25 CALL START .

definicion de datos arreglo db 80 dup (?). 02H MOV DL. 0dh. 0dh.2007 Universidad del Valle de Guatemala . Nery Guzman .txt". 0dh.0 . 0ah.model small . área de entrada copi db 80 dup () dataToWrite2 db ''.data . 0ah. '$' 'error al escribir en el archivo'. '$' contador db 0 cont db 0 tabulador db ' '.file to be opened filename4 db "a:\test3.área de caracteres a copiar entrada db 80 dup (?).---------------------------------------------------------------------.txt".stack 64 .file to be opened filedescriptor datatowrite errorcreating errorwriting success pressakey blur openerror readerror buffer zum zum2 bye archivo'. 0dh. '$' 'presione una tecla para salir $' 0 "an error has occured(opening)!$" "an error has occured(reading)!$" 101 dup (?) . copy paste . '$' 'error al crear el archivo'. ''.'$' fila db 0 aux db 0 loc db 0 renglon db 0 pagina db 0 pag db 0 aski db 0 cursor db 0 kursor dw 0 handler dw ? . 0ah.com/help-pc/ pagina de referencia donde estan las interrupciones .huihoo.variable to store file handle filename db "a:\test..'$' 'archivo creado con exito'.txt". '$' bye2 dw db db db db dw db db db db db ? 80 dup (?) . y abrir archivos de texto en distintas paginas de memoria title . ESTO INT 21H ENDM .file to be opened filename3 db "a:\test4.0 .find replace ENTERS MACRO ESTO MOV AH.buffer to store data from 0 0 ' Desea guardar el ' Y/N '. db db db .0 .file to be opened filename1 db "a:\test2. 0ah. '$' . 0ah.http://docs. '$' .file to be opened filename2 db "a:\manual.txt". 0dh. todo list .0 .txt".0 . programa editor de texto mas avanzado que permite crear archivos en una locacion .

3c00h . 4c00h . 'Su archivo ha cargado exitosamente'. 0 call home call getcursor mov dx.file one bigger for $ .0fh int 10h . 0000h . zum . crear archivo xor cx. errorcreating call cout jmp endprogram werror: lea dx. salir al dos int 21h ret grabararchivo endp . nombre del archivo int 21h mov filedescriptor. filename .'$' . columna 0 (mov dx. zum2 int 10h mov blur. 0000h lup: . pressakey call cout call cin mov ax.'$' guardar guardado'. cx = 0.---------------------------------------------------------------------getpagina proc far mov ah.---------------------------------------------------------------------grabararchivo proc far call createfile jc cerror call writefile jc werror lea dx. '$' nosave '$' cargar db db db ' ' Su archivo ha sido No se guardo el archivo'. 0000h mov bx . cx . petición mov bh. número de página mov dh.guarda el handler ret createfile endp . ax .-----------------------------------------------------------createfile proc near mov ax. success call cout jmp endprogram cerror: lea dx. atributo normal lea dx. pagina .code . errorwriting call cout endprogram: lea dx.guardar el manejador . bh ret getpagina endp .------------------------------------------------------------writefile proc near mov pagina. se guarda en bh el numero de pagina actual mov pagina. 050ch) mov dl.call backspace mov ah. 02h .

filedescriptor mov cx. 21 .data int 21h mov ax.se usa para poner el cursor al principio mov ah. 80 . pagina int 10h mov bx.dx mov cursor.este proceso sirve para conseguir las coordenadas del cursor en cualquier momento mov ah.-----------------------------------------------------------cin proc near mov ax.3 je pagina3 . entrada . se incrementa el contador cmp zum.03h mov bh.copiar2: mov bh. 2 lea dx. al . de el registro se pasa al buffer de copiado call mright . si es menor brina a hacer el ciclo de nuevo mov ax.escribir a archivo mov bx. 3 jb lup ret writefile endp .00h .dh ret getcursor endp . se compara con las 14 lineas posibles en el editor jne lup inc pagina cmp pagina.---------------------------------------------------------------------ponerhandler proc far cmp pagina. se avanza hacia la derecha inc blur cmp bl.1 je pagina1 cmp pagina. datatowrite2 . 4000h . 0900h int 21h ret cout endp . 80 . filedescriptor .carga el nombre del archivo mov cx.-----------------------------------------------------------cout proc near mov ax.-----------------------------------------------------------getcursor proc far call getpagina .0 je paginaz cmp pagina.se usa para ingresar o simular los enter depues de 80 caracteres :p int 21h inc zum . 4000h . compara con el limite de caracteres jb copiar2 . 08h mov bh.pagina int 10h mov ax. 0a00h int 21h ret cin endp .escribir a archivo mov bx.2 je pagina2 cmp pagina. numero de bytes a escribir lea dx. blur mov entrada[bx].

3 ret ponerhandler endp .2 .3 ret pagina2: mov pagina.3Dh .FileName .put address of fileneame in dx mov al.read and write mov ah.put address of fileneame in dx mov al.read and write mov ah.save file handle for later . 0 . 02h mov bh. 0 .access mode . 050ch) .3 ret pagina1: mov pagina.0 lea dx.3 lea dx.ax .nombre del archivo lupi22: mov al.cmp Handler.function 3Dh -open a file int 21h .cmp Handler.jc Errorabrir2a mov bp.jc Errorabrir2a mov bp.3Dh .save file handle for later .save file handle for later .3Dh .FileName .read and write mov ah. 0 .call DOS service mov Handler. 0 jc errorAbrir22 mov bp.jc Errorabrir2a mov bp. 0h int 10h . 10 salto_x22: mov ah.put address of fileneame in dx mov al.function 3Dh -open a file int 21h .ax . petición .put address of fileneame in dx mov al.access mode .FileName . 0 . columna 0 (mov dx.paginaz: mov pagina.---------------------------------------------------------------------abrirarchivo proc far lea dx.jc Errorabrir2a mov bp.cmp Handler.call DOS service mov Handler.ax .call DOS service mov Handler.FileName .funcion para abrirlo int 21h mov handler. número de página .filename .cmp Handler.2 lea dx.access mode . pagina mov dl.2 .2 .function 3Dh -open a file int 21h .ax .function 3Dh -open a file int 21h .2 .grabar el manejador cmp handler.funcion de leer y escribir mov ah.2 .3dh .3 ret pagina3: mov pagina.save file handle for later .read and write mov ah.call DOS service mov Handler.3Dh .ax .1 lea dx.access mode .

"$" .se direcciona el buffer en dx mov bx. pagina .offset openerror mov ah. 0 jne salto_x22 mov bx.4c01h int 21h ret errorLeer22: mov dx. columna 0 (mov dx.09h int 21h mov ax.call backspace mov ah.3fh .offset buffer .9 .0h ret home endp . cargar int 21h ret abrirarchivo endp . 0 jc errorLeer22 mov di.---------------------------------------------------------------------tab proc far call getcursor cmp dl.offset readerror mov ah.offset buffer+101 .funcion para leer int 21h cmp handler.90 .handler mov cx. 09h lea dx.3eh int 21h ret errorAbrir22: mov dx. 050ch) int 10h mov aux. petición mov bh.los bytes q se leeran del archivo mov ah.imprime mov dx.4c02h int 21h ret mov ah.09h int 21h mov ax.sirve para decir donde poner el terminador de cadena mov byte ptr [di].mov dx.offset buffer int 21h dec bp cmp bp.handler mov ah.0h mov contador.dx . 55 .lo pone en [es:di] mov ah. 0h . número de página mov dl. 02h .---------------------------------------------------------------------home proc far call getpagina call getcursor mov kursor.

pagina . 02h . petición mov bh.---------------------------------------------------------------------goend proc far call getpagina call getcursor mov dx.ja nohacer . petición mov bh.---------------------------------------------------------------------ascii proc far call getpagina . se incrementa la linea call getcursor .se dice cuantas veces se va a imprimir en la pocision del cursor esa letra int 10h . se llaman las coordenadas del cursor para avanzar add dl.04h mov ah. 02h .0h ret cambio endp . 02h . zaz avanza uno el cursor para simular el avanze de un space despues de un tecladazo :0) ret ascii endp .aski . se llama al modo ingresar caracter mov al. número de página mov dh. número de página int 10h mov contador.contador mov ah. se le restan 4 caracteres al texto actual nohacer: ret tab endp .0h ret goend endp .01 . que hace que corra el cursor 4 espacios para tabular int 10h add aux. fila x mov dl.0ah . se guarda el aski metido anteriormente en la variable aski mov bh. petición mov bh.----------------------------------------------------------------------copiar proc far exit proc far mov ax. se avanza un espacio el cursor mov ah.pagina . columna 0 para empezar la linea int 10h mov aux. 0 . 02h .se llama las coordenadas de la pagina mov ah.salida al dos int 21h exit endp .01h mov al.---------------------------------------------------------------------- . se pone la pagina int 10h . pagina .01h . kursor mov ah. pagina . se llama la pagina actual .4c00h . pagina . zaz interrupcion inc aux . para que no deje hacer tabulador fuera del limite de caracteres :p add dl.se pone la pagina actual mov cx.proceso para cambiar de linea despues de que ya termino de escribir add contador.04h . contador . petición mov bh.---------------------------------------------------------------------cambio proc far call getpagina .

si si cmp ax. 2f16h je paste cmp ax.compara si ya llego al final de la linea adimitido ja clinea . si si brinka a teclado extendido cmp ax.es backspace? je cback . ¿es tab??? je tabs . esto hace la peticion para escribir 80 caracteres por linea .si ya llego entonces brinka a cambio de linea simula enter jmp ingreso . es enter ?? je clinea . al cmp al.10h int 16h mov aski.0h call funcionloka ret ctcladoex: call tecladoextra ret insert endp .---------------------------------------------------------------------copiar proc far call getpagina call home mov blur. 1c0dh . 2d18h je cut call ascii .0h mov contador. si cmp ax. 0e08h . 0000h . es tecla de funcion ? je cfuncion . si no es tecla especial brinka a meter el asciii cmp aux.si no simula de nuevo la entrada para seguir metiendo askis clinea: call cambio ret copis: call copiar ret paste: call pegar ret cut: call cortar ret cback: call getpagina call backspace ret tabs: call getpagina call tab ret cfuncion: mov aux.0e0h .es ctrl c je copis cmp ax. si si brinka a teclado extendido cmp al.si si brinka a backspace :p cmp ax.00h . 2e03h . para con enter y llena de espacios ingreso: mov ah.insert proc far . 0f09h .es tecla de teclado extendido? je ctcladoex . 40h .

mov bx . se avanza hacia la derecha inc blur cmp bl. al mov [es:di].---------------------------------------------------------------------. se pone la pagina int 10h .---------------------------------------------------------------------pegar proc near call home mov ah. blur mov arreglo[bx]. 09h . 80 jb copying ret copiar endp . pagina . arreglo int 21h ret pegar endp . 10 call home dcut: mov al. 0 mov cx. pagina . 0000h copyloko: copying: mov bh. 02h .00h mov ah.---------------------------------------------------------------------backspace proc far call getcursor cmp dl.---------------------------------------------------------------------tecladoextra proc far cmp ax.muestra mensaje en pantalla lea dx.si es home lo q presiono .---------------------------------------------------------------------cortar proc near mov bx. 47e0h . zaz se atrasa 2 veces porque el metodo ascii avanza uno entonces solo hubiera dejado un espacio en blanco dx ! dont: ret backspace endp . 02h . se atraza un espacio el cursor mov ah. 08h mov bh. zaz avanza uno el cursor para simular el avanze de un space despues de un tecladazo :0) mov aski.20h call ascii add dl.-01h . al . petición mov bh.0h je dont add dl. [es:di] mov arreglo[bx]. petición mov bh. de el registro se pasa al buffer de copiado call mright .es home ? je chome . se pone la pagina int 10h . se atraza un espacio el cursor mov ah. pagina int 10h mov bx. 720h inc bx push cx call mright pop cx loop dcut ret cortar endp .-01h .

si es igual entonces brinca a con pagedown .si si entonces brikca . es flecha abajo .es end? . 3fh jne s5 call f5 s5: cmp ah. 3bh jne s1 call f1 s1: cmp ah. 48e0h je cup cup: . 41h je goout cmp ah. 01h . 3ch jne s2 call f2 s2: cmp ah.es page down? . 3eh jne s4 call f4 s4: cmp ah. 3dh jne s3 call f3 s3: cmp ah.es flechita a la derecha? .50e0h je cdown cmp ax. 4be0h je cizkierda cmp ax.---------------------------------------------------------------------funcionloka proc far cmp ah.es flechita a la izquierda? .si es end brinka . 4de0h je cderecha cmp ax.es flecha arriba call movup ret cdown: call movdown ret cderecha: call mright ret cizkierda: call mleft ret cpagedown: call pages ret cpageup: call pages ret chome: call home ret cend: call goend ret tecladoextra endp .es page up? . 4fe0h je cend cmp ax. 51e0h je cpagedown cmp ax. 49e0h je cpageup cmp ax.cmp ax.

desde fila 10. 05h . 53h jne s9 call delete cmp ax. fondo café con primer plano azul mov cx. petición mov al. 61h . 0ffffh . pagina .---------------------------------------------------------------------delete proc near mov [es:di]. 0605h . columna 28 mov dx. 2e18h jne s12 call cortar s8: s9: s10: s11: s12: jmp final goout: call salida final: ret funcionloka endp . hasta fila 14. 0000h . 5 lineas mov bh. 2e03h jne s10 call copiar jmp goout cmp ax. 00h mov dx. 51h jne s8 call pages cmp ah. hace un cuadro de color para meter las instrucciones adentro call menu . petición mov al. 720h ret delete endp .---------------------------------------------------------------------menu proc far cuatro: mov ah. al 05. número de página int 10h mov ah. número de página int 10h . 2e10h jne s11 call pegar cmp ax. 05h . 49h jne s7 call pages s7: cmp ah. 0000h . 00h .je goout cmp ah. hace un cuadro de color para meter las instrucciones adentro mov ax.02h mov bh. 4 jb cuatro ret menu endp .---------------------------------------------------------------------start proc far mov ah. columna 52 int 10h add pagina.1 cmp pagina.

2 int 10h mov ah. pagina . petición mov bh.filename2 .14h je exit1 call insert jmp ciclo ret exit1: call exit start endp .---------------------------------------------------------------------f5 proc near lea dx.Este proceso se encarga de limpiar lo que se encuentra en la pagina .---------------------------------------------------------------------. número de página empieza en la 0 mov dh.funcion para abrirlo int 21h mov handler. 00h .2 . f3 o f4 estos procesos se encargan de . 0h .funcion de leer y escribir mov ah.3dh . 050ch) int 10h mov aux. 05 mov dl.---------------------------------------------------------------------. 05h mov al. columna 0 (mov dx.---------------------------------------------------------------------f1 proc near mov pagina.0 y la columna 0 .nombre del archivo lupi2: mov al. 0 call abrirarchivo ret f1 endp .ax .actual .---------------------------------------------------------------------f4 proc near ret f4 endp . 00 ret f3 endp .---------------------------------------------------------------------f3 proc near mov ah. 02h .cambiar de pagina de la 0 a la 3 y colocar el cursor en la fila . f2.ciclo: cmp contador. fila 0 mov dl.cuando se presiona f1. 02h mov bh.---------------------------------------------------------------------f2 proc near call grabarArchivo ret f2 endp . 2 mov dh. 12 int 10h call getpagina mov ah.grabar el manejador .

90 .---------------------------------------------------------------------pages proc near cmp pag. 3 jne change mov pag.cmp handler.offset openerror mov ah.offset buffer . 09h lea dx.9 . 0 jne salto_x2 mov bx. petición mov al. 02h bh. -1 change: inc pag mov ah.funcion para leer int 21h cmp handler.imprime mov dx.3eh int 21h ret errorAbrir2: mov dx. 050ch) mov dx.cuando se utilizan las teclas pageup y pagedown invocan a este metodo ."$" .handler mov cx.4c01h int 21h ret errorLeer2: mov dx. 10 salto_x2: mov mov mov int ah.offset buffer+101 .se direcciona el buffer en dx mov bx. petición .09h int 21h mov ax. número de página . pag .09h int 21h mov ax.sirve para decir donde poner el terminador de cadena mov byte ptr [di]. columna 0 (mov dx. número de página .lo pone en [es:di] mov ah.offset buffer int 21h dec bp cmp bp. 0h 10h .para poder recorrer de la pag 0 a la 3 de forma circular . pagina dl.handler mov ah. 0 jc errorLeer2 mov di.---------------------------------------------------------------------.los bytes q se leeran del archivo mov ah.3fh . 0 jc errorAbrir2 mov bp. cargar int 21h ret f5 endp . 05h .offset readerror mov ah.4c02h int 21h ret mov ah.

petición add dl.---------------------------------------------------------------------movup proc near call getcursor mov kursor. 02h mov bh. 02h .---------------------------------------------------------------------movdown proc near call getcursor mov kursor. número de página empieza en la 0 int 10h add aux. pagina . 02h . pagina . número de página empieza en la 0 int 10h fin3: ret movdown endp . en la fila y columna 0. 3 mov dh. 00 .01h mov bh.13h je fin3 mov ah.-01h mov bh.40h je fin4 mov ah.0h je fin5 mov ah.-1h mov bh. int 10h ret pages endp . 02h .---------------------------------------------------------------------. número de página empieza en la 0 int 10h fin2: ret . esta parte se encarga de colocar el cursor mov dl.derecha .---------------------------------------------------------------------mright proc far call getcursor mov kursor. dx cmp dh. dx cmp dl. 00 . pagina .1h mov bh.0 je fin2 mov ah.---------------------------------------------------------------------mleft proc far call getcursor mov kursor. número de página empieza en la 0 int 10h add aux.int 10h mov ah. 02h . petición add dh. dx cmp dh. petición add dh. 01h fin4: ret endp .este proceso se encarga del movimiento de las flechas izquierda y . pagina . petición add dl. -01h fin5: ret endp . dx cmp dl.

184fh int 10h mov ax.4c00h . @data . 0 int 10h mov ax. 07h mov cx.---------------------------------------------------------------------begin proc far mov ax. 03h . 05h . inicializar area de datos mov ds.movup endp . asigna modo texto a color 80x25 int 10h call start . 00h .llama al procedimiento q empieza a dibujar salida: mov ah. 0600h mov bh.salida al dos int 21h begin endp end begin . ax mov ah. 0000 mov dx. salida de protocolo dx mov al.---------------------------------------------------------------------- . cargo a ah 00h mov al.

PROGRAMACION EN ASSEMBLER .MACRO PARA REESTABLECER LOS REGISTROS POP AX MOV FILA.---------------------------------------------------------------------SACAR MACRO . WALTER SEGURA 06151 . 4 JE CICLOINIC3 CICLOINIC1: PUSH SEG CUADRANTE2 PUSH OFFSET CUADRANTE2 METER MOV [WORD PTR VECTORSP+NUMI]. FILA PUSH AX ENDM . FACULTAD DE INGENIERIA . PROGRAMA EL CUAL REALIZA CUATRO PORCESOS SIMULTANEOS . 0 MOV AL. UNIVERSIDAD DEL VALLE DE GUATEMALA .**************************************************************** .--------------------------------------------------------------------------INIC MACRO NUMI. PROYECTO 3 METER MACRO . WORD PTR VECTORSP[NUMI] PUSHF MOV AL. AL POP DX POP BX POP AX POP CX POP SI ENDM . AL POP AX MOV COLUMNA.MACRO PARA GUARDAR LOS REGISTROS ACTUALES PUSH SI PUSH CX PUSH AX PUSH BX PUSH DX MOV AX.. SP JMP FINALIC . CATEDRATICA: MARTHA LIGIA NARANJO .MUEVE AL BS Y AL SP LOS VECTORES . X .RECIBE DE PARAMETRO EL NUMERO DE PROCESO LOCAL CICLOINIC2 LOCAL CICLOINIC3 LOCAL FINALIC MOV BP. COLUMNA PUSH AX MOV AL.**************************************************************** .MACRO DE INICIALIZACION LOCAL CICLOINIC1 . WORD PTR VECTORBP[NUMI] CORRESPONDIENTES MOV SP. 2 JE CICLOINIC1 CMP AL. NERY GUZMAN . X CMP AL. 3 JE CICLOINIC2 CMP AL.

CICLOINIC2: PUSH SEG CUADRANTE3 PUSH OFFSET CUADRANTE3 METER MOV [WORD PTR VECTORSP+NUMI].MODEL LARGE VSEGMENT SEGMENT AT 0B800H . 1H CALL MOSTRAR CALL DIBUJAR1 JMP DIBUJOS1RET .AX . SP JMP FINALIC CICLOINIC3: PUSH SEG CUADRANTE4 PUSH OFFSET CUADRANTE4 METER MOV [WORD PTR VECTORSP+NUMI]. SP FINALIC: ENDM . PROCEDIMIENTO PARA EL DESPLIEGUE DE LA PAGINA 1 UNO PROC NEAR MOV AH.VARIABLE DEL ATRIBUTO DE LA PRIMERA PAGINA FILA DB 2 COLUMNA DB 0 CODIGO DB ? .0 RET UNO ENDP .STACK 64 .-------------------------------------------------------------------.DATA ATRIBUTO DB 10H .VARIABLE QUE GUARDA LA OPCION VECTORBP DW 4 DUP(1000H) VECTORSP DW 4 DUP(1000H) RELOJVIEJO DD ? . BANDERA PARA TERMINAR NUMI DB 0 X DB 0 .0B800H . SE CARGA AL REGISTRO ES LA DIRECC MEM MOV DI.------------------------------------------------------------------.PROCEDIMIENTO QUE CREA EL DIBUJO DE LOS CUADRANTES 1 Y 4 DIBUJO1 PROC NEAR CMP ATRIBUTO. 57H JE RESETAT SUMAAT: ADD ATRIBUTO. INICIO DEL CODIGO . 05H . PETICIÓN MOV AL. 0 .--------------------------------------------------------------------. DIRECCIÓN DE INICIO DE MEMORIA DE VIDEO PAGINA 0 MOV ES.CODE . GUARDA DIRECCIONES ANTIGUAS TECLADOVIEJO DD ? OPCION DW 0 BANDERA DB ? . NÚMERO DE PÁGINA INT 10H MOV AX. --------------------------------------------------------------.--------------------------------------------------------------------------.

RESETAT: MOV ATRIBUTO. 10H JMP SUMAAT DIBUJOS1RET: RET DIBUJO1 ENDP . 37H JE RESETAT2 SUMAAT2: ADD ATRIBUTO. 1H CALL MOSTRAR CALL DIBUJAR CALL DIBUJAR CALL DIBUJAR CALL DIBUJAR JMP DIBUJOS2RET RESETAT2: MOV ATRIBUTO.PROCEDIMENTO QUE DIBUJA UNA PARTE DEL DIBUJO 2 DIBUJAR PROC NEAR CALL DERECHA CALL VERTICALDOWN CALL DERECHA CALL VERTICALUP .--------------------------------------------------------------------.PROCEDIEMINTEO EL CUAL DIBUJA UN CUADRADO CUANDO ES LLAMADO DIBUJAR1 PROC NEAR CALL DERECHA CALL DERECHA CALL DERECHA CALL DERECHA CALL DERECHA CALL VERTICALUP INC COLUMNA INC COLUMNA CALL MOVE CALL IZQUIERDA CALL IZQUIERDA CALL IZQUIERDA CALL IZQUIERDA CALL IZQUIERDA DEC COLUMNA CALL MOVE CALL MOSTRAR CALL VERTICALDOWN DIBUJO1RET: RET DIBUJAR1 ENDP .---------------------------------------------------------------------.PROCEDIMIENTO QUE CREA EL DIBUJO DE LOS CUADRANTES 2 Y 3 DIBUJO2 PROC NEAR CMP ATRIBUTO. 10H JMP SUMAAT2 DIBUJOS2RET: RET DIBUJO2 ENDP .---------------------------------------------------------------------.

SE MUEVE CINCO ESPACIOS A LA DERECHA Y EN CADA ESPACIO MUESTRA UN CARACTER DERECHA PROC NEAR INC COLUMNA CALL MOVE CALL MOSTRAR INC COLUMNA CALL MOVE CALL MOSTRAR INC COLUMNA CALL MOVE CALL MOSTRAR INC COLUMNA CALL MOVE CALL MOSTRAR INC COLUMNA CALL MOVE CALL MOSTRAR RET DERECHA ENDP .SE MUEVE 5 ESPACIOS A LA IZQUIERDA IMPRIMIENDO EL CARACTER EN CADA ESPACIO IZQUIERDA PROC NEAR DEC COLUMNA CALL MOVE CALL MOSTRAR DEC COLUMNA CALL MOVE CALL MOSTRAR DEC COLUMNA CALL MOVE CALL MOSTRAR DEC COLUMNA CALL MOVE CALL MOSTRAR DEC COLUMNA CALL MOVE CALL MOSTRAR IZRET: RET IZQUIERDA ENDP .----------------------------------------------------------------------.----------------------------------------------------------------------.----------------------------------------------------------------------.RET DIBUJAR ENDP .PROCEDIENTO EL CUAL EL SE MUEVE HACIA ARRIBA IMPRIMIENDO EL CARACTER VERTICALUP PROC NEAR INC FILA INC FILA CALL MOVE CALL MOSTRAR INC FILA .

20H . SE REPITE DOS MIL VECES QUE ES PANTALLA COMPLETA MOV AX. 184FH . SE MANDA LA PANTALLA COMPLETA MOV BH. 0 .-----------------------------------------------------------------------. DESDE LA POSICION 00 MOV DX.LIMPIA LA PANTALLA LLENANDOLA DE ESPACIO EN BLANCO CLEAR PROC NEAR MOV AX. FILA . ATRIBUTO MOV CX. 1 INT 10H RET MOSTRAR ENDP . 2AH MOV BL.MUESTRA UN CARACTER EN DONDE SE ENCUENTRE EL CURSOR MOSTRAR PROC NEAR MOV AH.--------------------------------------------------------------------------. 09H MOV AL.-------------------------------------------------------------------. EN LA COLUMNA QUE SE QUIERE MOV DH. DESDE LA POSICION OO MOV CX.2000 . EN LA FILA QUE SE QUIERE INT 10H RET MOVE ENDP . 0600H .0 . 02H .--------------------------------------------------------------------.POSICIONA EL CURSOR DEPENDIENDO LAS VARIABLES FILA Y COLUMNA MOVE PROC NEAR MOV AH. CARACTER VACIO . ESQUINA INFERIOR DERECHA INT 10H MOV DI. HASTA LA ULTIMA POSICION. 0007H MOV CX. SE PIDE UN SET DE CURSOR MOV BH.INC FILA CALL MOVE CALL MOSTRAR INC FILA INC FILA DEC COLUMNA CALL MOVE RET VERTICALUP ENDP . EN LA PAGINA EN DONDE SE DESEA MOV DL. COLUMNA .PROCEDIENTO EL CUAL EL SE MUEVE HACIA ABAJO IMPRIMIENDO EL CARACTER VERTICALDOWN PROC NEAR DEC FILA DEC FILA CALL MOVE CALL MOSTRAR DEC FILA DEC FILA CALL MOVE CALL MOSTRAR DEC FILA DEC FILA DEC COLUMNA CALL MOVE RET VERTICALDOWN ENDP . 0000H .

4 MOV FILA. 2 JE CUADRANTE1RET CUAD1: MOV COLUMNA.SI ES LA TECLA 1 SE SALE DEL PROGRAMA JE CUADRANTE1RET JMP CUAD1 .SI ES TECLA 1 SE SALE DEL PROGRAMA . SI SE PRESIONA UNA TECLA DURANTE LA IMPRESION SE .SI ES CUALQUIER OTRA TECLA SE IGNORA RET CUADRANTE2 ENDP .DE LO CONTRARIO SIGUE IMPRIMIENDO PRIMERO: MOV AH.-----------------------------------------------------------------CUADRANTE2 PROC NEAR CMP BANDERA. 2 JE CUADRANTE2RET CUAD2: MOV COLUMNA. 1 MOV FILA. 01H INT 16H JNZ SEGUNDO DETIENE JMP CUAD2 . 07H INT 21H CMP AL. SE MIRA EL ESTADO DEL BUFFER . 07H INT 21H CMP AL. SE MIRA EL ESTADO DEL BUFFER . SI SE PRESIONA UNA TECLA DURANTE LA IMPRESION SE . 2 JE CUADRANTE3RET CUAD3: . 4 CALL MOVE CALL DIBUJO1 MOV AH. SE IMPRIME EN PANTALLA RET CLEAR ENDP . 01H INT 16H JNZ PRIMERO DETIENE JMP CUAD1 . 31H JE CUADRANTE2RET JMP CUAD2 CUADRANTE2RET: . 22 CALL MOVE CALL DIBUJO2 MOV AH.DE LO CONTRARIO SIGUE IMPRIMIENDO SEGUNDO: MOV AH.REP STOSW .--------------------------------------------------------------------CUADRANTE3 PROC NEAR CMP BANDERA.---------------------------------------------------------------------CUADRANTE1 PROC NEAR CALL CLEAR CMP BANDERA.SI ES CUALQUIER OTRA TECLA SE IGNORA CUADRANTE1RET: RET CUADRANTE1 ENDP . 31H .

SI SE PRESIONA UNA TECLA DURANTE LA IMPRESION SE DETIENE JMP CUAD4 . 3 . SE MIRA EL ESTADO DEL BUFFER INT 16H JNZ TERCERO . 43 MOV FILA.SE HACE UN CICLO LLENANDO ASI 4 SEGMENTOS ADD BX. 07H INT 21H CMP AL.DETIENE MOV COLUMNA. SI SE PRESIONA UNA TECLA DURANTE LA IMPRESION SE JMP CUAD3 . BP MOV WORD PTR [VECTORSP]. 07H INT 21H CMP AL.-----------------------------------------------------------------------CUADRANTE4 PROC NEAR CMP BANDERA. 31H JE CUADRANTE3RET JMP CUAD3 CUADRANTE3RET: RET CUADRANTE3 ENDP . 2 .ACA SE INICIALIZAN LOS SEGMENTOS A UTILIZAR MOV WORD PTR [VECTORBP].CADA UNO DE 1000H MOV VECTORBP[BX]. SP MOV CX. . 3 INIC 2. 1000H .POR MEDIO DE ESTE MACRO SE DIRECCIONA CORRECTAMENTE INIC 4. SE MIRA EL ESTADO DEL BUFFER INT 16H JNZ CUARTO . 3 MOV BX. AX MOV VECTORSP[BX]. VECTORBP[BX] . 10 CALL MOVE CALL DIBUJO2 MOV AH.DE LO CONTRARIO SIGUE IMPRIMIENDO TERCERO: MOV AH. 50 MOV FILA. Y CADA CUADRANTE EN SI.DE LO CONTRARIO SIGUE IMPRIMIENDO CUARTO: MOV AH. 2 JE CUADRANTE4RET CUAD4: MOV COLUMNA. INIC 6. 2 ADD AX. SP MOV CX. 4 .CADA PROCESO CON SU RESPECTIVA AREA DE DATOS. AX LOOP INICIALIZA MOV [WORD PTR VECTORSP]. 01H . 31H JE CUADRANTE4RET JMP CUAD4 CUADRANTE4RET: RET CUADRANTE4 ENDP .-----------------------------------------------------------------------INICIALIZACIONES PROC NEAR . 0 INICIALIZA: MOV AX. 15 CALL MOVE CALL DIBUJO1 MOV AH. 01H .

NO DEJA INTERRRUPCIONES EXTERNAS PUSHF CALL DWORD PTR RELOJVIEJO . 2 . [WORD PTR VECTORBP] RET INICIALIZACIONES ENDP .------------------------------------------------ACTUALIZAR PROC NEAR CMP OPCION.LUEGO SE METE EN SP Y BP LAS COORDENADAS CORRESPONDIENTES MOV BP. 6 .SE PONE EN LA DIRECCION OBTENIDA MOV DX.-------------------------------------------------------------------------------------------------------------------------------NUEVORELOJ PROC NEAR MOV AH. AX . BX .ACA SE COMPARA JE GIRAR ADD OPCION. 2 JMP ACTUALIZARET GIRAR: MOV OPCION. CON OPCION SE SABE QUE PROCEDIMIENTO SE USARA MOV SP. SE GUARDA EL RELOJ VIEJO METER . 0 ACTUALIZARET: RET ACTUALIZAR ENDP .SE METE EL BX A LA DIRECCION DEL RELOJVIEJO PUSH DS MOV AX. 08H INT 21H POP DS RET NUEVORELOJ ENDP . OPCION . [OFFSET VECTORSP+BX] .SE OBTIENE LA DIRECCION DE DONDE ESTA LA ETIKETA MOV DS. [WORD PTR VECTORSP] .-------------------------------------------------------------------------------------------------------------------------------TECLADONUEVO PROC NEAR CLI PUSHF CALL DWORD PTR TECLADOVIEJO MOV BANDERA.SE INGRESA EN BX LA OPCION MOV [OFFSET VECTORSP+BX].MOV SP. SEG RELOJNUEVO . SP . 35H .-------------------------------------------------------------------------------------------------------------------------------RELOJNUEVO PROC NEAR CLI . ES . 08H INT 21H MOV [WORD PTR RELOJVIEJO+2].INT DEL RELOJ MOV AL. SE LLAMA AL MACRO QUE HACE PUSH A LOS REGS MOV BX. SE HACE POP A LOS REGS STI IRET RELOJNUEVO ENDP . OFFSET RELOJNUEVO .INT DEL RELOJ MOV AL.SE METE LA DIRECCION DEL ES AL RELOJ VIEJO +2 MOV [WORD PTR RELOJVIEJO]. OPCION .GUARDAMOS EL DESPLAZAMIENTO DE RELOJNUEVO MOV AH. 25H . SE METE OPCION EN BX Y SE UTILIZA PARA EL NUEVO SP SACAR . SE MUEVE EL VALOR DEL SP AL VECTOR ACTUAL CALL ACTUALIZAR MOV BX.

REGRESA LA INTERRUPCION DEL RELOJ MOV DS. 35H MOV AL. 09H INT 21H . SEG TECLADONUEVO . [WORD PTR TECLADOVIEJO] MOV AH. BX PUSH DS MOV AX. AX MOV DX.STI IRET TECLADONUEVO ENDP . 25H MOV AL.INICIALIZA LOS DATOS Y SEGMENTOS .AX CALL UNO CALL CLEAR CALL INICIALIZACIONES CALL NUEVORELOJ CALL NEWKEYBOARD PUSH VSEGMENT POP ES ASSUME ES:VSEGMENT CALL CUADRANTE1 CALL CLEAR CALL RESTORE .PONE EL NUEVO TECLADO .REGRESA LOS VALORES INICIALES DE LAS INTERRUPCIONES MODIFICADAS RESTORE PROC NEAR CLI PUSH DS MOV AX.LIMPIA PANTALLA .-------------------------------------------------------------------------------------------------------------------------------NEWKEYBOARD PROC NEAR STD MOV AH.PONE EN ACCION EL SEGMENTO . 09H INT 21H .INTERRUPCION DE NEW KEYBOARD POP DS .GUARDA LA PILA .INTERRUPCION DE SETEO DE TECLADO MOV [WORD PTR TECLADOVIEJO+2]. AX MOV DX. 25H MOV AL. PROCEDIMIENTO PRINCIPAL MAIN PROC FAR MOV AX.@DATA MOV DS. AX MOV DX.SE REESTABLECE DS CLD RET NEWKEYBOARD ENDP .PONE EL NUEVO RELOJ .----------------------------------------------------------------------------. 09H INT 21H POP DS STI RET RESTORE ENDP . [WORD PTR TECLADOVIEJO+2] .ACA SE CAPTA EL OFFSET DE LA ETIKETA MOV AH.ACA SE CAPTA LA DIRECCION DE LA ETIKETA MOV DS. [WORD PTR RELOJVIEJO] MOV AH.SACA EL ES ACTUAL .SE MUEVE A LA ETIKETA EL ES ACTUAL MOV [WORD PTR TECLADOVIEJO]. 25H MOV AL.COMIENZA EL DIBUJO . 08H INT 21H MOV AX.-------------------------------------------------------------------------------. ES .PROCESO QUE LIMPIA . INICIALIZA SEGMENTO DE DATOS . [WORD PTR RELOJVIEJO+2] .SE RESTAURAN LAS INTERRUPCIONES . OFFSET TECLADONUEVO .REGRESA LA INTERRUPCION DEL TECLADO MOV DS.

4CH INT 21H MAIN ENDP END MAIN . CODIGO DE INTERRUPCI¢N 4CH: SALIDA AL DOS .SALIDA: MOV AH. 05H MOV AL. 0 INT 10H MOV AH. PETICIÓN . NÚMERO DE PÁGINA .

F2.'$' cad5 db 'BACKSPACE DEL AVPAG REPAG'.llama a getpagina para posicionarse .2007 Universidad del Valle de Guatemala .'$' fila db 0 aux db 0 loc db 0 renglon db 0 pagina db 0 pag db 0 aski db 0 cursor db 0 kursor dw 0 cad0 db 'MENU'. Nery Guzman .---------------------------------------------------------------------- .---------------------------------------------------------------------.com/help-pc/ pagina de referencia donde estan las interrupciones . . dh .'$' cad3 db 'F1.'$' .http://docs. pagina 10h ax.'$' cad2 db 'Teclas activas :'. editor de texto mas avanzado con teclas y funciones especiales. 03h bh.Metodo para obtener las coordenadas del cursor . 0fh int 10h pagina actual mov pagina.área de caracteres a copiar contador db 0 cont db 0 tabulador db ' '.Metodo para obtener la pagina actual en donde se encuentra el usuario .---------------------------------------------------------------------getpagina proc near mov ah.---------------------------------------------------------------------.'$' cad4 db 'HOME INS'.code .model small .huihoo.---------------------------------------------------------------------.---------------------------------------------------------------------getcursor proc near call getpagina en mov mov int mov mov ret ah.F3 '.data ..stack 64 . dx cursor. bh ret .se guarda en bh el numero de getpagina endp .definicion de datos entrada db 80 dup () .área de entrada arreglo db 80 dup (?) .---------------------------------------------------------------------.pagina actual getcursor endp .

04h mov ah.---------------------------------------------------------------------fin proc near call getpagina call getcursor mov dx.petición .Metodo que se encarga de cambiar de linea para cuando se esta .donde se encuentra el cursor . dx cmp dl. número de página . 55 ja terminar limite de caracteres add dl. kursor mov ah.04h terminar: ret tab endp . petición .Metodo que se utiliza cuando se presiona la tecla tab entonces deja .---------------------------------------------------------------------.que hace que corra el cursor 4 espacios para .insertando el texto .Metodo que nos lleva al principio de la linea en la que nos encontramos .call backspace mov ah. 050ch) home endp .---------------------------------------------------------------------tab proc near call getcursor mov kursor.---------------------------------------------------------------------cambio proc near . pagina tabular int 10h add aux.esto no permite que el tabulador pase fuera del . petición . 02h mov bh.---------------------------------------------------------------------. 02h mov bh.0h mov contador. pagina mov dl.actualmente .---------------------------------------------------------------------home proc near call getpagina call getcursor mov kursor. número de página ..4 espacios .Metodo que se llama con la tecla end esta va al final de la linea en .---------------------------------------------------------------------.dx .0h ret . columna 0 (mov dx. 02h mov bh. 0h int 10h mov aux.se le restan 4 caracteres al texto actual .0h ret ret fin endp . pagina int 10h mov contador.

01 .se pone la pagina int 10h . 0 int 10h mov aux. pagina . pagina .se atrasa 2 veces porque el metodo ascii avanza uno entonces solo hubiera dejado un espacio en blanco DX dont: ret .se pone la pagina int 10h .se incrementa la linea call getcursor . pagina mov dh.de borrar el caracter que se encuentra antes de donde esta el cursor .0h je dont add dl.se pone la pagina actual mov cx.call getpagina que ya termino de escribir add contador.----------------------------------------------------------------------backspace proc near call getcursor cmp dl.columna 0 para empezar la linea cambio endp .interrupcion inc aux .petición mov bh.se dice cuantas veces se va a imprimir en la pocision del cursor esa letra int 10h .01h mov al.se llama las coordenadas de la pagina . aski . 02h .---------------------------------------------------------------------ascii proc near call getpagina mov ah. 02h .20h call ascii add dl. 01h .avanza uno el cursor para simular el avanze de un space despues de un tecladazo mov aski.petición .avanza uno el cursor para simular el avanze de un space despues de un tecladazo ret ascii endp .-01h .-01h .se atraza un espacio el cursor mov ah.se llama la pagina actual .petición mov bh.dx ret .se atraza un espacio el cursor mov ah.---------------------------------------------------------------------.Metodo para desplegar en pantalla y guardar en la memoria de video .Metodo que se llama cuando se presiona la tecla backspace y se encarga . contador .número de página x . 02h mov bh.contador mov ah.se llaman las coordenadas del cursor para avanzar add dl.0h call getcursor mov kursor. pagina .se avanza un espacio el cursor mov ah.se pone la pagina int 10h .petición mov bh.fila mov dl.---------------------------------------------------------------------. 0ah mov al. pagina . 02h .se llama al modo ingresar caracter .se guarda el aski metido anteriormente en la variable aski mov bh.proceso para cambiar de linea despues de .

petición . 0 mov cx. pagina .---------------------------------------------------------------------cortar proc near mov bx. arreglo[bx] mov [es:di]. 80 dpaste: mov al.---------------------------------------------------------------------copiar proc far mov bx. 02h mov bh. F2. [es:di] mov arreglo[bx].backspace endp . 0 mov cx.0 y la columna 0 . 12 int 10h call getpagina mov ah.Cuando se presiona F1. 80 dcut: mov al. 05h .para cambiar de pagina mov al. al inc bx call mright loop copy ret copiar endp . 80 copy: mov al.---------------------------------------------------------------------f1 proc near mov ah. 0 .---------------------------------------------------------------------pegar proc near mov bx. 0 mov cx.y graba en memoria la linea donde se encuentra el cursor .cambiar de pagina de la 0 a la 3 y colocar el cursor en la fila . 720h inc bx call mright loop dcut ret cortar endp . [es:di] mov arreglo[bx]. al inc bx call mright loop dpaste ret pegar endp . al mov [es:di]. 05 mov dl. F3 o F4 estos procesos se encargan de . número de página empieza en la 0 . 0 mov dh.---------------------------------------------------------------------.pagina 0 int 10h mov ah. 02h mov bh.---------------------------------------------------------------------.Metodo que se llama al apachar la combinacion de teclas ctrl + c .

050ch) f4 proc near mov ah. fila 0 . petición . 05h . 050ch) mov ah. 0h int 10h mov aux. 00 call backspace ret f2 endp f3 proc near mov ah. 10h 02h 2 05 12 call getpagina mov ah.mov dh. 10h 02h 1 05 12 call getpagina mov ah. 0h int 10h mov aux. 05h mov al. 00h mov dl. dl. número de página empieza en la 0 . 00 call backspace ret f3 endp . 00h mov dl. fila 0 . petición . columna 0 (mov dx.00 call backspace ret f1 endp f2 proc near . pagina mov dh. dl. pagina mov dh. columna 0 (mov dx.para cambiar de pagina mov al. 050ch) mov aux. dh.pagina 1 int 10h mov mov mov mov int ah. 2 int 10h mov mov mov mov int ah. bh. columna 0 (mov dx. 02h mov bh. 1 . 0h int 10h . fila 0 . 05h . bh. 02h mov bh. número de página empieza en la 0 . 00h mov dl. dh.

3 mov dh. 0h int 10h call menu mov aux. 10h 02h 3 05 12 call getpagina mov ah. 050ch) f4 endp .---------------------------------------------------------------------mleft proc near call getcursor .---------------------------------------------------------------------. 0000 mov dx. -1 change: inc pag mov ah. 00 . columna 0 (mov dx.---------------------------------------------------------------------. 3 jne change mov pag. 02h mov bh.derecha . fila 0 . int 10h call backspace ret pages endp . pagina mov dh. 3 int 10h mov mov mov mov int ah. esta parte se encarga de colocar el cursor mov dl. 02h mov bh. 07h mov cx.Cuando se utilizan las teclas pageup y pagedown invocan a este metodo . bh. 0600h mov bh. dh. petición mov al. dl. 05h . en la fila y columna 0. 00 call backspace ret . número de página int 10h mov ah.para poder recorrer de la pag 0 a la 3 de forma circular . 00 . petición . pag .---------------------------------------------------------------------.Este proceso se encarga de limpiar lo que se encuentra en la pagina .mov al.---------------------------------------------------------------------pages proc near call backspace cmp pag.---------------------------------------------------------------------f5 proc near mov ax.Este proceso se encarga del movimiento de las flechas izquierda y . 184fh int 10h call menu ret f5 endp .actual . número de página empieza en la 0 . 00h mov dl.

número de página empieza en la 0 int 10h add contador. número de página empieza en la 0 int 10h add contador. dx cmp dl.0h je fin2 mov ah. 02h mov bh.---------------------------------------------------------------------movdown proc near call getcursor mov kursor.---------------------------------------------------------------------movup proc near call getcursor mov kursor. petición add dh. pagina . 02h . dx cmp dh.mov kursor. 00h int 10h gend: ret endp .1h mov bh.14h je fin3 mov ah. 02h mov bh. 00h int 10h find: ret endp . petición add dh. 02h . 0 je gend sub di.---------------------------------------------------------------------delete proc near . 2 dec dl mov ah.---------------------------------------------------------------------. 2 . aumenta el di inc dl mov ah. dx cmp dl. dx cmp dh.-1h mov bh.-01h fin2: ret movup endp . 01h fin3: ret movdown endp . 40h je find add di. bajas el di primero mright proc near call getcursor mov kursor. pagina .

si no es tecla especial brinca al asciii . 1c0dh .0e0h .sivamente va comparando y si no es ninguna de las opciones quiere decir .¿es tab??? je tabs .compara si ya llego al final de la linea adimitido . 2e03h .00h . al cmp ax. esto hace la peticion para escribir 80 caracteres por linea . 2f16h je paste cmp ax.si ya llego entonces brinca a cambio de linea simula . 40h ja clinea .---------------------------------------------------------------------menudo proc far cuatro: menudo endp .si si cmp al.---------------------------------------------------------------------insert proc far . 720h ret delete endp .si cmp ax.si si brinca a teclado extendido cmp ax.si si brinka a backspace :P cmp ax.es backspace? je cback .si si brinca a teclado extendido cmp al. 2d18h je cut call ascii cmp aux.es enter ?? je clinea .---------------------------------------------------------------------.es tecla de funcion ? je cfuncion . para con enter y llena de espacios ingreso: mov ah.mov [es:di].es tecla de teclado extendido? je ctcladoex .es ctrl c je copis cmp ax.que es texto a ingresar .10h int 16h call funcion mov aski. 0f09h .si es un tecla de funcion llama a sus respectivos metodos y asi suce. 0e08h .si no simula de nuevo la entrada para seguir metiendo askis enter jmp ingreso clinea: call cambio ret copis: call copiar ret paste: call pegar ret cut: call cortar ret cback: .Metodo que se encarga de verificar que caracter es el que esta entrando .

Metodo que se encarga de comprobar que tecla especial se presiono .y de acuerdo a ello se encarga de llamar a su respectivo metodo . es flecha abajo .si es home lo q presiono . 48e0h je cup cup: call movup ret .tabs: call getpagina call backspace ret call getpagina call tab ret cfuncion: mov aux.0h call funcion ret ctcladoex: call tecladoextra ret insert endp .---------------------------------------------------------------------tecladoextra proc near cmp ax.es flecha arriba cdown: call movdown ret cderecha: call mright ret cizkierda: call mleft ret cpagedown: call pages ret cpageup: .es flechita a la derecha? . 4fe0h je cend cmp ax.es flechita a la izquierda? .si si entonces brikca . 47e0h je chome cmp ax.si es end brinka . 49e0h je cpageup cmp ax.es page down? .si es igual entonces brinca a con pagedown .es page up? . 4de0h je cderecha cmp ax.0h mov contador. 4be0h je cizkierda cmp ax.es end? .es home ? .---------------------------------------------------------------------.50e0h je cdown cmp ax. 51e0h je cpagedown cmp ax.

41h je goout cmp ah. 3eh jne s4 call f4 cmp ah. 3ch jne s2 call f2 cmp ah. 49h jne s7 call pages cmp ah.---------------------------------------------------------------------funcion proc near cmp ah. 3dh jne s3 call f3 cmp ah. 3fh jne s5 call f5 cmp ah. 3bh jne s1 call f1 s1: cmp ah. 2e18h jne s12 call cortar jmp final s2: s3: s4: s5: s7: s8: s9: s10: s11: s12: goout: . 2e10h jne s11 call pegar cmp ax. 51h jne s8 call pages cmp ah. 53h jne s9 call delete cmp ax. 01h je goout cmp ah. 2e03h jne s10 call copiar jmp goout cmp ax.call pages ret chome: call home ret cend: call fin tecladoextra endp .

dl. hace un cuadro de color para meter las instrucciones adentro call menudo .call salida final: ret funcion endp . bh.4c00h . 10h @data ax 00h 03h . ah.4c00h int 21h . inicializar area de datos . peticion para posicionar el cursor mov mov mov mov int ciclo: cmp contador. .Metodo que se encarga de hacer el menu .---------------------------------------------------------------------.14h je exit1 call insert jmp ciclo ret exit1: mov ax. 0 10h ax. dh. 07h cx. 184fh 10h ax. salida de protocolo DX al. 05h mov al. cargo a ah 00h . número de página .salida al dos ah. petición .salida al dos 21h . pagina int 10h .---------------------------------------------------------------------menu proc near call getpagina mov ah. .---------------------------------------------------------------------begin proc far mov mov mov mov int ax. petición número de página empieza en la 0 fila 0 columna 0 (mov dx.---------------------------------------------------------------------. 10h 02h pagina 00h 0h . 0000 dx. . al. 0600h bh. ds. 05h . asigna modo texto a color 80x25 call menu salida: mov mov int mov mov mov mov int mov int ret .llama al procedimiento q empieza a dibujar ah. 050ch) menu endp .Aqui empieza el programa .

---------------------------------------------------------------------- .begin endp end begin .

13. '$' SALIDA DB 10. '$' TABLA DW COD0 .'El numero es impar'.CAD8 MOV AH.'$' CAD3 DB 10.Universidad del Valle de Guatemala .tiene 4 opciones para realizar siendo la ultima . 01H .'$' CAD6 DB 10.------------------------------------------------------------------.'$' CAD7 DB 10.------------------------------------------------------------------CIN PROC NEAR MOV AH. 'Seleccione una de las 4 opciones'.Programa que contien unmenu contenido en tablas .10.10.10.---------------------------------------------------------------.'EL numero al cubo es: '.13.Directivas del procesador . restarle el valor MOV Dx.Nery Fernando Guzman Carn‚ 06153 . Funcion de despliegue .13.'El numero es par'.'$' CAD4 DB 10.13 SALIDA4 DB 10.13..'$' SALIDA2 DB 10. llama al DOS RET CIN ENDP .DATA Resul DB 3 DUp(0) . llama al DOS MOV CODIGO.'El caracter leido es un número'. Definicion de datos.13 SALIDA5 DB 10.Hugo Mota Aguilar 05129 . 09H .MODEL SMALL .10. 'Presione 1 para decir si un digito es numero.10.10. 'Presione 2 para ver si es par o impar '.'El caracter leido es una letra Mayuscula'.13.-----------------------------------------------------------------COUT PROC NEAR . 'Presione 0 para elevar un digito al cubo '.'$' CAD5 DB 10.10. letra o caracter especial '. 30H.0H LEA Dx.guarda el resultado Termi DB '$' CAD1 DB 10. 'Salir '. Inicio del area de datos .CODE .'El caracter leido es un caracter especial'.13.------------------------------------------------------------------. 'GRACIAS POR USAR EL PROGRAMA'. peticion de la funcion de entrada INT 21H . tabla de direcciones DW COD1 DW COD2 DW COD3 CODIGO DB ? . DW = 2 bytes .'$' CAD2 DB 10.13. AL .3 .13.STACK 64 .13 SALIDA3 DB 10. Inicio del codigo . Funcion de entrada . mueve el codigo seleccionado SUB CODIGO.de salida . DB = 1 byte.13. --------------------------------------------------------------.13 SALIDA6 DB 10.Ejercicio No.'El caracter leido es una letra Miniscula'.'$' CAD8 DB ' '. peticion para desplegar INT 21H .13.

07H .Se llama a el metodo de despliege . 09H INT 21H RET .5AH . 07H INT 21H . 00H .Proceso para Elevar al cubo .se le quita 30h para trabajarlo . numero o caracter especial . letra minuscula y mayuscula si CMP Al.numero.30H . llama al DOS COUT ENDP . 00H . 09H INT 21H RET ccl1: MOV DL.************************************************************* .************************************************************* .0H SUB Al. 09H .MOV AH.Se pide otra interrupcion en el teclado CMP Al.muestra el caracter en pantalla INT 21H RET EXIT1 ENDP .Se limpia la parte alta del registro .parar y si no entre entre ese rango es CMP AL.-------------------------------------------------------------------EXIT1 PROC NEAR MOV DX.caracter especial JBE LETI RET COP ENDP .Se borra DX LEA DX. CAD4 .30H MOV Dl.************************************************************* .es numero deno serlo es caracter MOV DL. LEA DX.Se coloca en DX la direcci¢n de Centenas MOV AH.************************************************************* CU PROC FAR MOV AH.************************************************************* NUM PROC FAR CMP Al.Proceso para comparar si es letra. 00H .Muestra los caracteres en pantalla .Se pide otra interrupcion en el teclado INT 21H MOV AH. Se copia el numero ingresado para multi.Proceso para desplegar si es caracter especial o numero .39H .Se compara los rangos posibles entre JBE NUM . SALIDA2 .************************************************************* COP PROC FAR MOV AH. peticion para desplegar .FUNCION DE SALIDA .entre entre los rangos se vuelve a comJBE LETM .Se le compara el otro rango para ver si JAE ccl1 .-------------------------------------------------------------------.7AH .plicarlo por si mismo 2 veces .Se carga el resultado de caracter ccl2: MOV AH.Al MUL Dl MUL Dl CALL DES RET .Regresa al procedimiento CU ENDP .

si es impar salta MOV DL.Se le compara el otro rango para ver si JAE ccl3 . 00H LEA DX.************************************************************* . 00H LEA DX. CAD1 JMP ccl2 NUM ENDP .************************************************************* .Proceso para desplegar si es caracter especial o numero . 09H INT 21H RET ccl7: .************************************************************* POI PROC FAR MOV Ah. 09H INT 21H RET ccl3: MOV DL.Se le compara el otro rango para ver si JAE ccl5 . CAD4 ccl6: MOV AH. CAD2 JMP ccl4 .Se carga el resultado de numero .Se carga el resultado de letra Mayuscula LETM ENDP .Proceso para ver si es par o impar . CAD3 JMP ccl6 .************************************************************* LETI PROC FAR CMP Al.Se carga el arreglo del resultado .01H .Muestra los caracteres en pantalla . 00H LEA DX. CAD4 ccl4: MOV AH.LEA DX.Se limpia la parte alta AND Al.61H .Se carga el resultado de par .************************************************************* .0H .Se carga el resultado de caracter .41H .es letra mayuscula de no serlo es caracter MOV DL.Muestra los caracteres en pantalla .Se carga el resultado de letra Mayuscula LETI ENDP .Se depleiga en pantalla ccl8: MOV AH. 00H LEA DX.es letra minuscula de no serlo es caracter MOV DL.Proceso para desplegar si es caracter especial o numero . 09H INT 21H RET ccl5: MOV DL.se le hace mascara JNZ ccl7 . 00H LEA DX. CAD5 .************************************************************* LETM PROC FAR CMP Al.

Dl CBW ccl10: INC Bx .Se inicializa un contador de ciclo MOV Bx.************************************************************* . Resul[0] MOV AH.1 .Se convierten las centenas y se MOV Bx. 09h .Se convierte la unidades y se MOV Dl. 100 JNAE ccl9 MOV Dl.Al MOV Dl. multiplicar el valorpor 2 . 09H INT 21H RET DES ENDP .2 .para poder desplegarlo en pantalla.Se le suma 30H a todas las unidades DEC Bx .guarda en el arreglo JNAE ccl10 MOV Dl.Se carga el arreglo del resultado . 00H LEA DX. BH SHL BX.100 DIV Dl MOV Resul[Bx].Se despleiga la cadena en pantalla LEA DX. CODIGO XOR BH.Se inicializa un indice Ccl11: ADD Resul[Bx]. salta a la rutina de tabla . 01 JMP [TABLA+BX] . obtener el codigo .---------------------------------------------------------------------SALTOS PROC NEAR . CAD7 INT 21H MOV DL.Al MOV Cx.Al MOV Dl.Ah MOV Al.30H .Dl CBW ccl9: INC Bx . 00H LEA DX. CAD6 JMP ccl8 RET POI ENDP .Proceso para Convertir para desplegar .guardan en el arreglo CMP Ax. limpiar parte alta .0 .Procedimiento Saltos .MOV DL.Se carga el resultado de impar . LOOP Ccl11 MOV AH.Ah MOV Al.Muestra los caracteres en pantalla MOV BL.---------------------------------------------------------------------.************************************************************* DES PROC FAR .Se convierte las decenas y se CMP Ax.3 . 10 .guarda en el arreglo DIV Dl MOV Resul[Bx].10 DIV Dl MOV Resul[Bx].

-------------------------------------------------------------------.muestra el caracter en pantalla . SALIDA .mantiene el ciclo para salir .-------------------------------------------------------------------MAIN PROC NEAR MOV AX. 0 MOV AH. 4CH INT 21H MAIN ENDP . 3 JNE ccl12 MOV AX.manda a llamar al proceso COP en caso ser elegido . 09H INT 21H CALL CIN CALL SALTOS CMP CODIGO.AX ccl12: MOV DX.COD0: COD1: COD2: COD3: CALL JMP CALL JMP CALL JMP CALL JMP CU CODRET COP CODRET POI CODRET EXIT1 CODRET RET .manda a llamar al proceso de salida en caso es electa.Se borra DX LEA DX.manda a llamar al proceso POI en caso de ser elegido . inicializa segmento de datos MOV DS.@data . COdigo de interrupci¢n 4CH: salida al DOS END MAIN .manda a llamar al proceso 1 en caso de ser elegido . escoge el codigo . Procedimiento principal .Se coloca en DX la direcci¢n de Centenas MOV AH. CODRET: SALTOS ENDP . 00H .

Sign up to vote on this title
UsefulNot useful