Subido por edsonuj40

LABORATORIO ASSEMBLER explicado

Anuncio
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
Descargar