UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS LABORATORIO DE PROGRAMACIÓN EN TURBO ASSEMBLER PRUEBA DE LAS INTERRUPCIONES BASICAS INT 10H BIOS Y 21H Procedimiento. Ingresar el código en archivos de texto plano con extensión TXT o ASM. Compilar desde el PROMPT del Sistema Operativo con los siguientes comandos, si hubiera error corregir en el código: E:\ PATH TASM E:\ TASM ARCHIVO.TXT ó C:\TASM ARCHIVO.ASM E:\ LINK ARCHIVO.OBJ Seguidamente verificar la ejecución con el nombre del archivo E:\ ARCHIVO 1. Interrupciones de Recorrido de pantalla, posicionamiento de cursor y salida a pantalla. DATOS SEGMENT CADENAB DB CADENAC DB CADENAD DB CADENAE DB DATOS ENDS "UNIVERSIDAD NACIONAL DE TRUJILLO","$" "INGENIERIA DE SISTEMAS: ",10,13 "PRUEBA DE LA COMPILACION EN TASSEMBLER",10,13 "SUB SEDE VALLE JEQUETEPEQUE","$" CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA INIC: MOV AX,DATOS ; asigna a AX el desplazamineto DATOS MOV DS,AX ; asigna al registro DS la dirección inicial ;interrupción de recorrido de pantalla MOV AX,0600h ; funcion 06, valor de al=00 recorrido total MOV BH,07h ; atributo de color MOV CX,0000h ; posición inicial MOV DX,184fh ; posición final renglon 24, columna 79 INT 10h ;interrupción de posición de cursor MOV AH,02H ; función 02h MOV BH,00 ; pagina activa nº0 MOV DX,0310H ; renglon 3, columna 16 INT 10H ; interrupción BIOS Ing. César Arellano Salazar 1 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS ;interrupción de salida a pantalla LEA DX,CADENAB MOV AH,09H INT 21H ;interrupción de posición de cursor MOV AH,02H ; función 02h MOV BH,00 ; pagina activa nº0 MOV DX,0606H ; renglon 6, columna 6 INT 10H ; interrupción BIOS ;interrupción de salida a pantalla LEA DX,CADENAC MOV AH,09H INT 21H ;interrupción de salida al sistema operativo MOV AX,4C00h ; INT 21h CODIGO ENDS PILA SEGMENT STACK DB 160 DUP(?); separación de 160 bytes para uso de pila PILA ENDS END INIC …………………………………………………………………………………………………………………………………………………………………………. EXPLICACION Este es un programa escrito en lenguaje ensamblador para la plataforma x86. A continuación, explicaré cada parte del programa: objectivec Copy code DATOS SEGMENT CADENAB DB "UNIVERSIDAD NACIONAL DE TRUJILLO","$" CADENAC DB "INGENIERIA DE SISTEMAS: ",10,13 CADENAD DB "PRUEBA DE LA COMPILACION EN TASSEMBLER",10,13 CADENAE DB "SUB SEDE VALLE JEQUETEPEQUE","$" DATOS ENDS La sección de "DATOS" contiene las variables definidas en el programa. Las variables son cadenas de caracteres almacenadas como arreglos de bytes, seguidas de un byte nulo "$". Las variables son "CADENAB", "CADENAC", "CADENAD" y "CADENAE". ruby Copy code CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA Ing. César Arellano Salazar 2 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS INIC: MOV AX,DATOS MOV DS,AX ... CODIGO ENDS La sección de "CODIGO" contiene el código del programa. En la primera línea, se utiliza la directiva "ASSUME" para asignar los segmentos de memoria a los registros CS, DS y SS. Luego, se define la etiqueta "INIC" que se utiliza como punto de entrada del programa. Después, se mueve el valor del segmento "DATOS" al registro AX y luego se lo asigna al registro DS. Esto permite que el programa acceda a las variables definidas en la sección "DATOS". sql Copy code MOV AX,0600h MOV BH,07h MOV CX,0000h MOV DX,184fh INT 10h Estas instrucciones utilizan la interrupción de BIOS "INT 10h" para realizar un recorrido de pantalla. Se utiliza la función 06h, que borra la pantalla, y se establece el atributo de color a 07h (blanco sobre negro). Se especifican las coordenadas de inicio (renglón 0, columna 0) y final (renglón 24, columna 79). sql Copy code MOV AH,02H MOV BH,00 MOV DX,0310H INT 10H Estas instrucciones utilizan la interrupción de BIOS "INT 10h" para establecer la posición del cursor en la pantalla. Se utiliza la función 02h y se establecen las coordenadas de la posición del cursor en el renglón 3 y la columna 16. objectivec Copy code LEA DX,CADENAB MOV AH,09H INT 21H Estas instrucciones utilizan la interrupción de DOS "INT 21h" para mostrar en la pantalla la cadena de caracteres almacenada en la variable "CADENAB". Se utiliza la función 09h para imprimir una cadena en la pantalla y se carga la dirección de la cadena en el registro DX utilizando la instrucción "LEA". sql Copy code Ing. César Arellano Salazar 3 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS MOV AX,4C00h INT 21h Estas instrucciones utilizan la interrupción de DOS "INT 21h" para finalizar el programa. Se utiliza la función 4Ch para terminar el programa y volver al sistema operativo. scss Copy code PILA SEGMENT STACK DB 160 DUP(?) PILA ENDS La sección de "PILA" 2. Prueba de bucles de control utilizando LOOP y el registro CX. DATOS SEGMENT CADENAB DB CADENAC DB CADENAD DB CADENAE DB "UNIVERSIDAD NACIONAL DE TRUJILLO",10,13 " INGENIERIA DE SISTEMAS: ","$" "PRUEBA DE LA COMPILACION EN TASSEMBLER","$" "SUB SEDE VALLE JEQUETEPEQUE","$" POS DW 0800H DATOS ENDS CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA INIC: MOV AX,DATOS ; asigna a AX el desplazamineto DATOS MOV DS,AX ; asigna al registro DS la dirección inicial ;interrupción de recorrido de pantalla MOV AX,0600h ; funcion 06, valor de al=00 recorrido total MOV BH,07h ; atributo de color MOV CX,0000h ; posición inicial MOV DX,184fh ; posición final renglon 24, columna 79 INT 10h ;interrupción de posición de cursor MOV AH,02H ; función 02h MOV BH,00 ; pagina activa nº0 MOV DX,0310H ; renglon 3, columna 16 INT 10H ; interrupción BIOS ;interrupción de salida a pantalla LEA DX,CADENAB MOV AH,09H INT 21H Ing. César Arellano Salazar 4 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS MOV BUCL: MOV MOV INT ADD MOV CX,04H MOV AH,02H BH,00 DX,POS 10H DX,0206H POS,DX ;interrupción de salida a pantalla LEA DX,CADENAD MOV AH,09H INT 21H LOOP BUCL MOV AX,4C00h INT 21h ; CODIGO ENDS PILA SEGMENT STACK DB 160 DUP(?); separación de 160 bytes para uso de pila PILA ENDS END INIC ………………………………………………………………………………………………………………………………………………………………………. EXPLICACION Este código es una sección del programa principal en ensamblador, que define una sección de datos llamada "DATOS" y una sección de código llamada "CODIGO", junto con una sección de pila llamada "PILA". La sección "DATOS" contiene varias declaraciones de datos, incluyendo cuatro cadenas de caracteres ("CADENAB", "CADENAC", "CADENAD", "CADENAE") y una variable de palabra ("POS"). Las cadenas de caracteres están definidas utilizando la sintaxis "DB" (byte), y cada cadena tiene un carácter de terminación "$" al final, que indica el final de la cadena. Además, la cadena "CADENAB" también contiene los caracteres 10 y 13, que son los códigos de retorno de carro y de avance de línea. La variable "POS" es una variable de palabra (dos bytes), que está inicializada con el valor 0800H. La sección "CODIGO" es donde se encuentra el programa principal. En primer lugar, se asigna a AX el desplazamiento de la sección "DATOS" utilizando la instrucción "MOV AX, DATOS", y luego se asigna a DS la dirección inicial de la sección de datos, utilizando la Ing. César Arellano Salazar 5 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS instrucción "MOV DS, AX". Esto configura el registro DS para que apunte a la sección de datos. A continuación, se realiza una interrupción de video (INT 10H) para borrar la pantalla y establecer el atributo de color en 07h (blanco sobre fondo negro). Luego, se establece la posición del cursor en el renglón 3, columna 16, utilizando otra interrupción de video. Luego, se utiliza la instrucción "LEA DX, CADENAB" para cargar la dirección de la cadena "CADENAB" en DX, y se realiza una interrupción de impresión de cadena de caracteres (INT 21H, AH=09H) para imprimir la cadena en la pantalla. A continuación, se realiza un bucle que repite cuatro veces. En cada iteración del bucle, se utiliza la interrupción de video para imprimir la cadena "CADENAD" en la pantalla, comenzando en la posición de memoria indicada por la variable "POS". Luego, se agrega un valor constante (0206H) a la variable "POS" para desplazar la posición de impresión hacia abajo en la pantalla. Finalmente, el bucle se repite utilizando la instrucción "LOOP", que decrementa el registro CX y salta a la etiqueta "BUCL" si el registro CX no es cero. Después de que se completa el bucle, se utiliza la instrucción "MOV AX, 4C00h" para cargar el valor 4C00H en el registro AX, y luego se realiza una interrupción de salida del programa (INT 21H) para finalizar el programa. La sección de pila "PILA" simplemente reserva 160 bytes de espacio para la pila del programa. La etiqueta "INIC" indica el punto de entrada del programa. Al final del programa, la instrucción "END INIC" se utiliza para indicar el final del programa y especificar el punto de entrada. 3. Interrupciones de Ingreso de caracteres a memoria a través de LABEL BYTE. DATOS SEGMENT CADENAB DB CADENAC DB CADENAD DB CADENAE DB "UNIVERSIDAD NACIONAL DE TRUJILLO","$" "INGRESE UNA CADENA DE 20 CARACTERES: ","$" "LA CADENA INGRESADA ES: ","$" "LA CADENA INVERTIDA ES: ","$" CADENA LABEL BYTE TOTALDB 21 ACTUAL DB ? CADE DB 21 DUP(?) Ing. César Arellano Salazar 6 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS DOLAR DB "$" CADINV DB 21 DUP(?),”$” DATOS ENDS CODIGO SEGMENT ASSUME CS:CODIGO, DS:DATOS, SS:PILA INIC: MOV AX,DATOS ; asigna a AX el desplazamiento DATOS MOV DS,AX ; asigna al DS la dirección inicial CALL RECORRE MOV DX,0310H CALL POSICION LEA DX,CADENAB CALL MUESTRA MOV DX,0504H CALL POSICION LEA DX,CADENAC CALL MUESTRA CALL INGRESO MOV DX,0704H CALL POSICION LEA DX,CADENAD CALL MUESTRA LEA DX,CADE CALL MUESTRA ;&&&&&&&&&&&&&&&&&&&&& ;procedimiento que invierte la cadena hacia CADINV MOV DI,20 MOV SI,0 MOV CX,0 MOV CL,ACTUAL SUB CX,1 MOV DI,CX ADD CX,1 INVI: MOV BX,OFFSET CADE MOV AL,[BX+DI] MOV BX,OFFSET CADINV MOV [BX+SI],AL INC SI DEC DI LOOP INVI Ing. César Arellano Salazar 7 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS MOV DX,0B04H CALL POSICION LEA DX,CADENAE CALL MUESTRA LEA DX,CADINV CALL MUESTRA ;interrupción de salida al sistema operativo MOV AX,4C00h ; INT 21h RECORRE PROC NEAR ;interrupción de recorrido de pantalla MOV AX,0600h MOV BH,07h ; atributo de color MOV CX,0000h ; posición inicial MOV DX,184fh INT 10h RET RECORRE ENDP POSICION PROC NEAR ;posicion de cursor, MOV AH,02H MOV BH,00 INT 10H RET POSICION ENDP falta el valor de DX MUESTRA PROC NEAR ;interrupción de muestra, MOV AH,09H INT 21H RET MUESTRA ENDP falta el valor de DX INGRESO PROC NEAR ;interrupción de ingreso de cadena a buffer LABEL BYTE MOV AH,0AH LEA DX,CADENA INT 21H RET INGRESO ENDP CODIGO ENDS PILA SEGMENT STACK Ing. César Arellano Salazar 8 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS DB 160 DUP(?); separación de 160 bytes para uso de pila PILA ENDS END INIC EXPLICACION Este código es un programa básico que muestra mensajes en pantalla y permite al usuario ingresar una cadena de caracteres de hasta 20 caracteres. El programa luego muestra la cadena ingresada y su inversa en pantalla. El segmento DATOS contiene variables utilizadas en el programa. Las cadenas de caracteres se definen utilizando la directiva DB, seguida de las comillas que encierran el contenido de la cadena y el carácter de finalización de cadena "$". La cadena "UNIVERSIDAD NACIONAL DE TRUJILLO" se guarda en la variable CADENAB, "INGRESE UNA CADENA DE 20 CARACTERES: " en CADENAC, "LA CADENA INGRESADA ES: " en CADENAD y "LA CADENA INVERTIDA ES: " en CADENAE. El buffer para la entrada de datos se define en la etiqueta CADENA. La variable TOTAL es un byte que almacena el tamaño máximo del buffer de entrada, ACTUAL es un byte utilizado para contar los caracteres ingresados y CADE es un arreglo de bytes de 21 elementos utilizado para almacenar los caracteres ingresados. La última variable es DOLAR, que contiene el carácter "$". El segmento CODIGO comienza con la asignación de segmentos utilizando la directiva ASSUME. Luego, el programa llama a la subrutina RECORRE, que se encarga de limpiar la pantalla. Luego, el programa llama a la subrutina POSICION, que mueve el cursor a la posición 03,10. A continuación, se muestra el mensaje "UNIVERSIDAD NACIONAL DE TRUJILLO" utilizando la subrutina MUESTRA. El programa llama a la subrutina INGRESO, que utiliza la interrupción de entrada de cadena de caracteres para permitir al usuario ingresar una cadena de hasta 20 caracteres. Los caracteres se almacenan en el buffer definido en CADENA. Después de que el usuario ingresa la cadena, el programa mueve el cursor a la posición 07,04 y muestra el mensaje "LA CADENA INGRESADA ES: " utilizando la subrutina MUESTRA. Luego, el programa muestra la cadena ingresada utilizando la subrutina MUESTRA y la etiqueta CADE. El programa luego llama a una subrutina que se encarga de invertir la cadena ingresada y mostrarla en pantalla. Esta subrutina no se proporciona en el código. Finalmente, el programa utiliza la interrupción de salida al sistema operativo para finalizar el programa. Ing. César Arellano Salazar 9 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS En resumen, el programa muestra mensajes en pantalla, permite al usuario ingresar una cadena de caracteres y muestra la cadena ingresada y su inversa en pantalla. 4. Ejemplo final con accesos indirectos a DATOS para invertir cadena de caracteres directamente en memoria (nota: solo agregue al programa anterior en el renglón marcado con ;&&&&&&&&&&&&&&&&&&&&&) ;procedimiento que invierte la cadena hacia CADINV MOV DI,20 MOV SI,0 MOV CX,0 MOV CL,ACTUAL SUB CX,1 MOV DI,CX ADD CX,1 INVI: MOV BX,OFFSET CADE MOV AL,[BX+DI] MOV BX,OFFSET CADINV MOV [BX+SI],AL INC SI DEC DI LOOP INVI MOV DX,0B04H CALL POSICION LEA DX,CADENAE CALL MUESTRA LEA DX,CADINV CALL MUESTRA EXPLICACION Este es un programa en lenguaje ensamblador que muestra una serie de mensajes en pantalla y pide al usuario que ingrese una cadena de caracteres de 20 caracteres o menos. Luego, invierte la cadena ingresada y muestra la cadena original y la cadena invertida en pantalla. Ing. César Arellano Salazar 10 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS La sección de DATOS SEGMENT define las variables que se usarán en el programa, como las cadenas de caracteres que se mostrarán en pantalla, la variable TOTAL que es la longitud de la cadena, la variable ACTUAL que es la longitud actual de la cadena ingresada por el usuario y la matriz CADE que es donde se almacenará la cadena ingresada por el usuario. También hay una matriz CADINV que se usa para almacenar la cadena invertida. La sección CODIGO SEGMENT es donde se escriben las instrucciones del programa. El programa comienza asignando el desplazamiento DATOS a AX y luego asignando al registro DS la dirección inicial de la sección de datos. A continuación, se llama al procedimiento RECORRE para borrar la pantalla. Luego, se muestran varios mensajes en pantalla utilizando la interrupción de muestra (interrupción 21h con función 09h) y se llama al procedimiento INGRESO para que el usuario ingrese una cadena de caracteres. Después de que el usuario ingresa la cadena, el programa invierte la cadena utilizando un bucle que copia los caracteres de la cadena original a la matriz CADINV en orden inverso. Finalmente, se muestran la cadena original y la cadena invertida en pantalla utilizando la interrupción de muestra. El programa termina con la interrupción 21h con la función 4Ch, que es la interrupción de salida al sistema operativo. Esta interrupción indica al sistema operativo que el programa ha terminado y regresa el control al sistema operativo. Este código es un procedimiento que invierte una cadena de caracteres almacenada en el buffer CADE hacia el buffer CADINV. La cadena original está compuesta por ACTUAL caracteres y tiene un tamaño máximo de 20 caracteres, mientras que la cadena invertida se almacena en CADINV y tiene el mismo tamaño máximo. El proceso de inversión se realiza utilizando dos registros de índice de memoria, DI y SI, que apuntan a las posiciones iniciales de los buffers CADE y CADINV, respectivamente. Además, se utiliza un contador de iteraciones CX para recorrer la cadena original desde el final hacia el principio. El proceso de inversión de la cadena se lleva a cabo en el bucle INVI, que se ejecuta ACTUAL veces. En cada iteración, se mueve el valor del carácter de la cadena original apuntado por DI hacia el buffer invertido apuntado por SI. Después de cada movimiento, Ing. César Arellano Salazar 11 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS se incrementan SI y se decrementa DI. Al final de cada iteración, se comprueba si se han recorrido todos los caracteres utilizando la instrucción LOOP. Si no es así, el bucle se repite. Finalmente, se muestra la cadena invertida en la pantalla mediante dos llamadas a la función MUESTRA que muestra una cadena en la posición del cursor en la pantalla. La primera cadena que se muestra es un mensaje indicando que se trata de la cadena invertida, y la segunda cadena es la propia cadena invertida almacenada en CADINV. PROGRAMAS DE PRUEBA DE MANEJO DE TECLADO 1) ;programa de prueba de la función 01h int21/detecta tecla función DATA SEGMENT Teclaf db "no presiono una tecla funcion","$" Teclanf db "presiono una tecla funcion","$" DATA ENDS INSTRUC SEGMENT ASSUME CS:INSTRUC,DS:DATA, SS:PILA INICIO: MOV AX,DATA MOV DS,AX L1: mov int cmp jnz ah,01h 21h al,00h L1 mov lea int MOV INT ah,09h dx,teclanf 21h AH,4Ch 21h mov lea int MOV INT ah,09h dx,teclaf 21h AH,4Ch 21h INSTRUC ENDS PILA SEGMENT STACK DB 900 DUP(?) PILA ENDS Ing. César Arellano Salazar 12 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS END INICIO 2) ;reconoce y discrimina que tecla de function fue pulsada ;programa de prueba de la función 01h int21/detecta tecla función DATA SEGMENT Teclaf db "no presiono una tecla funcion","$" teclanf db "Presiono una tecla de funcion","$" Mensaje db " LA TECLA DE FUNCION PRESIONADA FUE........ F" uno db "1" dolar db "$" numero db ? fun1 db ";" fun2 db "<" fun3 db "=" fun4 db ">" fun5 db "?" fun6 db "@" rastreo db ? db "$" DATA ENDS PILA SEGMENT STACK DB 900 DUP(?) PILA ENDS INSTRUC SEGMENT ASSUME CS:INSTRUC, DS:DATA, SS:PILA INICIO: MOV AX,DATA MOV DS,AX mov ah,00h int 16h mov rastreo,ah cmp al,00h jz funcion1 mov lea int MOV INT ah,09h dx,teclaf 21h AH,4Ch 21h funcion1: Ing. César Arellano Salazar 13 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS mov ah,rastreo sub ah,fun1 jz mostrar funcion2: add uno,1 mov ah,rastreo sub ah,fun2 jz mostrar funcion3: add uno,1 mov ah,rastreo sub ah,fun3 jz mostrar funcion4: add uno,1 mov ah,rastreo sub ah,fun4 jz mostrar mostrar: mov lea int MOV INT ah,09h dx,Mensaje 21h AH,4Ch 21h INSTRUC ENDS END INICIO 3) ;copia y replica la tercera línea de la pagina active ;ejecutar considerando que no se encuentren en el ultimo renglón de la pagina activa data SEGMENT renglonactual db ? linea fin db db 80 dup(' ') '$' ren col db db 3 0 cant dw 0 ;replica la tercera línea Ing. César Arellano Salazar 14 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS data ENDS INSTRUC SEGMENT ASSUME CS:INSTRUC,ds:data,ss:pila INICIO: mov ax,data mov ds,ax MOV cursor MOV INT mov INC AH,03h ; petición para leer la posición de BH,00 ; Número de página activa 0 10h ; Llama al BIOS renglonactual,DH renglonactual LEA DI,linea COLUM: MOV MOV MOV INT MOV AH,02h ; petición para colocar el cursor BH,00 ; Número de página activa 0 DH,ren DL,col 10h ; interrupción que llama al BIOS MOV AH,08h MOV BH,00 INT 10h ; ; Número de página 0 (normal) ; Llama al BIOS MOV [DI],AL INC DI INC col MOV BX,79 INC cant CMP BX,cant JA colum MOV MOV MOV MOV INT AH,02h ; petición para colocar el cursor BH,00 ; Número de página activa 0 DH,renglonactual DL,00 10h ; interrupción que llama al BIOS MOV AH,09h LEA DX,linea INT 21h mov ah,4ch int 21h Ing. César Arellano Salazar 15 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS grafico proc near mov ah,00h mov al,12h int 10h ret grafico endp INSTRUC ENDS PILA SEGMENT STACK DB 900 DUP(?) PILA ENDS END INICIO 4) intercambio de páginas2 DATOS SEGMENT modo DB pag DB xini DB yini DB colu DW DATOS ENDS ? ? ? ? ? CODIGO SEGMENT ASSUME CS:CODIGO,ds:DATOS,ss:pila inicio: mov ax,DATOS mov ds,ax ;lee modo de video y graba en el registro al mov ah,0fh int 10h mov modo,al mov pag,01 call mitadsup call mitadinf mov pag,02 call supizq call supderech call mitadinf mov pag,03 call infizq call infderech call mitadsup Ing. César Arellano Salazar 16 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS MOV AH,05h MOV AL,01 INT 10h ; petición de página activa ; Número de página ; Llama al BIOS mov ah,10h int 16h MOV AH,05h MOV AL,02 INT 10h ; petición de página activa ; Número de página ; Llama al BIOS mov ah,10h int 16h MOV AH,05h MOV AL,03 INT 10h ; petición de página activa ; Número de página ; Llama al BIOS mov ah,4ch int 21h mitadsup MOV MOV DESP1: MOV proc near DI,0 DH,0 ; Renglón 05 MOV AH,02h ; petición para colocar el cursor BH,pag ; Número de página activa 0 MOV DL,0 INT 10h MOV AH,0Ah MOV AL,'X' MOV CX,80 INT 10h INC DH INC DI CMP DI,12 JB DESP1 RET mitadsup endp mitadinf MOV MOV DESP2: MOV MOV INT MOV MOV MOV ; Columna 12 ; interrupción que llama al BIOS ; petición de despliegue ; caracter que se despliega ; despliega veinte caracteres * ; Llama al BIOS proc near DI,0 DH,13 ; MOV AH,02h BH,pag ; DL,0 ; 10h ; AH,0Ah AL,'X' CX,80 ; Ing. César Arellano Salazar Renglón 05 ; petición para colocar el cursor Número de página activa 0 Columna 12 interrupción que llama al BIOS ; petición de despliegue ; caracter que se despliega despliega veinte caracteres * 17 UNT. ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS INT 10h INC DH INC DI CMP DI,12 JB DESP2 RET mitadinf endp ; Llama al BIOS supizq proc near MOV DI,0 MOV DH,0 ; DESP3: MOV AH,02h MOV BH,pag ; MOV DL,0 ; INT 10h ; MOV AH,0Ah MOV AL,'X' MOV CX,39 ; INT 10h INC DH INC DI CMP DI,12 JB DESP3 RET supizq endp Renglón 05 ; petición para colocar el cursor Número de página activa 0 Columna 12 interrupción que llama al BIOS ; petición de despliegue ; caracter que se despliega despliega veinte caracteres * ; Llama al BIOS supderech proc near MOV DI,0 MOV DH,0 ; Renglón 05 DESP4: MOV AH,02h ; petición para colocar el cursor MOV BH,pag ; Número de página activa 0 MOV DL,41 INT 10h MOV AH,0Ah MOV AL,'X' MOV CX,39 INT 10h INC DH INC DI CMP DI,12 JB DESP4 RET supderech endp ; Columna 12 ; interrupción que llama al BIOS ; petición de despliegue ; caracter que se despliega ; despliega veinte caracteres * ; Llama al BIOS infizq proc near MOV DI,0 MOV DH,13 ; Renglón 05 DESP5: MOV AH,02h ; petición para colocar el cursor MOV BH,pag ; Número de página activa 0 Ing. César Arellano Salazar 18 UNT. MOV DL,0 INT 10h MOV AH,0Ah MOV AL,'X' MOV CX,39 INT 10h INC DH INC DI CMP DI,12 JB DESP5 RET infizq endp ARQUITECTURA Y ORGANIZACIÓN DE COMPUTADORAS ; Columna 12 ; interrupción que llama al BIOS ; petición de despliegue ; caracter que se despliega ; despliega veinte caracteres * ; Llama al BIOS infderech proc near MOV DI,0 MOV DH,13 ; Renglón 05 DESP6: MOV AH,02h ; petición para colocar el cursor MOV BH,pag ; Número de página activa 0 MOV DL,41 INT 10h MOV AH,0Ah MOV AL,'X' MOV CX,39 INT 10h INC DH INC DI CMP DI,12 JB DESP6 RET infderech endp ; Columna 12 ; interrupción que llama al BIOS ; petición de despliegue ; caracter que se despliega ; despliega veinte caracteres * ; Llama al BIOS CODIGO ENDS pila SEGMENT STACK DB 900 DUP(?) pila ENDS END inicio Ing. César Arellano Salazar 19