registros de propsito general - leng-ensam

Anuncio
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
1
PRESENTACIÓN
El lenguaje ensamblador aun en estos días presenta ventajas sobre los
lenguajes de alto nivel, lo anterior por su interacción directa sobre el Hardware.
La presente Antología fue elaborada para la asignatura de Lenguaje
Ensamblador incluida en la Reforma Educativa 2004, para la Carrera de Ingeniería en
Sistemas Computacionales para el Instituto Tecnológico Superior de Huauchinango.
Fue realizada con la finalidad de mostrar al lector las principales
instrucciones y aspectos básicos del lenguaje Ensamblador.
Es utilizado el compilador MASM para el desarrollo de los programas,
mostrándose los pasos para la realización, compilación y ligado de un progre
Esperando que la presente antología sea de utilidad
Ing. Claudia Yadira Luna Carrasco
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
2
ÍNDICE
Pág.
Presentación
Unidad I
1
Fundamentos
1.1 Introducción.
4
1.1.1 Uso y aplicaciones del lenguaje ensamblador.
5
1.1.2 Escalabilidad de los microprocesadores.
6
1.1.3 Tipos de lenguajes ensambladores.
9
1.1.4 Clasificación de Memorias.
10
1.1.5
12
Unidades de entrada / salida.
1.2 El microprocesador.
13
1.2.1 Buses.
14
1.2.2 Registros.
15
1.2.3 Modos de direccionamiento.
18
1.3 Interrupciones.
19
1.3.1 Hardware.
23
1.3.2 Software.
24
1.4 Estructura de un programa en ensamblador.
25
1.4.1 Data segment.
26
1.4.2 Snack segment.
28
1.4.3 Code segment
28
1.4.4 Instrucciones del programa.
29
1.5 Procedimiento de ensamble, enlace y ejecución.
31
1.6 Entorno de programación.
34
Unidad II
Elementos del Lenguaje
2.1 Instrucciones lineales
35
2.1.1 Movimiento.
35
2.1.2 Pila.
35
2.1.3 Matemáticos.
36
2.1.4 Ajustes.
37
2.1.5 Comparación.
37
2.2 Saltos.
37
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
3
2.2.1 Incondicional.
37
2.2.2 Condicional.
38
2.3 Tipos de ciclos.
39
2.4 Operadores Lógicos.
39
2.5 Desplazamiento.
39
2.5.1 Lineal.
39
2.5.2 Circular.
40
2.6 Procesos de control
41
2.6.1 Banderas
41
2.6.2 Cadenas
41
2.6.3 Carga
42
Unidad III
Modularización
3.1 Macros
43
3.2 Procedimientos
45
3.2.1 Internos
45
3.2.2 Externos
47
Unidad IV
Interrupciones
Programación Híbrida
53
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
4
UNIDAD I
FUNDAMENTOS
1.1 Introducción
Cuando las primeras computadoras hicieron su aparición, estas eran solo
programables por sus diseñadores, puesto que ellos eran los que conocían su
diseño y la forma en que debían ser programadas.
Con el avance del tiempo, las computadoras fueron siendo diseñadas bajo
arquitecturas similares, lo que facilitó su programación, aunque el grupo de
personas que podía realizar esta labor era pequeño, puesto que se debía tener un
amplio conocimiento sobre esta labor.
La información que hace que el hardware de la computadora realice una
determinada actividad de llama instrucción. Por consiguiente una instrucción es
un conjunto de unos y ceros.
Las instrucciones formadas con unos y ceros equivalen a acciones
elementales de la máquina, por lo que al conjunto de dichas instrucciones que
son interpretadas directamente por la máquina se denomina lenguaje máquina.
El lenguaje máquina fue el primero que empleo el hombre para la
programación de las primeras computadoras, por esta razón el grupo de
programadores era limitado.
El Lenguaje Ensamblador es la primera abstracción del Lenguaje Máquina, y
consiste en asociar palabras clave a estas instrucciones, para que faciliten su uso
por parte del programador.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
5
La aparición del Lenguaje Ensamblador inicio la construcción de otros
lenguajes de programación, hasta llegar a los lenguajes de Alto Nivel que hoy
conocemos.
1.1.1 Uso y aplicaciones del Lenguaje Ensamblador.
El uso del lenguaje ensamblador le permite al programador indicarle a la
computadora exactamente cómo llevar a cabo una tarea específica usando la
menor cantidad de instrucciones. La optimización resulta en una mejora
sustancial en términos de rendimiento y consumo de memoria así como otros
recursos.
El lenguaje ensamblador es usualmente utilizado en las siguientes circunstancias:
Æ Para mejorar la eficiencia de una rutina o programa específico que se puede o
se ha transformado en un cuello de botella.
Æ Para obtener acceso a funciones de bajo nivel del procesador para realizar
tareas que no son soportadas por los lenguajes de alto nivel.
Æ Para escribir manejadores de dispositivos para comunicarse directamente con
hardware especial.
Æ Trabajar en ambientes con recursos limitados puede requerir el uso del
lenguaje ensamblador pues el código ejecutable puede ser menor que el
generado por un Lenguaje de alto nivel.
El lenguaje ensamblador tiene como ventajas:
Æ Velocidad: el proceso de traducción que realizan los intérpretes, implica un
proceso de cómputo adicional al que el programador quiere realizar. Por ello el
lenguaje ensamblador es más rápido que un intérprete, por que no necesita
traducción.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
6
Æ Tamaño: un intérprete genera código de más al necesario y por ello un
ejecutable se crece, y comparado con ello, el ejecutable generado con
Lenguaje Ensamblador es relativamente pequeño.
Æ Flexibilidad: los lenguajes de alto nivel no permiten el uso directo del hardware
de la computadora, Lenguaje Ensamblador si lo hace.
Las herramientas para programar en Lenguaje Ensamblador son:
1. Un editor de textos.
2. Un Ensamblador, que convierta el código fuente al código objeto.
3. Un Montador o de Ligado, que permita el módulo objeto en ejecutable.
1.1.2 Escalabilidad de los microprocesadores.
En
una
computadora
está
contenido
un
chip
o
circuito
llamado
microprocesador. Todas las computadoras tienen por lo menos dos partes
básicas, la unidad de control y la unidad aritmético-lógica.
Todos los recursos de la computadora son administrados desde la unidad
de control, cuya función es coordinar todas las actividades de la computadora.
La unidad de control contiene las instrucciones del procesador para llevar a cabo
comandos.
El conjunto de instrucciones, que está incluido dentro de los circuitos de
la unidad de control, es una lista de todas las operaciones que realiza el
procesador. Cada instrucción en el conjunto de instrucciones es acompañado por
un microcódigo, que son instrucciones muy básicas que le dicen al procesador
cómo ejecutar las instrucciones.
Cuando la computadora corre un programa, busca los comandos del
programa dentro del conjunto de instrucciones del procesador y las ejecuta en
orden.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
7
La unidad aritmético-lógico (ALU) se encarga de ejecutar las instrucciones
que involucran aritmética o lógica. La ALU incluye un grupo de registros, es decir,
memoria construida directamente en el procesador que se usa para guardar datos
que están siendo procesados por la instrucción actual.
Los procesadores modernos contienen más de 20 millones de transistores y
pequeños de tamaño, mientras que en sus inicios contenían solo 2000
transistores y el tamaño era considerable.
El microprocesador es la parte de la computadora diseñada para ejecutar
programas, con tecnología semiconductora. Se eslabona desde los 50´s pero la
tecnología se fusiona en los 70´s.
Anteriormente se usaban tubos al vacío (bulbos) como componentes
electrónicos activos. En 1948 en los laboratorios de Bell crearon el Transistor
(material de silicio de bajo costo) para reemplazar al tubo al vacío. De esta forma
comienzan a surgir los circuitos digitales que llevan a la reducción de la tecnología
a un circuito integrado llamado microprocesador.
Actualmente la capacidad de integración y el abaratamiento de las
tecnologías permite que casi cualquier empresa pueda contar con una capacidad
de cómputo antes inimaginable para las tareas que necesita.
Se prevé que la capacidad de integración llegue a un techo tecnológico, en
el cual se necesite un nuevo paradigma para poder seguir incrementando la
capacidad de procesamiento de las máquinas.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
8
En la siguiente tabla se muestran algunos de los procesadores del mercado,
la fecha en la que fueron presentados al mercado, la velocidad promedio que
alcanzaban, el ancho de bus que contenían, un aproximado de transistores y la
memoria interna de cada uno de ellos.
Procesador
Fecha de
presentación
Velocidad
de Reloj
Ancho
de bus
Transistores
Memoria
4004
15/11/71
108 Khz
4 bits
2300
640 byte
8008
01/04/72
108 khz
8 bits
3500
16 kb
8080
01/04/74
2 Mhz
8 bits
6000
64 kb
8086
08/06/78
5-10 Mhz
16 bits
2900
100 Mb
8088
01/06/79
5-10 Mhz
8 bits
2900
300 Mb
80286
01/02/82
8-12 Mhz
16 bits
13400
1 Mb
80386
17/10/85
16-33 Mhz
27500
20 Mb
32 bits
80486
22/04/91
16-33 Mhz
32 bits
1185000
Pentium
22/03/93
60-200 Mhz
32 bits
3.1 millones
Pentium Pro
27/03/95
150-200
Mhz
64 bits
5.5 millones
AMD k5
1996
90-200 Mhz
64 bits
3.3 – 4.3
millones
Pentium II
07/05/97
233-300
Mhz
64 bits
7.5 millones
Intel Celaron
1998
266 Mhz
64 bits
7.5 millones
AMD Duron
2000
600-1000
Mhz
64 bits
25 millones
Pentium 4
2000
2000 Mhz
64 bits
42 millones
1 Gb
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
9
1.1.3 Tipos de Lenguajes Ensambladores
Los lenguajes ensambladores, dependen de la arquitectura de la computadora,
existen:
Æ Los ensambladores de la familia Intel
Æ Los ensambladores de la familia Motorota
Æ Los ensambladores del procesador Power de las IBM
Aunque todos los ensambladores realizan básicamente las mismas tareas,
podemos clasificarlos de acuerdo a características.
Æ Ensambladores
Cruzados
(Cross-Assembler).
Se
denominan
así
los
ensambladores que se utilizan en una computadora que posee un procesador
diferente al que tendrán las computadoras donde va a ejecutarse el programa
objeto producido.
Æ Ensambladores Residentes. Son aquellos que permanecen en la memoria
principal de la computadora y cargan, para su ejecución, al programa objeto
producido.
Æ Macroensambladores.
Son
ensambladores
que
permiten
el
uso
de
macroinstrucciones debido a su potencia, normalmente son programas
robustos que no permanecen en memoria una vez generado el programa
objeto.
Æ Microensambladores.
Generalmente,
los
procesadores
utilizados
en
las
computadoras tienen un repertorio fijo de instrucciones, este conjunto de
instrucciones sirven para un determinado código de operación y a estas se les
conoce como microensambladores.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
10
1.1.4 Clasificación de Memorias.
La memoria de un ordenador se puede definir como los circuitos que permiten
almacenar y recuperar la información.
Las memorias se clasifican, por la tecnología empleada y, además según la
forma en que se puede modificar su contenido, A este respecto, las memorias se
clasifican en dos grandes grupos:
1) Memorias RAM: Son memorias en las que se puede leer y escribir, si bien su
nombre (Random Access Memory) no representa correctamente este hecho.
2) Memorias ROM (Read 0nly Memory): Son memorias en las que sólo se puede
leer. Pueden ser:
a) ROM programadas por máscara, cuya información se graba en fábrica y no se
puede modificar.
b) PROM, o ROM programable una sola vez.
c) EPROM (erasable PROM) o RPROM (reprogramable ROM), cuyo contenido
puede borrarse mediante rayos ultravioletas para regrabarlas.
d) EAROM (electrically alterable ROM) o EEROM (electrically erasable ROM), que
son memorias que está en la frontera entre las RAM y las ROM ya que su
contenido puede regrabarse por medios eléctricos, estas se diferencian de las
RAM en que no son volátiles. En ocasiones a este tipo de memorias también se
las denomina NYRAM (no volátil RAM).
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
11
La memoria principal esta formada por un conjunto de unidades llamadas
palabras en forma de una organización lineal. Dentro de cada una de estas
palabras se guarda la información que constituye una instrucción o parte de ella
(puede darse el caso de que una sola instrucción necesite varia palabras), o un
dato o parte de un dato (también un dato puede ocupar varias palabras).
A la cantidad de palabras que forman la Memoria Principal se le denomina
capacidad de memoria. De este modo, cuanto mayor sea el número de palabras
mayor será el número de instrucciones y datos que podrá almacenar la
computadora. El número de bits que forman una palabra se llama longitud de
palabra.
La acción de guardar una información en una palabra de la memoria se
llama acceso de escritura, y la acción de recuperarla, acceso de lectura. Los
accesos son coordinados por la UC. La secuencia de órdenes que debe generar la
Unidad de Control se indica en las siguientes tablas.
Secuencia de acceso a la memoria.
Acceso de Escritura
Acceso de Lectura
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
12
1.1.5 Unidades de Entrada / Salida.
La computadora tiene comunicación de manera interna y externa, de manera
externa la comunicación se consigue a través de diversos dispositivos, como son:
teclados, ratones, impresoras, monitores, escáner, etc.
Tomemos en cuenta que todos los periféricos (dispositivos que pueden
conectarse a la computadora) son diferentes, por tanto, el manejo que cada uno
de ellos da a la información también es diferente, en otras palabras la
computadora habla español y cada periférico habla un idioma diferente, entonces,
para que la comunicación entre la computadora y el periférico sea la apropiada,
se hace necesario un intérprete o intermediario que permita la traducción ante
los diversos idiomas que cada uno maneja.
La
unidad
que
funciona
como
intermediario
se
llama
Unidad
de
Entrada/Salida, cuya función principal es llevar a cabo las operaciones de
Entrada/Salida.
Definiremos una operación de E/S como el conjunto de acciones necesarias
para la transferencia de un conjunto de datos (es decir, una transferencia
completa de datos). Para la realización de una operación de E/S se deben
efectuar las siguientes funciones:
→ Recuento de las unidades de información transferidas (normalmente bytes)
para reconocer el fin de operación.
→ Sincronización de velocidad entre la CPU y el periférico.
→ Detección de errores (e incluso corrección) mediante la utilización de los
códigos necesarios (bits de paridad, códigos de redundancia cíclica, etc.)
→ Almacenamiento temporal de la información. Es más eficiente utilizar un
buffer temporal específico para las operaciones de E/S que utilizan el área
de datos del programa.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
13
→ Conversión de códigos, conversión serie/paralelo, etc.
1.2 El Microprocesador.
La Unidad central de proceso o CPU, se puede definir como un circuito (chip) que
interpreta y ejecuta instrucciones.
El microprocesador se ocupa del control y el proceso de datos en los
ordenadores. Habitualmente, la CPU es un microprocesador fabricado en un chip,
un único trozo de silicio que contiene millones de componentes electrónicos. El
microprocesador de la CPU está formado por una unidad aritmético lógica que
realiza cálculos y comparaciones, y toma decisiones lógicas (determina si una
afirmación es cierta o falsa mediante las reglas del álgebra de Boole); por una
serie de registros donde se almacena información temporalmente, y por una
unidad de control que interpreta y ejecuta las instrucciones. Para aceptar órdenes
del usuario, acceder a los datos y presentar los resultados, la CPU se comunica a
través de un conjunto de circuitos o conexiones llamado bus. El bus conecta la
CPU a los dispositivos de almacenamiento (por ejemplo, un disco duro), los
dispositivos de entrada (por ejemplo, un teclado o un ratón) y los dispositivos de
salida (por ejemplo, un monitor o una impresora).
Elementos que la componen:
→ Unidad de control: controla el funcionamiento de la CPU y por tanto de el
computador.
→ Unidad aritmético-lógica (ALU): encargada de llevar a cabo las funciones de
procesamiento de datos del computador.
→ Registros: proporcionan almacenamiento interno a la CPU.
→ Interconexiones CPU: Son mecanismos que proporcionan comunicación
entre la unidad de control, la ALU y los registros.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
1.2.1
14
Buses.
El bus es básicamente una serie de cables mediante los cuales pueden
transportarse los datos de una unidad a otra.
Los buses han ido evolucionando conforme lo hicieron los procesadores,
entre más ancho es el bus, mas rápida es la transportación de datos, y por lo
tanto del procesador.
Un bus es en esencia una ruta compartida que conecta diferentes partes del
sistema, como el microprocesador, la controladora de unidad de disco, la
memoria y los puertos de entrada/salida (E/S), para permitir la transmisión de
información.
Existen:
→ Bus de Datos. Su función principal es la de transportar datos entre los
dispositivos.
→ Bus de Direcciones. En donde son transportadas las direcciones de memoria
principal.
→ Bus de Control. Transporta señales de estado de las operaciones efectuadas
por el CPU con las demás unidades.
→ Bus de Sincronización. Transporta las señales de reloj que permiten la
temporización.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
15
1.2.2 Registros.
El procesador para realizar y agilizar sus funciones contiene dentro de sí, una
serie de registros que a continuación se describen:
REGISTROS DE PROPÓSITO GENERAL
Pueden ser utilizados como un solo registro de 16 bits o bien como dos registros
independientes de 8 bits.
Registro
AX
BX
CX
DX
Registro
Acumulador
Registro
Base
Descripción
Se utiliza generalmente para el almacenamiento de datos en
general, comúnmente operandos o resultados parciales de
las operaciones realizadas por la ALU.
Se usa para conservar la dirección base de los datos
almacenados en el segmento de datos de la memoria
Registro
Guarda el valor del índice de conteo durante la ejecución de
Contador
un ciclo.
Registro De
Datos
Se usa para almacenar la parte alta del resultado de un
producto de mas de 16 bits.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
16
REGISTROS APUNTADORES E ÍNDICES
Registro
Apuntador
IP
de
Descripción
Contiene la dirección de la siguiente instrucción a ejecutar
por el procesador.
Instrucciones
SP
Apuntador
de Pila
Se utiliza para mantener la dirección del borde de la pila de
la memoria.
Su uso principal es el de proveer un mecanismo paa poder
BP
Apuntador
pasar parámetros a rutinas. También se usa para conservar
Base
la dirección base de los datos almacenados en el segmento
de pila de la memoria.
SI
DI
Índice
Fuente
Su principal aplicación es en instrucciones u operaciones que
Índice
involucran cadenas.
Destino
REGISTROS DE SEGMENTO
Registro
CS
DS
SS
ES
Descripción
Segmento
Contiene la
de código
segmento que contiene los programas y sus procedimientos.
Segmento
de datos
Segmento
de pila
Contiene la
dirección
dirección
de
de
la
la
memoria
memoria
donde
donde
inicia
inicia
el
segmento o bloque de memoria que contiene la mayor parte
de los datos o variables utilizados en un programa.
Contiene la dirección de la memoria utilizado por la pila de la
memoria.
Segmento
Contiene la dirección de la memoria que se utiliza para
extra de
guardar datos cuando se ha excedido la capacidad del
datos
el
registro de segmento de datos (cadenas).
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
17
REGISTROS DE BANDERAS
F15 F14 F13 F12 F11 F10
OF
DF
F9
F8
F7
F6
IF
TF
SF
ZF
Registro
CF
bandera de
flag, bandera de
acarreo auxiliar
Zero flan,
bandera de cero
Sign flag,
badera de signo
Trap flag,
TF
bandera de
trampa
IF
CF
Descripción
acarreo
Indica si el número de unos en el resultado de una
operación es par o impar. PF = 0 indica una paridad impar.
Esta bandera se activa cuando existe acarreo de la parte
baja a la parte alta en el registro AL.
Se activa cuando el resultado de una operación aritmética
es cero.
Indica si el resultado de una operación aritmética es
positivo o negativo. SF = 0 si el resultado es positivo.
Indica
si
un
programa
se
ejecutará
instrucción
por
instrucción, deteniéndose en cada una de ellas.
Indica si las interrupciones se encuentran habilitadas o
flag, bandera de
deshabilitadas. IF = 1
cuando las interrupciones están
habilitadas.
Direcction flag,
Indica el orden como serán manipulados los datos en
bandera de
instrucciones de cadenas. (de principio a fin o de fin a
dirección
OF
PF
F0
Interrupt enable
interrupción
DF
F1
préstamo al final de una resta. CF = 1 indica que existe un
Auxiliary carry
SF
AF
F2
bandera de
paridad
ZF
F3
Indica un acarreo alto al término de una suma o un
Parity flag,
AF
F4
Carry flag,
acarreo
PF
F5
principio)
Overflow flag,
Se activa cuando al final de una operación aritmética existe
bandera de
la condición de sobre flujo, es decir, el resultado es mayor
sobreflujo
a la capacidad de almacenamiento del destino.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
18
Descripción de las banderas
Por medio de símbolos, el comando R nos indica el estado de cada bit en el
registro de banderas.
Banderas
Desactivadas:
XF = 0
Activadas
XF = 1
OF
DF
IF
SF
ZF
AF
PF
CF
NV
UP
DI
PL
NZ
NA
PO
NC
OV
DN
EI
NG
ZR
AC
PE
CY
1.2.3 Modos de Direccionamiento
Instrucción Mov, almacena el contenido de la fuente en el destino.
Formato:
MOV Destino, Fuente
Tipo de Direccionamiento
Formato
De Registro
Mov Ax, BX
Inmediato
Mov Ax, 25H
Descripción
Copia el contenido de un registro a otro.
Es cuando se guarda un dato de manera
directa en el destino.
Permite la transferencia de datos entre
Directo
Mov Al, [24A7]
una localidad de memoria situada dentro
del segmento de datos y los registros Al o
AX.
Permite
Indirecto por Registro
Mov AH, [BX]
transferir
los
datos
de
una
localidad de memoria por medio de los
siguientes registros BP, BX, DI o SI, los
cuales guardan el direccionamiento.
En
Relativo por Registro
Mov AX, [BX+100H]
este
tipo
de
direccionamiento
de
agrega un desplazamiento a un registro
base o índice.
Base
más
Indexado
Índice
o
Este tipo de direccionamiento también
Mov AX, [BP+DI]
interactúa en forma indirecta con los
datos en la memoria. El desplazamiento
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
19
se forma por medio de un registro base
(BX o BP) mas un registro índice (SI o
DI).
Opera similar al direccionamiento base
Relativo
Base
más
Índice
Mov AL, [BP+SI+125H]
más
índice,
donde
se
agrega
un
desplazamiento más en forma de un dato
inmediato.
Empuja el contenido de la fuente a la pila
PUSH Fuente
(Guarda en memoria), en la dirección a la
De Pila (LIFO, último en
que apunta SP.
entrar, primero en salir)
Recupera un dato de la pila y lo coloca en
POP Destino
el destino (extrae de memoria), de la
dirección a la que apunta SP.
1.3 Interrupciones
Una interrupción es una operación que suspende la ejecución de un programa de
modo que el sistema pueda realizar una acción especial. La rutina de interrupción
ejecuta y por lo regular regresa el control al procedimiento que fue interrumpido,
el cual entonces reasume su ejecución.
Una interrupción guarda en la pila el contenido del registro de banderas, el CS, y
el IP.
La dirección CS:IP entonces apunta al inicio de la rutina en el área del BIOS, que
ahora se ejecuta. La interrupción regresa vía una instrucción IRET (regreso de
interrupción), que saca de la pila el IP, CS y las banderas y regresa el control a la
instrucción que sigue al INT.
Las interrupciones se dividen en dos tipos las cuales son: Externas y Internas.
Una interrupción externa es provocada por un dispositivo externo al procesador.
Una interrupción interna ocurre como resultado de la ejecución de una instrucción
INT o una operación de división que cause desbordamiento, ejecución en modo de
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
20
un paso o una petición para una interrupción externa, tal como E/S de disco. Los
programas
por
lo
común
utilizan
interrupciones
internas,
que
no
son
enmascarables, para accesar los procedimientos del BIOS y del DOS.
El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que
indican el estado de los dispositivos del sistema. El dos y los programas usuarios
pueden solicitar rutinas del BIOS para la comunicación con los dispositivos
conectados al sistema. El método para realizar la interfaz con el BIOS es el de las
interrupciones de software.
A continuación se listan algunas interrupciones del BIOS.
INT 00H: División entre cero. Llamada por un intento de dividir entre cero.
Muestra un mensaje y por lo regular se cae el sistema.
INT 01H: Un solo paso. Usado por DEBUG y otros depuradores para permitir
avanzar por paso a través de la ejecución de un programa.
INT 02H: Interrupción no enmascarare. Usada para condiciones graves de
hardware, tal como errores de paridad, que siempre están habilitados. Por lo
tanto un programa que emite una instrucción CLI (limpiar interrupciones) no
afecta estas condiciones.
INT 03H: Punto de ruptura. Usado por depuración de programas para detener la
ejecución.
INT 04H: Desbordamiento. Puede ser causado por una operación aritmética,
aunque por lo regular no realiza acción alguna.
INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima.
Emita la INT 05H para activar la interrupción internamente, y presione las teclas
Cltr + PrtSC para activarla externamente. La operación permite interrupciones y
guarda la posición del cursor.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
21
INT 08H: Sistema del cronometro. Una interrupción de hardware que actualiza la
hora del sistema y (si es necesario) la fecha. Un chip temporizador programable
genera una interrupción cada 54.9254 milisegundos, casi 18.2 veces por
segundo.
INT 09H: Interrupción del teclado. Provocada por presionar o soltar una tecla en
el teclado.
INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y
COM2, respectivamente.
INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y
LPT2, respectivamente.
INT 0EH: Control de disco flexible. Señala actividad de disco flexible, como la
terminación de una operación de E/S.
INT 10H: Despliegue en vídeo. Acepta el numero de funciones en el AH para el
modo de pantalla, colocación del cursor, recorrido y despliegue.
INT 11H: Determinación del equipo. Determina los dispositivos opcionales en el
sistema y regresa el valor en la localidad 40:10H del BIOS al AX. (A la hora de
encender el equipo, el sistema ejecuta esta operación y almacena el AX en la
localidad 40:10H).
INT 12H: Determinación del tamaño de la memoria. En el AX, regresa el tamaño
de la memoria de la tarjeta del sistema, en términos de kilobytes contiguos.
INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el
estado del disco, sectores leídos, sectores escritos, verificación, formato y
obtener diagnostico.
Los dos módulos del DOS, IO.SYS y MSDOS.SYS, facilitan el uso del BIOS. Ya que
proporcionan muchas de las pruebas adicionales necesarias, las operaciones del
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
22
DOS por lo general son mas fáciles de usar que sus contrapartes del BIOS y por
lo común son independientes de la maquina.
Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones
del DOS.
INT 20H: Termina programa. Finaliza la ejecución de un programa .COM,
restaura las direcciones para Cltr + Break y errores críticos, limpia los bufer de
registros y regresa el control al DOS. Esta función por lo regular seria colocada en
el procedimiento principal y al salir de el, CS contendría la dirección del PSP. La
terminación preferida es por medio de la función 4CH de la INT 21H.
INT 21H: Petición de función al DOS. La principal operación del DOS necesita
una función en el AH.
INT 22H: Dirección de terminación. Copia la dirección de esta interrupción en el
PSP del programa (en el desplazamiento 0AH) cuando el DOS carga un programa
para ejecución. A la terminación del programa, el DOS transfiere el control a la
dirección de la interrupción. Sus programas no deben de emitir esta interrupción.
INT 23H: Dirección de Cltr + Break. Diseñada para transferir el control a una
rutina del DOS (por medio del PSP desplazamiento 0EH) cuando usted presiona
Ctlt + Break o Ctlr + c. La rutina finaliza la ejecución de un programa o de un
archivo de procesamiento por lotes. Sus programas no deben de emitir esta
interrupción.
INT 24H: Manejador de error critico. Usada por el dos para transferir el control
(por medio del PSP desplazamiento 12H) cuando reconoce un error critico (a
veces una operación de disco o de la impresora).Sus programas no deben de
emitir esta interrupción.
INT 25H: Lectura absoluta de disco. Lee el contenido de uno o mas sectores de
disco.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
23
INT 26H: Escritura absoluta de disco. Escribe información desde la memoria a
uno o mas sectores de disco.
INT 27H: Termina pero permanece residente (reside en memoria). Hace que un
programa .COM al salir permanezca residente en memoria.
INT 2FH: Interrupción de multiplexion. Implica la comunicación entre programas,
como la comunicación del estado de un spooler de la impresora, la presencia de
un controlador de dispositivo o un comando del DOS tal como ASSIGN o APPEND.
INT 33H: Manejador del ratón. Proporciona servicios para el manejo del ratón.
1.3.1 Hardware
Se les conoce con este nombre a las interrupciones causadas o generadas por
dispositivos de hardware, como dispositivos de Entrada, dispositivos de salida,
etc.
Se dividen en:
a) Interrupciones Internas de Hardware.
Las interrupciones internas son generadas por ciertos eventos que surgen
durante la ejecución de un programa. Este tipo de interrupciones son manejadas
en su totalidad por el hardware y no es posible modificarlas. Un ejemplo claro de
este tipo de interrupciones es la que actualiza el contador del reloj interno de la
computadora, el hardware hace el llamado a esta interrupción varias veces
durante un segundo para mantener la hora actualizada. Aunque no podemos
manejar directamente esta interrupción (no podemos controlar por software las
actualizaciones del reloj), es posible utilizar sus efectos en la computadora para
nuestro
beneficio,
por
ejemplo
para
crear
un
"reloj
virtual"
actualizado
continuamente gracias al contador del reloj interno. Únicamente debemos escribir
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
24
un programa que lea el valor actual del contador y lo traduzca a un formato
entendible para el usuario.
b) Interrupciones Externas de Hardware.
Las interrupciones externas las generan los dispositivos periféricos, como
pueden ser: teclado, impresoras, tarjetas de comunicaciones, etc. También son
generadas por los coprocesadores. No es posible desactivar a las interrupciones
externas. Estas interrupciones no son enviadas directamente a la CPU, sino que
se mandan a un circuito integrado cuya función es exclusivamente manejar este
tipo de interrupciones.
1.3.2 Software
Se les conoce con este nombre a las interrupciones causadas o generadas por
software,
como
son
programas
en
ejecución,
interrupciones
del
Bios,
interrupciones del Sistema Operativo, etc.
Las interrupciones de software pueden ser activadas directamente por el
ensamblador invocando al número de interrupción deseada con la instrucción INT.
El uso de las interrupciones nos ayuda en la creación de programas, utilizándolas
nuestros programas son más cortos, es más fácil entenderlos y usualmente
tienen un mejor desempeño debido en gran parte a su menor tamaño. Este tipo
de interrupciones podemos separarlas en dos categorías: las interrupciones del
sistema operativo DOS y las interrupciones del BIOS. La diferencia entre ambas
es que las interrupciones del sistema operativo son más fáciles de usar pero
también son más lentas ya que estas interrupciones hacen uso del BIOS para
lograr su cometido, en cambio las interrupciones del BIOS son mucho más
rápidas pero tienen la desventaja que, como son parte del hardware son muy
específicas y pueden variar dependiendo incluso de la marca del fabricante del
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
25
circuito. La elección del tipo de interrupción a utilizar dependerá únicamente de
las características que le quiera dar a su programa: velocidad (utilizando las del
BIOS) o portabilidad (utilizando las del DOS).
1.4 Estructura de un programa en ensamblador
Un programa en ensamblador contiene cuatro partes fundamentales llamados
segmentos:
Cada
-
Segmento de Memoria
-
Segmento de Datos
-
Segmento de Pila
-
Segmento de Código
segmento
debe
estar
incluido
en
un
programa
de
ensamblador
(preferentemente), y estos segmentos generalmente (según sea el caso) deben
inicializarse o configurarse.
Todos los programas deberán tener mínimamente la siguiente estructura:
.Model SMALL
.STACK
.DATA
; Sección para definir variables y constantes
.CODE
Inicio:
MOV AX,@DATA
MOV DS,AX
∶
MOV AH, ACH
INT 21H
END Inicio
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
26
.MODEL modelo de memoria
El modelo de memoria puede ser TINY, SMALL, MEDIUM, COMPACT o LARGE. Los
requisitos para cada modelo son:
Puede utilizar cualquiera de estos modelos para un programa autónomo (esto es,
un programa que no este enlazado con algún otro). El modelo TINY esta
destinado para uso exclusivo de programas .COM, los cuales tienen sus datos,
código y pila en un segmento. El modelo SMALL exige que el código quepa en un
segmento de 64K y los datos en otro segmento de 64K.
Los formatos generales (incluyendo el punto inicial) para las directivas que define
los segmentos de la pila, de datos y de código son:
.STACK [tamaño]
.DATA
.CODE [nombre]
1.4.1 Data Segment
Este segmento es utilizado para los datos, aunque en ensamblador a
diferencia de un lenguaje de alto nivel, el uso de variables es transparente,
puesto que en Lenguaje Ensamblador el uso de la memoria es directo, por tanto,
los nombres de las variables solo corresponden al nombre asignado para un
espacio de memoria reservado de acuerdo a las especificaciones requeridas.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
27
Dicho espacio de memoria es manipulado directamente, lo cual facilita el uso y a
la vez lo complica.
CONSTANTES
El valor de una constante se asigna en la parte correspondiente al segmento de
datos por medio de la directiva EQU. Sintaxis:
NOMBRE
EQU VALOR
Ejemplo:
Constante EQU 11001B
RESUL EQU 573H
VARIABLES
Como se mencionó anteriormente, es el nombre simbólico de una posición de
memoria correspondiente a segmento de datos la cual es accesible por programa.
Para declarar variables se usa cualquiera de las siguientes directivas:
NOMBRE DIRECTIVA VALOR
DB
realiza el almacenamiento por bytes (1 localidad de memoria)
DW realiza el almacenamiento por palabras (2 localidades)
DD
realiza el almacenamiento por palabras dobles (4 localidades)
DQ
realiza el almacenamiento por palabras cuádruples (8 localidades)
DT
realiza el almacenamiento por paquetes de diez bytes.
Las variables que son de tipo cadena deberá colocarse su valor entre comillas y
terminar con el signo $.
El tipo de directiva es importante, por que de ella dependerá el manejo de la
variable creada.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
28
1.4.2 Stack Segment
Es el segmento que permite definir el tamaño del Segmento de pila.
La pila, es un segmento de la memoria principal que se reserva para un uso
específico.
La pila funciona LIFO (Last Input, First Output), y utiliza dos funciones:
PUSH
Esta función sirve para almacenar información o colocar valores dentro de la pila,
su sintaxis es:
Push valor
POP
Esta función sirve para sustraer información o sacar valores almacenados en la
pila, su sintaxis es:
Pop variable
1.4.3 Code Segment
Segmento en el que se colocan las instrucciones o código del programa,
generalmente se inicia con las siguientes dos líneas de código y una etiqueta para
indicar el programa principal.
Inicio:
MOV AX,@DATA
MOV DS,AX
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
29
Estas dos instrucciones permiten a ensamblador iniciar el segmento de
datos, es decir, tomar la memoria principal para iniciar la ejecución de un
programa en ensamblador.
1.4.4 Instrucciones de un programa en ensamblador
Una herramienta que permite visualizar el funcionamiento de las instrucciones
utilizadas en lenguaje ensamblador es el DEBUG, debug se encuentra contenido
dentro del sistema operativo MS-DOS.
DEBUG
El programa debug proporciona las órdenes que permiten controlar y examinar
cada paso de un programa en lenguaje ensamblador, debug se suele usar cuando
se
está
desarrollando
un
nuevo
programa
y
se
desea
comprobar
su
funcionamiento al nivel de lenguaje máquina. Para llamar a debug:
C:\> DEBUG ↵
El programa responde con el símbolo “ - ”, que es el indicador del depurador. A
partir de ese momento estamos en posibilidad de invocar cualquiera de las
siguientes instrucciones:
COMANDO
R
Register,
Registro
DESCRIPCIÓN
FORMATO
Permite desplegar y modificar el contenido de
-R
todos
- R AX
los
registros
internos
del
microprocesador
Despliega el contenido de un bloque de
:
- D [Rango]
memoria correspondiente al segmento de
D
Dump, Vaciar
datos. Muestra el contenido de cada localidad
en sistema hexadecimal e indicando a la vez
su correspondiente carácter ASCII. Solo sirve
-D 0100 0108
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
30
-D 0105 L12
para el segmento de datos.
Donde el rango se especifica como una
dirección inicial hasta una dirección final, o
bien
como
una
dirección
inicial
hasta
L
direcciones consecutivas. Si no se especifica
un rango, se despliega el contenido de las
128
localidades
siguientes
a
la
última
en
forma
localidad mostrada.
Nos
permite
introducir
código
-A [Dirección]
nemotécnica.
En
A
Assemble,
Ensamblar
donde
dirección
es
el
valor
del
desplazamiento en el segmento de código a
-A 0100
partir de donde será almacenado el código
1591:0100 MOV AX, [BX]
introducido.
1591:0102 MOV AL, [BP+DI]
Si
este
parámetro
no
es
especificado, el código se guardará a partir de
la localidad siguiente donde fue almacenada
la última instrucción.
Muestra
el
contenido
de
un
bloque
de
1591:0104
-
-U [rango]
memoria correspondiente al segmento de
código.
U
Unassemble,
Desensamblar
El
visualiza
contenido
en
forma
de
de
la
memoria
instrucciones
lo
del
-U 0100 0105
ensamblador, tanto en forma desensamblada
como ensamblada.
Donde rango se define de manea similar al
comando vaciar (D)
Nos
T
Trace, Trazo
permite
ejecutar
una
instrucción
de
-T
programa, visualizando los resultados por
medio de una salida semejante a la del
comando R
Nos permite ejecutar un fragmento de un
-G [direccion_final]
programa.
G
Go, Ejecutar
Donde
dirección_final
memoria
hasta
donde
es
la
será
dirección
de
ejecutado
el
-G 0109
programa
Suma y resta dos cantidades hexadecimales
H
Aritmética
hexadecimal
-H op1 op2
visualizando ambos resultados.
Donde
op1
y
op2
son
los
datos
en
hexadecimal. En el cálculo de la diferencia
-H 0105 0100
op1 es el minuendo y op2 es el sustraendo.
Se utiliza para dar nombre a un programa.
N
Name, Nombre
-N nombre
Donde el parámetro nombre indica un nombre
de programa con extensión .COM .EXE
Q
Quit, Salir
W
Write, Grabar
Termina la ejecución de debug y regresa el
-Q
control a la línea de órdenes del DOS.
Se utiliza ara grabar programas en forma
permanente. Para hacerlo debemos:
-W
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
31
1.
Definir la longitud del programa en
bytes.
-N ejemplo.com
2.
Crear un nombre para el programa.
3.
Colocar la longitud del programa en
4.
5.
-R CX
el registro CX.
CX 0000
Colocar o apuntar el registro IP al
:5
inicio del programa.
-R IP
Dar la orden de escritura.
IP 0100
:
-W
Nos permite cargar un programa al entorno
-L [direccion]
de debed.
Donde dirección es la posición de memoria en
el segmento de código a partir de la cual será
L
Load, Cargar
cargado el programa. Para ello se debe tomar
-N ejemplo.COM
en cuenta:
-L 0100
1.
Proporcionar
el
nombre
del
programa que va a ser cargado.
2.
Cargar.
3.
Desensamblar
para
verificar
-U 0100 L5
si
realmente fue cargado el archivo.
Permite modificar el contenido de la memoria
E
Enter, Introducir
-E dirección [dato]
en el segmento de datos.
Donde dirección es la localidad de memoria a
partir de la cual se van a guardar datos.
-E 0200
1.5 Procedimiento de ensamble, enlace y ejecución.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
Los archivos fuente de código ensamblador
32
deben estar en formato ASCII standard. Para esto
puede usarse cualquier editor que permita crear archivos sin formato y guardarlos con extensión
.asm.
Los comentarios se declaran con ; y terminan al final de la línea.
El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una línea de
comando, de la siguiente manera:
MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;]
Donde:
archivo.- Corresponde al programa fuente. Por defecto se toma la extensión .ASM.
objeto.- Es el nombre para el archivo objeto.
listado.- Nombre del archivo de listado de ensamblado.
cross.- Es un archivo de referencias cruzadas.
opciones.- Pueden ser:
/A
escribe los segmentos en orden alfabético
/S
escribe los segmentos en orden del fuente
/Bnum fija buffer de tamaño num
/C
especifica un archivo de referencias cruzadas
/L
especifica un listado de ensamble
/D
crea listado del paso 1
/Dsym define un símbolo que puede usarse en el ensamble
/Ipath
fija path para buscar archivos a incluir
/ML
mantiene sensitividad de letras (mayús./minús) en nombres
/MX
mantiene sensitividad en nombre públicos y externos
/MU
convierte nombres a mayúsculas
/N
suprime tablas en listados
/P
checa por código impuro
/R
crea código para instrucciones de punto flotante
/E
crea código para emular instrucciones de punto flotante
/T
suprime mensajes de ensamble exitoso
/V
despliega estadísticas adicionales en pantalla
/X
incluir condicionales falsos en pantalla
/Z
despliega líneas de error en pantalla
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
33
La otra forma de invocar al ensamblador es sólo tecleando MASM y respondiendo a la
información que se solicita. Para omitir algún valor sólo basta teclear ENTER si dar ningún valor.
De la misma forma que el ensamblado, la fase de liga se lleva a cabo con el LINK. Este puede ser
invocado de la misma forma que el MASM. Los parámetros que este requiere son:
LINK objeto [,[ejecutable][,[mapa][,[librería]]]]][opciones][;]
Donde:
objeto.- Es el nombre para el archivo .OBJ
ejecutable.- Nombre del archivo .EXE
mapa.- Nombre del archivo mapa
librería.- Nombre del archivo biblioteca de rutinas
opciones.- Pueden ser:
/HELP
muestra lista de opciones
/PAUSE
pausa en el proceso
/EXEPACK
empaca archivo ejecutable
/MAP
crea mapa se símbolos públicos
/LINENUMBERS
copia número de líneas al mapa
/NOIGNORECASE
mantiene sensitividad en nombres
/NODEFAULTLIBRARYSEARCH
/STACK:size
fija el tamaño del stack a usar
/CPARMAXALLOC:número
/HIGH
fija alojación máxima de espacio
fija la dirección de carga más alta
/DSALLOCATE
aloja grupo de datos
/NOGROUPASSOCIATION
ignora asociaciones para direcciones
/OVERLAYINTERRUPT:número
/SEGMENTS:número
/DOSSEG
no usa bibliotecas por defecto
asigna nuevo número a la INT 03Fh
procesa un número de segmentos
sigue la convención de orden de DOS
Para la ejecución del programa simplemente basta teclear su nombre en el prompt de MS-DOS y
teclear ENTER. Con esto el programa será cargado en memoria y el
ejecutarlo.
sistema procederá a
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
34
1.6 Entorno de programación
El entorno de programación del Lenguaje Ensamblador, es el entorno de
consola, por tanto, antes de programar en ensamblador se necesita aprender los
comandos básicos del DOS.
Como ya se mencionó la edición de un programa en ensamblador, tiene que ser
mediante un editor de texto (Ejemplo el bloc de notas) y tiene que almacenarse
con extensión .asm y después salir al símbolo del sistema (en el caso de
Windows) y ahí ensamblar, enlazar y ejecutar el programa construido.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
35
UNIDAD II
ELEMENTOS DEL LENGUAJE
2.1 Instrucciones Lineales
Las instrucciones básicas en Lenguaje ensamblador son las siguientes:
2.1.1 Movimiento
La instrucción para mover información de un lugar a otro es la instrucci{on
MOV, que funciona como si fuera el operador =
Instrucción Mov, almacena el contenido de la fuente en el destino.
Formato:
MOV Destino, Fuente
Y se puede utilizar como ya se mencionó en los Modos de Desplazamiento.
2.1.2 Pila
Las instrucciones para la manipulación de la Pila son Push y Pop.
PUSH
Esta función sirve para almacenar información o colocar valores dentro de la pila,
su sintaxis es:
Push valor
Donde valor puede ser una constante o una variable
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
36
POP
Esta función sirve para sustraer información o sacar valores almacenados en la
pila, su sintaxis es:
Pop variable
Recordando siempre que la pila funciona LIFO.
2.1.3 Matemáticos
Instrucción
ADD
Suma sin
acarreo
ADC
Suma con
acarreo
SUB
Resta
SBB
Resta con
préstamo
MUL
Multiplicació
n
IMUL
Multiplicació
n con signo
DIV
División
IDIV
División con
signo
INC
DEC
Incrementar
Decrementar
Descripción
Formato
Suma la fuente al destino y guarda el resultado
en el desino
ADD destino, fuente
Suma la fuente con el destino, guardando el
resultado en el destino e incrementándolo en 1 si
la bandera de acarreo (CF) está activada.
Se utiliza para sumar datos de 32 bits, donde el
resultado se guarda en el registro par DX:AX
Resta la fuente del destino almacenando el
resultado en el destino.
Resta la fuente del destino, almacenando el
resultado en el destino y decrementándolo en 1,
si la bandera CF se encuentra activada.
Realiza la multiplicación de dos datos sin signo.
Dependiendo de la longitud de los operandos se
puede se puede tener:
Fuente * AL = AX
Fuente * AX = DX:AX
Es similar a la instrucción MUL, con la única
diferencia de que opera con datos representados
en notación de complemento a 2 con signo.
Realiza una división sin signo. Existen dos casos:
AL
AX
Fuente AX
Fuente DX:AX
AH
DX
ADC destino, fuente
Opera de manera similar que DIV a excepción de
que los números son representados en notación
de complemento a 2 con signo.
Incrementa en 1 al destino
IDIV fuente
Decrementa en 1 al destino
DEC destino
SUB destino, fuente
SBB destino, fuente
MUL fuente
IMUL fuente
DIV fuente
INC destino
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
37
2.1.4 Ajustes
Instrucción
Descripción
Negación bit a
bit
Negativo
NOT
NEG
Formato
Realiza la negación bit a bit del operando destino
NOT Destino
Genera el complemento a 2 del operando destino
NEG Destino
2.1.5 Comparación
Instrucción
Descripción
CMP
Comparar
TEST
Probar
Formato
Resta operando fuente del destino sin guardar el
resultado, afectando únicamente el registro de
banderas.
Realiza la conjunción bit a bit entre el operando
fuente y el destino, sin guardar el resultado.
Afectando únicamente al registro de banderas.
CMP Destino, Fuente
TEST Destino, Fuente
2.2 Saltos
Al
ser
el
lenguaje
ensamblador
un
lenguaje
estructurado,
existen
instrucciones para “Saltar” la ejecución normal de un programa, es decir, se envía
el flujo de la ejecución a otro lado del programa, estos saltos pueden ser
condicionales o incondicionales.
2.2.1 Incondicional
Un salto incondicional, como su nombre lo dice, no necesita condiciones
para saltar, es decir, simplemente se coloca la función y el salto se realiza sean
cual sean las condiciones del programa.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
38
El salto incondicional puede realizarse mediante la función:
Instrucción
JMP
Salto incondicional
Descripción
Envía el flujo de control del programa
a la dirección de memoria situada en
el segmento
Formato
JMP etiqueta
2.2.2 Condicional
Los saltos condicionales, solo envían el flujo del control del programa si la
condición que especifican se ha cumplido.
Los saltos condicionales son:
SALTO AL COMPARAR NÚMEROS SIN SIGNO
Instrucción
JA
JNBE
JAE
JNB
JB
JNAE
JBE
JNA
Salta si está por encima
Salta si no está por debajo
o igual
Salta si está por encima o
igual
Salta si no está por por
debajo
Salta si está por debajo
Salta si no esta por encima
o igual
Salta si está por debajo o
igual
Salta si no está por encima
Descripción
Formato
CF = 0
CF = 0
ZF = 0
ZF = 0
CF = 0
Envía el flujo de control del programa
a la dirección de memoria situada en
el segmento
CF = 0
CF = 1
CF = 1
CF = 1
CF = 1
ZF = 1
ZF = 1
SALTO AL COMPARAR NÚMEROS CON SIGNO
Instrucción
JG
JNLE
JGE
JNL
JL
JNGE
JLE
JNG
JE
JNE
Salta si es mayor que
Salta si no es menor o
igual que
Salta si es mayor o igual
Salta si no es menor
Salta si es menor
Salta si no es mayor o
igual
Salta si es igual o menor
Salta si no es mayor
Salta si es igual
Salta si no es igual
Descripción
Formato
ZF = 0 Y SF = OF
ZF = 0 Y SF = OF
SF = OF
SF = OF
Envía el flujo de control del programa
a la dirección de memoria situada en
el segmento
SF = OF
SF = OF
ZF = 1 O SF = OF
ZF = 1 O SF = OF
ZF = 1
ZF = 0
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
39
2.3 Tipos de Ciclos
Instrucción
LOOP
Ciclo
Descripción
Decrementa CX en 1 y después transfiere el flujo
de control a una etiqueta corta si CX es diferente
de 0.
Formato
LOOP etiqueta
2.4 Operadores Lógicos
Instrucción
Conjunción
AND
Disyunción
OR
XOR
Disyunción
exclusiva
Descripción
Realiza la operación lógica Y
Formato
AND Destino, Fuente
Realiza la operación lógica O
OR Destino, Fuente
Realiza las operaciones lógicas correspondientes
XOR Destino, Fuente
2.5 Desplazamiento
Los desplazamientos dentro del Lenguaje Ensamblador, se trabajan a nivel de bits
de los valores de las variables (como todas las operaciones en ensamblador),
para entender los desplazamientos, se necesita tener el valor de una variable en
su equivalente binario y los desplazamientos o corrimientos se realizan de
acuerdo a la instrucción indicada, y pueden ser lineales o circulares.
2.5.1 Lineal
Los desplazamientos o corrimientos lineales, mueven los bits hacia la
derecha o izquierda según sea el caso, y pierden bits del lado del corrimiento.
El número de bits que se pierde en este tipo de corrimientos depende del conteo
especificado, los bits perdidos son sustituidos por ceros.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
Instrucción
SHL
Corrimiento a
la izquierda
SHR
Corrimiento a
la derecha
40
Descripción
SHL
Å
Destino
Formato
Realiza corrimientos de bits a la izquierda en
dato almacenado en el destino. Conteo indica
número de desplazamientos a realizar.
Realiza corrimientos de bits a la derecha en
dato almacenado en el destino. Conteo indica
número de desplazamientos a realizar.
el
el
SHL Destino, Conteo
el
el
SHR Destino, Conteo
SHR
Å0
Æ
Destino
0Æ
2.5.2 Circular
Los desplazamientos o corrimientos circulares, mueven los bits hacia la
derecha o izquierda según sea el caso de forma circular, es decir, no se pierde
ningún bit por que estos dan vuelta en circulo.
Instrucción
ROL
ROR
RCL
RCR
Rotación a la
izquierda
Rotación a la
derecha
Rotación a la
izquierda con
acarreo
Rotación a la
derecha con
acarreo
ROL
Descripción
ROR Destino, Conteo
Desplaza un número determinado de bits en el
destino, colocando los bits que salen del registro
al principio o al final. Conteo indica el número de
desplazamientos a realizar.
ROR
Destino
RCL
Destino
RCL Destino, Conteo
RCR Destino, Conteo
Destino
CF
Formato
ROL Destino, Conteo
RCR
Destino
CF
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
41
2.6 Procesos de Control
Los procesos de control se refiere a instrucciones para el control de algunas
características especiales, entre ellas:
2.6.1 Banderas
Banderas
Desactivadas:
XF = 0
Activadas
XF = 1
OF
DF
IF
SF
ZF
AF
PF
CF
NV
UP
DI
PL
NZ
NA
PO
NC
OV
DN
EI
NG
ZR
AC
PE
CY
SALTO SEGÚN EL ESTADO DEL REGISTRO DE BANDERAS
Instrucción
Acarreo
Cero
Sobreflujo
Signo
Paridad
Descripción
JC
JNC
JZ
JNZ
JO
JNO
JS
JNS
JP
JNP
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
Salta
si
si
si
si
si
si
si
si
si
si
Formato
existe acarreo
no existe acarreo
es cero
no es cero
hay sobreflujo
no hay sobreflujo
es negadito
no es negativo o es positivo
el número de 1 es par
el número de 1 es impar o no es par
CF = 1
CF = 0
ZF = 1
ZF = 0
OF = 1
OF = 0
SF = 1
SF = 0
PF = 1
PF = 0
2.6.2 Cadenas
Instrucción
CMPS
Descripción
Formato
Compara cadenas, es decir, compara
dos secciones de datos de memoria
de bytes, palabras o palabras dobles.
Utiliza
para
la
comparación
los
registros DS y SI como apuntadores
para las cadenas a comparar.
CMPS
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
42
2.6.3 Carga
Instrucción
LEA
Descripción
Formato
Carga la dirección efectiva de Fuente
en Destino,
es decir,
Destino
convierte en un puntero a Fuente
se
Lea Destino, Fuente
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
43
UNIDAD III
MODULARIZACIÓN
3.1 Macros
Una macro es un grupo de instrucciones que efectua una tarea con un
formato muy parecido al de un procedimiento. La diferencia que existe con
respecto a una rutina es que el MACRO se inserta o expande en el programa
principal como nuevo código que contiene una secuencia de instrucciones. Las
macros se asemejan a las funciones en los lenguajes de alto nivel.
Las macrosecuencias se ejecutan con mayor rapidez que los procedimientos
por que no hay que ejecutar instrucciones de llamado ni retorno. En este caso las
instrucciones de macro se colocan en el programa en el punto donde se les
invoca.
Para delinear una macrosecuencia se hace uso de las directivas:
MACRO y ENDM
NOMBRE MARCO PARAM1, PARAM2, … , PARAMN
∶
ENDM
El primer enunciado de un macro contiene su nombre y una lista de
parámetros relacionados con el mismo. El siguiente ejemplo define a la macro
MOVER donde se manejan 2 parámetros.
MOVER MACRO A,B
PUSH AX
MOV AX,B
MOV B,AX
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
44
POP AX
ENDM
3.1.1 Internas
Una Macro interna, como su nombre lo dice se encuentra dentro del programa
principal.
Ejemplo:
;PROGRAMA QUE ACEPTA DOS DATOS DESDE TECLADO, LOS SUMA Y DESPLIEGA EL RESULTADO
.MODEL SMALL
SUMA MACRO R,S1,S2
PUSH AX
MOV AX,S1
ADD AX,S2
MOV R,AX
POP AX
ENDM
.STACK
.DATA
VAR1 DW ?
VAR2 DW ?
RESUL DW ?
M1 DB "INTRODUCE EL PRIMER VALOR:$"
M2 DB 10,13,"INTRODUCE EL SEGUNDO NÚMERO:$"
M3 DB 10,13,"SUMA:$"
.CODE
EXTRN RECIBE_DATO:FAR
EXTRN IMP_CADENA:FAR
EXTRN IMP_AX:FAR
INICIO:
MOV AX,@DATA
MOV DS,AX
LEA DX,M1
CALL IMP_CADENA
CALL RECIBE_DATO
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
45
MOV VAR1,SI
LEA DX,M2
CALL IMP_CADENA
CALL RECIBE_DATO
MOV VAR2,SI
LEA DX,M3
CALL IMP_CADENA
SUMA RESUL,VAR1,VAR2
MOV AX,RESUL
CALL IMP_AX
MOV AH,4CH
INT 21H
END INICIO
3.2 Procedimientos
Los procedimientos son subprogramas que se encuentran dentro o fuera del
programa principal. Estos pueden ser:
1. Internos
2. Externos
3.2.1 Internos
Esta clase de rutinas o subprogramas se encuentra dentro del archivo del
programa principal. En programa pueden incluirse cuantos procedimientos sean
necesarios.
.MODEL SMALL
.STACK
.DATA
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
46
∶
Se usa la palabra
Call para llamar o
usar el
procedimiento
.CODE
INICIO:
∶
CALL NOMBRE_PROCEDIMIENTO
∶
MOV AH,4CH
INT 21H
Para
procedimientos
Internos
NOMBRE_PROCEDIMIENTO PROC NEAR
PUSH REGISTROS
Regresa el
control al
programa
principal
∶
CODIGO DEL PROCEDIMIENTO
Deben guardarse los
valores de todos los
registros para que no se
pierdan
∶
POP REGISTROS
RET
NOMBRE_PROCEDIMIENTO ENDP
Se regresan los
valores a los
registros
END INICIO
Ejemplo:
Programa que incluye un procedimiento interno que imprime una cadena
.MODEL SMALL
.STACK
.DATA
CADENA DB “Procedimientos..$”
.CODE
INICIO:
MOV AX,@DATA
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
47
MOV DS,AX
LEA DX, CADENA
CALL IMPCADENA
MOV AH,4CH
INT 21H
IMPCADENA PROC NEAR
PUSH AX
MOV AH,9
INT 21H
POP AX
RET
IMPCADENA ENDP
END INICIO
3.2.2 Externos
Es aquella que se encuentra en un segmento de código diferente al que
almacena el programa principal, es decir, se encuentra en un archivo diferente.
Su formato es semejante al de un procedimiento interno donde la única diferencia
estriba en que será de tipo lejano (FAR) en lugar de cercano (NEAR).
Para incluir una rutina externa dentro de un programa usar:
Extrn Nombre_Procedimiento:far
El archivo principal puede llamar a todas las rutinas externas necesarias, y el
archivo que contiene la rutina externa puede contener mas de una rutina.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
48
Ejemplo:
; ESTE ARCHIVO CONTIENE EL PROGRAMA PRINCIPAL, LLAMADO PRINCIPAL.ASM
.MODEL SMALL
.STACK
.DATA
CADENA DB “Procedimientos..$”
.CODE
Incluye el
procedimiento
externo
EXTRN IMPCADENA:FAR
INICIO:
MOV AX,@DATA
MOV DS,AX
LEA DX, CADENA
CALL IMPCADENA
MOV AH,4CH
INT 21H
END INICIO
;ESTE ARCHIVO CONTIENE LA RUTINA EXTERNA LLAMADA IMPCAD.ASM
.MODEL SMALL
.CODE
PUBLIC IMPCADENA
INICIO:
IMPCADENA PROC FAR
PUSH AX
MOV AH,9
INT 21H
POP AX
RET
IMPCADENA ENDP
END INICIO
Alcance del
procedimiento
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
49
Para crear el archivo ejecutable:
1. Compilar por separado cada archivo fuente
MASM PRINCIPAL;
MASM IMPCAD;
se obtendrá:
Principal.obj
Impcad.obj
2. Enlazar de la siguiente manera:
LINK PRINCIPAL + IMPCAD;
Al final se genera el ejecutable PRINCIPAL.EXE y es el que se ejecuta.
La ventaja principal de las rutinas externas, es que puede generarse un archivo
que contenga a todas ellas, y usarlas para cualquier archivo, puede generarse
una rutina para:
-
Aceptar a AX desde teclado
-
Imprimir el valor de AX
A continuación se presenta el archivo MODULO.ASM, que contiene estas tres
principales rutinas.
.MODEL SMALL
.DATA
NUM DB 5 DUP (?)
E DB "
$"
.CODE
PUBLIC IMP_CADENA
PUBLIC RECIBE_DATO
PUBLIC IMP_AX
INICIO:
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
IMP_CADENA PROC FAR ;imprime una cadena apuntada por DX
PUSH AX
MOV AH,9
INT 21H
POP AX
RET
IMP_CADENA ENDP
RECIBE_DATO PROC FAR ;recibe un dato desde teclado y lo almacena en SI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AX,@DATA
MOV DS,AX
LEA DI,NUM
MOV CL,4
S1:
MOV AH,1H
INT 21H
CMP AL,0DH
JE S2
MOV [DI],AL
DEC CL
INC DI
CMP CL,0
JE S2
JMP S1
S2:
MOV CL,24H
MOV [DI],CL
MOV BX,0
MOV CX,0
MOV SI,DI
LEA DI,NUM
MOV CX,1
50
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
E3:
DEC SI
MOV AH,0
MOV AL,[SI]
SUB AL,30H
MOV DX,0
MUL CX
ADD BX,AX
MOV DX,0
MOV AX,CX
MOV CX,10
MUL CX
MOV CX,AX
CMP DI,SI
JNE E3
MOV SI,BX
POP DI
POP DX
POP CX
POP BX
POP AX
RET
RECIBE_DATO ENDP
IMP_AX PROC FAR; imprime en pantalla el contenido de AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH AX
MOV AX,@DATA
MOV DS,AX
POP AX
MOV BX,10
LEA SI,E
51
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
ADD SI,3
CICLO:
MOV DX,0
DIV BX
ADD DL,30H
MOV [SI],DL
DEC SI
CMP AX,0
JNE CICLO
LEA DX,E
MOV AH,9H
INT 21H
POP SI
POP DX
POP CX
POP BX
RET
IMP_AX ENDP
END INICIO
52
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
53
UNIDAD IV
PROGRAMACIÓN HÍBRIDA
Interrupciones
INTERRUPCIONES DEL DOS
Realiza
Llamada
FIJAR POSICIÓN DEL CURSOR
AH
02H
BH Número de página (0 para modos gráficos)
DH Renglón
Int 10/02
DL Columna
Devuelve
Descripción
Nada
Se usa para colocar el cursor en una posición específica. Las
posiciones se definen en relación con la esquina superior izquierda
(0,0) cuando la pantalla está en modo de texto. La esquina inferior
izquierda es (79,24) en el modo de texto 80x25 y (39,24) en el
modo 40x25.
Realiza
Llamada
ESCRIBIR CARÁCTER Y ATRIBUTO
AH 90H
AL Carácter ASCII
BH Página de presentación visual
BL Byte de atributo del carácter en AL
CX Número de caracteres por escribir
Int 10/09
Devuelve
Descripción
Nada
Escribe los bytes del carácter ASCII y atributo en la posición
del cursor en una página específica de presentación. Esta
función no cambia la posición del cursor. Escribe hasta
65536 caracteres en modo de texto.
Conforme la función escribe caracteres, cambia de renglón
al terminar cada uno.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
54
En el modo de graficación, la función solo va al final del
renglón en curso y el byte de atributo de video asignado a
BL determina el color del carácter escrito. Si el bit 7 vale 1,
se le aplica XOR al valor en BL, con el color del fondo
cuando se muestra el carácter.
Realiza
Llamada
FIJAR PALETA DE COLOR
AH 0BH
BH Identificación de la paleta de color que se está fijando
0, BL tienen el color de fondo y borde
1, BL tiene color de paleta
BL Valor del color que se usará
Devuelve
Descripción
Nada
Esta función selecciona o fija el contenido de la paleta de
color y solo trabaja en pantallas de gráficos de definición
media. La función no tiene efecto directo sobre la memoria;
Int 10/0B
afecta la forma en que el controlador de TRC 6845
interpreta la memoria de video. En modo de texto, esta
función establece el color del borde. Las paletas de color
válidas para esta función son:
Paleta
0
1
Píxel
Color
0
Igual que el fondo
1
Verde
2
Rojo
3
Café
0
Igual que el fondo
1
Cianato
2
Magenta
3
Blanco
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
55
Realiza
ESCRIBE UN SOLO PÍXEL EN LA PANTALLA EN UNA
COORDENADA ESPECIFICADA
Llamada
AH 0CH
AL Valor del color
BH Número de página
Int 10/0C
CX Número de columna del píxel
DX Número de renglón del píxel
Devuelve
Descripción
Nada
En modos de definición media, el efecto de esta función
depende de la paleta en uso. Si el bit de Al es 1, al nuevo
color se le aplica XOR con el píxel actual.
Realiza
ESCRIBIR CADENA
Llamada
AH 13H
AL Modo de escritura
BH Página de video
BL Atributo (modos de escritura 0 y 1)
CX Longitud de la cadena
DH Renglón en el cual se escribirá la cadena
DL Columna en la cual se escribirá la cadena
Int 10/13
ES:BP Apuntador a cadena
Devuelve
Descripción
Nada
Escribe una cadena de caracteres en la pantalla actual. La
cadena designada puede tener atributos de caracteres
incorporados o globales. El modo (AL) se especifica de la
siguiente manera:
MODO
0
COMENTARIOS
Atributo en BL. La cadena es solo de caracteres. No
se actualiza el cursor.
1
Atributo en BL. La cadena es solo de caracteres. Se
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
56
actualiza el cursor.
2
La cadena alterna caracteres y atributos. No se
actualiza el cursos.
3
La cadena alterna caracteres y atributos. Se actualiza
el cursor.
Realiza
Llamada
LEER DISQUETE
AH 02H
AL Número de sectores por transferir (1 a 9)
ES:BX Apuntador al buffer de disco del usuario
CH Número de pista (0 a 39)
CL Número de sector(1 a 39)
DH Número de cabeza (0 o 1)
DL Número de unidad (0 a 3)
Int 13/02
Devuelve
Bandera de acarreo en cero si hubo éxito
AL número de sectorses transferidos
Bandera de acarreo en uno si hubo error
AH byte de estado
Descripción
Transfiere uno o más sectores de un disquete a la memoria.
Todos
los
parámetros
cuidadosamente
antes
de
de
entrada
expedir
deben
una
verificarse
llamada
para
servicio; pasar un valor inválido puede producir resultados
impredecibles.
Int 13/03
Realiza
Llamada
ESCRIBE SECTORES DE DISCO
AH 03H
AL Número de sectores por transferir(1ª 9)
ES:BX Apuntador al buffer de disco del usuario
CH Número de pista (0 a 39)
CL Número de pista(0 a 39)
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
57
CL Número de sector(1 a 9)
DH Número de cabeza(0 o 1)
DL Número de unidad(0 a 3)
Devuelve
Bandera de acarreo en cero si hubo éxito
AH 0
AL Número de sectores transferidos
Bandera de acarreo en uno si hubo error
AH Byte de estado
Descripción
Escribe uno o mas sectores de la memoria al disquete.
Excepto por el número de unidad de disco, no se verifica la
validez de los valores. Pasar un valor invalido puede
producir resultados impredecibles.
Realiza
Llamada
DAR FORMATO A PISTA DEL DISCO
AH 05H
ES:BX Apuntador a lista de campos de direcciones de pistas
CH Número de pista
DH Número de cabeza
DL Número de unidad
Devuelve
Int 13/05
Descripción
AH Código de retorno
Da formato a una pista de disco iniciando los campos de
dirección de disco y los sectores de dastos. La operación de
dar formato a disco es controlada por la lista de campos de
direcciones de pistas (ES:BX).l atabla está dispuesta como
una serie de entradas de 4 bytes (una para cada sector de la
pista), con cada entrada de la manera siguiente:
DESPLAZAMIENTO SIGNIFICADO
00H
Número de pista
01H
Número de cabeza
02H
Número de sector
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
58
03H
Código de tamaño
Realiza
PREPARA PUERTO DE COMUNICACIONES
Llamada
AH 00H
AL Parámetro de iniciación
DX
Número de puerto (0=COM1, 1=COM2, 2=COM3,
3=COM4)
Devuelve
AH Estado de puerto
AL Estado de MODEM
Descripción
Se usa para preparar un puerto serial (DX). Especifique
como debe prepararse el puerto (AL) usando lo siguiente:
Bit 2
Int 14/00
Bits 7,6,5
Bits 4,3
Velocidad
de paridad
Bits 1,0
Bits de Longitud
alto
bauds
de
palabra
000=110
00=ninguna 0=1
10=7 bits
001=150
01= impar
11=8 bits
010=300
10=ninguna
011=600
11=par
1=2
100=1200
101=2400
110=4800
111=9600
Int 14/01
Realiza
Llamada
ESCRIBE UN CARÁCTER EN PUERTO DE COMUNICACIONES
AH 01H
AL Carácter por escribir
DX
Número de puerto (0=COM1, 1=COM2, 2=COM3,
3=COM4)
Devuelve
AH bit 7=0 no hubo error
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
59
AH bit 7=1 error; los bits 0 a 6 muestran la causa de la
falla
Descripción
Escribe un carácter en el puerto serial especificado y
devuelve el estado de este. Antes de llamar a esta función,
asegúrese de usar Int 14/00 para preparar el puerto.
Realiza
LEE CARÁCTER DEL PUERTO DE COMUNICACIONES
Llamada
AH 02H
DX
Número de puerto (0=COM1, 1=COM2, 2=COM3,
3=COM4)
Int 14/02
Devuelve
AH bit 7=0 no hubo error
AL Carácter
AH bit 7 = 1 error
Descripción
Lee un carácter del puerto serial especificado y devuelve el
estado del puerto. Antes de llamar a esta función se debe
preparar el puerto.
Realiza
Llamada
SOLICITAR EL ESTADO DEL PUERTO DE COMUNICACIONES
AH 03H
DX
Número de puerto (0=COM1, 1=COM2, 2=COM3,
3=COM4)
Int 14/03
Devuelve
AH Estado del puerto
AL Estado del modem
Descripción
Esta función, que devuelve el estado del puerto de
comunicaciones especificado, solicita el estado sin hacer
E/S adicionales ni afectar el puerto de alguna otra manera.
Int 15/4F
Realiza
Llamada
INTERCEPCIÓN DEL TECLADO
AH 4FH
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
60
Bandera de acarreo en 1
AL Código de examinación del teclado
Devuelve
Bandera de acarreo en uno
AL Nuevo código de examinación
Bandera de acarreo en cero
AL Código de examinación original
Descripción
Devuelve el código de examinación en el registro AL con la
bandera de acarreo en uno.
Realiza
Llamada
ABRIR DISPOSITIVO
AH 80H
BX Identificación del dispositivo
Int 15/80
CX Identificación del proceso
Devuelve
Bandera de acarreo en uno si hubo error
AH 86H
Descripción
Fue diseñada para usarse en operaciones rudimentarias de
múltiples tareas.
Realiza
Int 15/85
TECLA DE SOLICITUD DE SISTEMA PRESIONADA
Llamada
AH 85H
Devuelve
AL 00H tecla presionada
01H yecla liberada
Descripción
BIOS llama a esta función siempre que la tecla de solicitud
del sistema se presionada o liberada.
Int 15/86
Realiza
ESPERA
Llamada
AH 86H
CX,DX Tiempo antes del regreso en microsegundos (exacto
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
61
hasta en 976 microsegundos)
Devuelve
Bandera de acarreo en uno (espera en progreso)
Bandera de acarreo en cero (espera exitosa)
Descripción
Fue diseñada para usarse dentro del software de sistema
operativo para establecer esperas del sistema.
Realiza
Int 16/00
LEER CARÁCTER DE TECLADO
Llamada
AH 00H
Devuelve
AH Código de examinación de teclado
AL Código de carácter ASCII
Descripción
Espera y lee un solo carácter del buffer del teclado y lo
devuelve junto con su código de examinación. El buffer del
teclado por lo general se localiza en 0040;001ª
Realiza
LEER ESTADO DEL TECLADO
Llamada
AH 01H
Devuelve
Bandera de cero en cero si se oprimió un atecla
AH Código de examinación
AL carácter ASCII
Int 16/01
Bandera de cero en uno si no se oprimió tecla alguna
Descripción
Si se oprimió alguna tecla, esta función pone cero en la
bandera de cero y devuelve el código ASCII de la digitación
y el código de examinación del teclado. Si no hay
digitaciones por procesar, la función pone 1 en la bandera
de cero y regresa.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
62
Realiza
DEVOLVER BANDERAS DE TECLADO
Llamada
AH 02H
Devuelve
AL Byte de banderas de teclado de BIOS ROM
Descripción
Devuelve el esdtaso de los conmutaciones biestables y las
teclas shift del registro de estado de BIOS mantenido en la
localidad de memoria 0000:0417H. la siguiente tabla
muestra el significado de los bits del registro AL al volver
de la función.
Int 16/02
Realiza
Int 16/10
7
6
5
4
3
2
1
0
Significado
.
.
.
.
.
.
.
1
Tecla shift derecha oprimida
.
.
.
.
.
.
1
.
Tecla shift izquierda oprimida
.
.
.
.
.
1
.
.
Tecla ctrl. oprimida
.
.
.
.
1
.
.
.
Tecla Alt oprimida
.
.
.
1
.
.
.
.
Scroll Lock habilitado
.
.
1
.
.
.
.
.
Num Lock habilitado
.
1
.
.
.
.
.
.
Caps Lock habilitado
1
.
.
.
.
.
.
.
Tecla Insert activada
OBTENER DIGITACIÓN
Llamada
AH 10H
Devuelve
AH Código de examinación
AL caracter
Descripción
Int 17/00
Realiza
Llamada
Permite el reconocimiento de teclas similares
ESCRIBIR CARÁCTER EN IMPRESORA
AH 00H
AL Carácter
DX Número de impresora (0 a 2)
Devuelve
AH Estado de impresora
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
63
Descripción
Escribe el carácter especificado en el puerto de impresora y
devuelve el estado actual de la impresora.
Realiza
Llamada
Int 17/01
PREPARAR PUERTO DE IMPRESIÓN
AH 001H
DX Número de impresora (0 a 2)
Devuelve
Descripción
AH Estado de la impresora
Prepara el puerto paralelo de la impresora y devuelve el
estado de este.
Realiza
LEER RELOJ DE TIEMPO REAL
Llamada
AH 02H
Devuelve
Bandera de acarreo en cero si hubo éxito
CH Horas (BCD)
CL Minutos (BCD)
Int 1A/02
DH Segundos (BCD)
DL Bandera de tiempo de aprovechamiento de la luz de día
Bandera de acarreo en uno si hubo error
Descripción
Devuelve los valores del reloj en BCD (decimal codificado en
binario)
Int 1A/03
Realiza
Llamada
FIJAR RELOJ DE TIEMPO REAL
AH 03H
CH Horas (BCD)
CL Minutos (BCD)
DH segundos (BCD)
DL Tiempo de ahorrro de luz de día
Devuelve
Nada
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
64
Descripción
Los valores deben establecerse en BCD. DL se codifica para
indicar si el reloj mantiene un tiempo estándar (DL=0) o
tiempo de aprovechamiento de la luz del día(DL=1)
Realiza
LEER FECHA DEL RELOJ DE TIEMPO REAL
Llamada
AH 04H
Devuelve
Bandera de acarreo en cero si hubo éxito
CH Siglo (BCD)
Int 1A/04
CL Año
DH Mes
DL Día
Bandera de acarreo en uno si hubo error
Descripción
Realiza
Llamada
Devuelve los valores de reloj en BCD.
FIJAR FECHA DEL RELOJ DE TIEMPO REAL
AH 5H
CH Siglo
CL Año
Int 1A/05
DH Mes
DL Día
Devuelve
Descripción
Int 1A/06
Realiza
Nada
Los valores del reloj deben establecerse en BCD
FIJAR ALARMA DEL SISTEMA, FIJA EL CRONÓMETRO DE
ALARMA DEL SISTEMA PARA GENERAR UNA INTERRUPCIÓN
EN UN MOMENTO FUTURO
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
65
Llamada
AH 06H
CH Horas
CL Minutos
DH Segundos
Devuelve
Bandera de acarreo en cero si hubo éxito
Bandera de acarreo en uno si hubo error
Descripción
Los valores para fijar la alarma deben estar en BCD. Fijar la
alarma representa un desplazamiento del tiempo presente.
Cuando el tiempo se acaba, el sistema emitirá una Int 04
(desborde aritmético) . antes de reestablecer la alarma,
debe inhabilitarla con un Int 1A/07 y definir un manejador
de interrupción para manejarla.
Realiza
Int 1A/07
INHABILITA ALARMA DEL RELOJ DE TIEMPO REAL
Llamada
AH 07H
Devuelve
Nada
Descripción
Esta función inhabilita la alarma del reloj de tiempo real. Si
ya se fijó la alarma, se debe usar esta función para poder
fijarla de nuevo.
Realiza
Llamada
MOSTRAR SALIDA
AH 02H
DL Datos con caracteres de 8 bits
Int 21/01
Devuelve
Descripción
Nada
Dirige la salida a la pantalla de video (STDOUT). La función
manejará
el
carácter
de
retroceso
(backspace)
adecuadamente como un retroceso no destructivo en
pantalla. Ctrl-C y Ctrl-Break se manejan a través de Int 23.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
66
Realiza
SALIDA AUXILIAR
Llamada
AH 04H
Int 21/04
DL Datos de 8 bits como salida para STDAUX
Devuelve
Descripción
Realiza
Llamada
Nada
Se usa para enviar un carácter por el puerto serial.
MOSTRAR CADENA
AH 09H
DS:DX Apuntador a cadena terminada con $
Int 21/09
Devuelve
Descripción
Nada
Envía a la salida series contiguas de caracteres del mismo
modo que Int 02 muestra caracteres individuales. Todos los
caracteres que comienzan en una dirección especificada se
envían a la salida hasta que se encuentra un signo de $
Realiza
OBTENER FECHA DEL SISTEMA
Llamada
AH 2AH
Devuelve
CX Año (1980 a 2099)
DH Mes (1 al 12)
Int 21/2A
DL Día(1 a 31)
AL Día de la semana (0=domingo, 1=lunes, etc)
Descripción
Devuelve la fecha del sistema basándose en el reloj interno
de DOS.
Int 21/2B
Realiza
Llamada
ESTABLECER FECHA DEL SISTEMA
AH 2BH
CX Año (1980 a 2099)
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
67
DH Mes
DL Dia
Devuelve
AL 00H, fecha establecida exitosamente
FFH fecha invalida, no establecida
Descripción
Normalmente solo se establece la porción de fecha del reloj
interno del DOS, pero si la computadora tiene un reloj
CMOS con esta función también se establece la fecha de
este.
Realiza
OBTENER HORA DEL SISTEMA
Llamada
AH 2CH
Devuelve
CH Hora (0 a 23)
CL Minutos (0 a 59)
Int 21/2C
DH Segundos (0 a 59)
DL centésimas de segundo (0 a 99)
Descripción
Obtiene la hora del reloj interno del DOS, la cual solo es
exacta si fue establecida correctamente.
Realiza
Llamada
ESTABLECER LA HORA DEL SISTEMA
AH 2DH
CH Hora
CL Minutos
DH Segundos
Int 21/2D
DL centésimas
Devuelve
AL 00H hora fijada exitosamente
FFH hora inválida, no establecida
Descripción
Normalmente, solo se establece la porción de hora del reloj
interno de DOS.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
68
Realiza
TERMINAR Y PERMANECER RESIDENTE
Llamada
AH 31H
AL Código de retorno
DX Tamaño de memoria por reservar(en párrafos)
Int 21/31
Devuelve
Descripción
Nada
Termina la operación del programa pero no libera la
memoria asignada a este ni cierra los archivos abiertos.
Esta función permite mas de 64K de memoria y el control
del código de retorno, que está disponible para el
programa padre a través de Int 21/4D
Realiza
Llamada
OBTENER ESPACIO LIBRE DEL DISCO
AH 36H
DL Unidad de diso 0=omisión 1=A, 2=b, etc
Int 21/36
Devuelve
AX Sectores por grupo, FFFFH si la unidad es inválida
BX Número de grupos disponibles
CX bytes por sector
DX Grupos en unidad
Descripción
Esta función devuelve información básica que puede usarse
para determinar el espacio disponible en disco
Realiza
Llamada
CREAR SUBDIRECTORIO
AH 39H
DS:DX Apuntador a especificación de trayectoria ASCII
Int 21/39
Devuelve
Bandera de acarreo en cero si hubo éxito
Bandera de acarreo en uno si hubo error
AX 03H trayectoria no encontrada
05H acceso negado
Descripción
Permite la creación de nuevos directorios. La función
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
69
devolverá un error y no creará el directorio si este ya existe,
si cualquier elemento del nombre de la trayectoria no existe
o si el directorio proviene de la raíz y la raíz está llena.
Realiza
Llamada
ELIMINAR SUBDIRECTORIO
AH 3AH
DS:DX Apuntador a especificación de trayectoria ASCII
Devuelve
Bandera de acarreo en cero si hubo éxito
Bandera de acarreo en uno si hubo error
Int 21/3A
AX 03H trayectoria no encontrada
05H acceso negado
06H directorio actual
10H directorio actual
Descripción
Permite el borrado de un directorio especificado, pero solo
si existe, está vacío y no es el directorio por omisión.
Realiza
ESTABLECER DIRECTORIO
Llamada
AH 3BH
DS:DX Apuntador a cadena de trayectoria ASCII
Int 21/3B
Devuelve
Bandera de acarreo en cero si hubo éxito
Bandera de acarreo en uno si hubo error
AX 03H trayectoria no encontrada
Descripción
Le permite cambiar el directorio actual (similar a la orden
CD)
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
70
Realiza
BORRAR ARCHIVO
Llamada
AH 41H
DS:DX apuntador a especificación de archivo ASCII
Devuelve
Bandera de acarreo en cero si hubo éxito
Bandera de acarreo en uno si hubo error
AX 02H archivo no encontrado
Int 21/41
05H acceso negado
Descripción
Borra un archivo marcando la entrada de directorio con un
E5H en el primer byte del nombre del archivo. Solo ese byte
se modifica en la entrada del directorio. Los grupos
asignados al archivo son devueltos al sistema para un
nuevo uso. No se permiten caracteres comodín en el
nombre del archivo.
Realiza
Llamada
RENOMBRAR ARCHIVO
AH 56H
DS:DX apuntador a nombre ASCII de archivo actual
ES:DI apuntador a nuevo nombre ASCII de archivo
Devuelve
Bandera de acarreo en cero si hubo éxito
Bandera de acarreo en uno si hubo error
AX 02H archivo no encontrado
Int 21/56
03H trayectoria no encontrada
05H acceso negado
11H no es el mismo dispositivo
Descripción
Permite
renombrar
archivos
incluso
en
directorios
diferentes. En esta función no es válido usar caracteres
comodín, pero sí es posible especificar nombres de
trayectorias completas. No renombre archivos abiertos pues
esto puede traer resultados impredecibles.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
71
Realiza
CREAR ARCHIVO
Llamada
AH 5BH
CX atributo
DS:DX apuntador a especificación de archivo ASCII
Devuelve
Bandera de acarreo en cero si hubo éxito
AX Control
Bandera de acarreo en uno si hubo error
AX 03H trayectoria no encontrada
Int 21/5B
04H no hay controles disponibles
05H acceso negado
50H archivo ya existe
Descripción
Esta función que consitutye el método normal para crear un
archivo, devuelve un control de archivo para un acceso
posterior. El archivo se crea como un archivo normal con
acceso de lectura/escritura. No se pueden crear etiquetas
de volumen ni subdirectorios.
Lenguaje Ensamblador
Ing. Claudia Yadira Luna Carrasco
CONJUNTO DE CARACTERES ASCII EN HEXADECIMAL
72
Descargar