Você está na página 1de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN

Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

MANUAL DE PRCTICAS DE LENGUAJE ENSAMBLADOR


OBJETIVO GENER AL:
Que el alumno, al trmino de todas las actividades sea capaz de utilizar el Manual de prcticas para la
Materia de Lenguaje de Interfaz que permita fortalecer los conocimientos sobre este lenguaje de programacin, los
cuales sern presentados de menor a mayor grado de dificultad, con la finalidad de crearle un mayor inters y permita
aprender el correcto uso de cada una de las instrucciones de que est compuesto, corroborar la sintaxis y utilidad al
ejecutar las prcticas propuestas. Esperando que el alumno sea capaz de experimentar con nuevas rutinas que le
permitir solucionar de una forma ms fcil los retos que se le presenten en el control de lel ordenador y los
perifricos estandarizados o no.
SIGNIFIC ADOS:
Lenguaje Ensamblador:
Es un lenguaje simblico que permite programacin a bajo nivel, lo cual proporciona control total del
hardware y software de un sistema de cmputo atreves de un conjunto de mnemnicos.
Un ensamblador es una aplicacin de sistema que se encarga de traducir un archivo fuente escrito con
mnemnicos, a un archivo objeto que contiene cdigo mquina, ejecutable directamente por la mquina para la que se
ha generado.
Tipos de ensambladores:
Ensambladores bsicos. Son de muy bajo nivel y su tarea consiste bsicamente en ofrecer
nombres simblicos a las distintas instrucciones (mnemnicos) de la mquina apropiada, adems de
ofrecer un formato de escritura cmodo para expresar los parmetros y cosas tales como los modos de
direccionamiento. Adems, reconoce una serie de directivas (o meta instrucciones) que indican ciertos
parmetros de funcionamiento del ensamblador.
Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores
bsicos, fueron muy populares en las dcadas de los 50 y los 60, antes de la generalizacin de los
lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador y adems proporcionan una
serie de directivas para definir e invocar macro instruccines (o simplemente, macros). Cuando
invocamos a una macro, sta se expande al cuerpo que haigamos definido.
Ensambladores modulares 32-bits. Pueden ser de alto y bajo nivel, pero solo emulado en 32bits. Microsoft an esta reproduciendo el Microsoft Macro Assembler, es reproducido por un paquete
preparado. El ml 6.14 emula poderosos compilados en 32-bits, su sintaxis es mezcla de: C API,
ensamblador, y macros. HLA High-Level Assembler, es un lenguaje poderoso que soporta de bajo y altonivel pero solo en 32-bits. High-Level Assembler traducido a "Ensamblador de Nivel-Alto. Tiene un libro
popular llamado "AOA" Art of Assembly Language traducido a "Arte del Lenguaje Ensamblador".
Tambien tiene fama de usar macros como los de masm.
PRCTICA No. 1
NOMBRE: Introduccin
OBJETIVO:
- Que el alumno ubique los elementos y dispositivos que se encuentran dentro de un gabinete.
INTRODUCCIN:
Los elementos que podemos encontrar dentro de un gabinete son los siguientes:
Fuente de poder
AT, ATX; con voltajes de 6, 12 y 3.3.
Unidades de disco e interfaces
En el mundo del PC hay dos grandes estndares, IDE y SCSI, aunque el primero est mucho ms
extendido que el segundo, la tecnologa SCSI est presente en otras muchas plataformas, como los
Mac , sistemas Unix, AS/400, etc...
Disco fijo, disco removible.
Con conectores ATA,ULTRA ATA, SCSI.

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Tarjeta madre

Modulos de puertos
Los ordenadores personales actuales conservan prcticamente todos los puertos heredados desde
que se dise el primer PC de IBM. Por razones de compatibilidad an se mantienen este tipo de
puertos, pero poco a poco irn apareciendo nuevas mquinas en las que no tengan los tpicos
conectores serie (DB9), paralelo(DB25), teclado(DIN), Video, etc... y en su lugar slo encontraremos
puertos USB, RJ45, RJ11 e Infrarrojo.
Memoria
MemoriaCach
Todas las tarjetas madre Pentium deben tener en ellas un cach de Nivel 2, de 256 a 512 Kb.
Memoria RAM
Todas las tarjetas madre Pentium y Pentium Pro deben emplear ya sea SIMMs (Modulo sencillo de
memoria en lnea) de 72 pins o bien DIMMs(Mdulo Dual de Memoria en lneas) de 168 pins.
Debido al diseo de 64 bits de estas tarjetas, los SIMMs de 72 pins deben instalarse por pares,
mientras que los DIMMs se instalan uno a la ves uno por banco de 64 bits.
Considere con cuidado la cantidad total de memoria que puede manejar la tarjeta. Mientras que se
considera que 16 Mb son apenas el mnimo para las aplicaciones consumidoras de memorias de hoy
en da, en realidad podra requerir mucho ms.
Las tarjetas madre Pentium deben de manejar un mnimo de 128 Mb, y muchas tarjetas Pentium II
actuales manejan mas de 1 Gb. Una tarjeta madre debe contener por lo menos cuatro conectores de
memoria (de 72 o 168 pins, o una combinacin) y entre ms, mejor.
Para un mximo desempeo, busque sistemas que manejen SIMMs/DIMMs de tipo SDRAM (DRAM
Sincrona) o EDO (salida de Datos Ampliada). Los SIMMs debern tener una velocidad de 70 ns o
ms.
Lo ideal en los sistemas de misin crtica es que usen SIMMs de paridad y asegurarse de que la
tarjeta madre maneje por completo la verificacin de paridad o incluso tambin el ECC Cdigo de
correccin de errores.
DDR (Double Data Rate) significa doble tasa de transferencia de datos en espaol. Son mdulos de
memoria RAM compuestos por memorias sncronas (SDRAM), disponibles en encapsulado DIMM,
que permite la transferencia de datos por dos canales distintos simultneamente en un mismo ciclo de
reloj. Los mdulos DDR soportan una capacidad mxima de 1 GiB.
DDR3 es un tipo de memoria RAM. Forma parte de la familia SDRAM de tecnologas de memoria de
acceso aleatorio, que es una de las muchas implementaciones de la DRAM.
El principal beneficio de instalar DDR3 es la habilidad de hacer transferencias de datos ocho veces
mas rpido, entonces permitiendo velocidades pico de transferencia y velocidades de bus ms altas
que las versiones DDR anteriores. Sin embargo, no hay una reduccin en la latencia, la cual es
proporcionalmente ms alta. Adems la DDR3 permite usar integrados de 512 megabits a 8 gigabytes,
siendo posible fabricar mdulos de hasta 16 Gb.

Ing. J. D. Aurelio Rico Daz

Pgina 2

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Pila
Su funcin es la de proporcionar la energia para mantener los datos de configuracin del equipo.
Bios
AMI,Award, Phoenix, Equipo original.
Ranuras de expansin
EISA, MCA, ISA, PCI, AGP.
Procesadores:
Intel Atom Processor Z5xx Series
Intel Core 2 Duo Processors for Embedded Computing
Intel Core Duo Processors
Quad-Core Intel Xeon processor 5400 series
Quad-Core Intel Xeon Processor 5300 Series
Dual-Core Intel Xeon Processor 5200 Series
Dual-Core Intel Xeon Processor 5100 Series
Dual-Core Intel Xeon Processors LV and ULV
Intel Xeon Processors
Intel Pentium Dual-Core Processor
Intel Celeron Processor 440
Intel Pentium M Processors
Intel Pentium 4 Processors
Intel Pentium III Processors
Intel Celeron M Processors
Intel Celeron Processors
Intel Pentium Processors with MMXTechnology
La arquitectura de Intel IA-32 ofrece ocho registros de fines generales, cada uno de ellos es un registro de 32 bits. La
arquitectura de Intel EM64T ampla cada uno de esos registros a 64-bit, que entonces se refieren como RAX, RBX,
RCX, RDX, RSP, RBP, RSI, y RDI. Tambin agrega ocho nuevos registros, nombrados R9 con R15. Cada uno de los
registros es direccionable como un registro 64-bit, un registro de 32 bits, un registro de 16 bits y registro de 8 bits. Por
ejemplo, R11 es la versin 64-bit, R11d es el de 32 bits ms bajo del mismo registro, R11w es los 16 pedacitos ms
bajos del registro y R11l es el octeto ms bajo. Los registros ESPECIALMENTE, el EBP, ESI y el IED, que no son
direccionables de 8 bits en IA-32, son direccionables de 8 bits en EM64T. Por ejemplo, el SL es los 8 pedacitos ms
bajos de ESI. Los registros de 8 bits AH, BH, el CH y el ADO estn disponibles en EM64T. No pueden ser utilizados
en las mismas instrucciones con los nuevos registros de 8 bits.
AMD Athlon
AMD Opteron
AMD Turion
AMD Phenomn
SPARC64 VII CON 8 hilos de ejecucin
UltraSPARC T1 32 hilos de ejecucin
SPARC (del ingls Scalable Processor ARChitecture) es una arquitectura RISC big-endian. Es decir, una arquitectura
con un conjunto reducido de instrucciones.
Una de las ideas innovadoras de esta arquitectura es la ventana de registros que permite hacer fcilmente
compiladores de alto rendimiento y una significativa reduccin de memoria en las instrucciones load/store en relacin
con otras arquitecturas RISC. Las ventajas se aprecian sobre todo en programas grandes.

Procesador
INTELPentium, SUN Sparc, APPLE POwerPC, IBM Power, ZILOG Z80, MOTOROLA
M68000, MPC7455, AMD Advanced Micro Devices Duron.
Tamao de registro 8, 16, 32 y 64 biits
Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
1.1 Introduccin

PRCTICA No. 2
NOMBRE: Importancia del lenguaje
OBJETIVO:
- Que el alumno valorare la importancia de conocer este lenguaje, al conocer sus aplicaciones y el uso en
diferentes plataformas de hardware y software.
INTRODUCCIN:
Este lenguaje da la facilidad y las herramientas necesarias para tomar el control de todo lo que la PC puede
realizar fsicamente. Como resultado de operaciones muy bsicas suministradas por el ensamblador que realiza
tareas simples de transferencia de datos y operaciones lgicas, una pgina de cdigos en lenguaje ensamblador
palidece en comparacin con una pgina de cdigo en lenguaje de alto nivel.
Ventajas:
Velocidad, control de hardware y sofware, todos los procesadores aceptan una variante de
ensamblador como su forma de programacin.
Desventajas:
Dependiente de la plataforma en donde se desarroll, mayor costo en su ciclo de vida, peligro de
afectar recursos inesperadamente.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.2 Importancia del Lenguaje Ensamblador
PRCTICA No. 3
NOMBRE: Historia de los procesadores
OBJETIVO:
- Que el alumno identifique mediante imgenes y fsicamente las marcas y modelos de procesadores.
Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

INTRODUCCIN:
Un microprocesador es un circuito integrado construido en un pedazo diminuto de silicio . Contiene miles, o
incluso millones, de transistores que se interconectan va los rastros extrafinos de aluminio. La funcin de los
transistores es guardar y manipular datos juntos para que el microporcesador pueda realizar una gran variedad de
funciones.
Calsificacin deacuerdo a su marca:
Intel
8008,8088,80286,80386,Pentium.
AMD
K5, K6, Duron, Athlon.
Cyrix
MI, MII.
Motorola
M68000, MPC7455.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.3 Historia de los procesadores

PRCTICA No. 5
NOMBRE: Diagrama de componentes internos
OBJETIVO:
- Que el alumno evalue los componentes
internos de que constan los
procesadores con diferente arquitectura.
INTRODUCCIN:
Componentes del microprocesador
Reloj

Unidad
Aritmtica
Lgica

Unidad de
Control

Bus de Direcciones

ROM

RAM

Puertos

Bus de Datos
Registros

Unidad de ejecucin
Bus de Control

UNIDAD DE EJECUCIN Una vez que la unidad de decodificacin sabe cul es el significado de la instruccin leda
de memoria, se lo comunica a la unidad de ejecucin. Esta unidad ser la encargada de consumar la ejecucin y para
ello activar las seales necesarias y en un orden determinado. Es decir, es la encargada de dar las rdenes
necesarias a las diversas partes del microprocesador para poder ejecutar cada una de las instruccines.
UNIDAD ARITMETICO LOGICA (ALU) La ALU Aritmethic Logic Unit es el bloque funcional del microprocesador
encargado de realizar todas aquellas operaciones matemticas (suma, resta, multiplicacin y division). Las
operaciones que realiza son las siguientes: suma, resta, multiplicacin, divisin y aquellas que trabajan con dgitos
binarios (10 que se conoce como operaciones lgicas: AND, NOR, NOT, NAND, OR, X-OR, etc). En suma, saber
cmo funciona un microprocesador, implica conocer cmo se van ejecutando cada una de las instruccines del
programa que se almacena en memoria. Los pasos globales que se siguen a la hora de consumar una instruccin
son:
UNIDAD DE DECODIFICACION Se encarga de decodificar la instruccin que se va a ejecutar. Es decir, saber qu
instruccin es. Cuando el microprocesador lee de memoria una instruccin, el cdigo de esa instruccin le llega a esta
unidad. Esta unidad se encarga de interpretar ese cdigo para averiguar el tipo de instruccin a realizar. Por ejemplo,
instruccines de suma, multiplicacin, almacenamiento de datos en memoria,etc.
Bsqueda
de la intruccin

Decodificacin
de la intruccin

Bsqueda
de operandos

Almacenamiento
del resultado

Ejecucin
de la intruccin

UNIDAD DE CONTROL
Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Es el centro nervioso del ordenador, ya que desde ella se controlan y gobiernan todas las operaciones. Cmo
funciones bsicas tiene:
tomar las instruccines de memoria decodificar o interpretar las instruccines ejecutar las instruccines ( tratar las
situaciones de tipo interno (inherentes a la propia CPU) y de tipo externo (inherentes a los perifricos). Para realizar su
funcin, la unidad de control consta de los siguientes elementos:
RELOJ

PROGRAMA FUENTE
SECUENCIADOR
DECODIFICADOR

MICROORDENES

REGISTRO DE
INTRUCCIONES

BUS INTERNO

Registro contador de programa Contiene permanentemente la direccin de memoria de la siguiente instruccin a


ejecutar. Al iniciar la ejecucin de un programa toma la direccin de su primera instruccin. Incrementa su valor en
uno, de forma automtica, cada vez que se concluye una instruccin, salvo si la instruccin que se est ejecutando es
de salto o de ruptura de secuencia, en cuyo caso el contador de programa tomar la direccin de la instruccin que se
tenga que ejecutar a continuacin; esta direccin est en la propia instruccin en curso.
Registro de instruccin Contiene la instruccin que se est ejecutando en cada momento. Esta instruccin llevar
consigo el cdigo de operacin (un cdigo que indica qu tipo de operacin se va a realizar, por ejemplo una suma) y
en su caso los operandos (datos sobre los que acta la instruccin, por ejemplo los nmeros a sumar) o las
direccines de memoria de estos operandos.
Decodificador Se encarga de extraer el cdigo de operacin de la instruccin en curso (que est en el
registro de instruccin), lo analiza y emite las seales necesarias al resto de elementos para su ejecucin
a travs del secuenciador .
ACUMULADOR
Reloj Proporciona una sucesin de impulsos elctricos o ciclos a intervalos
constantes (frecuencia constante), que marcan los instantes en que han de
comenzar los pasos de que consta cada instruccin.
Secuenciador En este dispositivo se generan rdenes
BANDERAS
CIRCUITO
muy elementales (micrordenes) que, sincronizadas por
OPERACIONAL
los impulsos de reloj, hacen que se vaya ejecutando poco
MICROINSTRUCCIONES
a poco la instruccin que est cargada en el registro d e
instruccin.
REGISTROS DE ENTRADA

UNIDAD ARITMTICO-LGICA (ALU)


Esta unidad se encarga de realizar las operaciones elementales de tipo
aritmtico (sumas, restas, productos,
divisiones) y de tipo lgico
(comparaciones). A travs de un bus interno se comunica con la unidad de
control la cual le envia los datos y le indica la operacin a realizar .
La ALU est formada a su vez por los siguientes
elementos:
Circuito operacional Contiene los circuitos necesarios para la realizacin de las operaciones con los datos
procedentes de los registros de entrada (REN). Este circuito tiene unas entradas de rdenes para seleccionar la clase
de operacin que debe realizar en cada momento (suma, resta, etc).
Registros de entrada (REN) En ellos se almacenan los datos u operandos que intervienen en una instruccin antes
de la realizacin de la operacin por parte del circuito operacional. Tambin se emplean para el almacenamiento de
resultados intermedios o finales de las operaciones respectivas.
Registro acumulador Almacena los resultados de las operaciones llevadas a cabo por el circuito operacional. Est
conectado con los registros de entrada para realimentacin en el caso de operaciones encadenadas. Asimismo tiene
una conexin directa al bus de datos para el envo de los resultados a la memoria central o a la unidad de control.
Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Registro de estado (flags) Se trata de unos registros de memoria en los que se deja constancia algunas condiciones
que se dieron en la ltima operacin realizada y que habrn de ser tenidas en cuenta en operaciones posteriores. Por
ejemplo, en el caso de hacer una resta, tiene que quedar constancia si el resultado fue cero, positivo o negativo.
Se conoce como set de instruccines al conjunto de instruccines que es capaz de entender y ejecutar un
microprocesador.
En funcin del tipo de microprocesador, concretamente si es ms avanzado o no, podr entender y ejecutar ms o
menos instruccines.
Las instruccines se clasifican segn su funcin en:
a).- Transferencia de datos.
b).- Clculo.
c).- Transferencia del control del programa.
d).- Control.
a).- Instruccines de transferencia de datos Estas instruccines mueven datos (que se consideran elementos de
entrada/salida) desde la memoria hacia los registros internos del microprocesador, y viceversa. Tambin se usan para
pasar datos de un registro a otro del microprocesador. Existen algunas instruccines que permiten mover no slo un
dato, sino un conjunto de hasta 64 KBytes con una sola instruccin.
b).- Instruccines de clculo Son instruccines destinadas a ejecutar ciertas operaciones aritmticas, como por
ejemplo sumar, restar, multiplicar o dividir, o ciertas operaciones lgicas, como por ejemplo ANO, OR, as como
desplazamiento y rotacin de bits.
c)._ Instruccines de transferencia del control del programa Permiten romper la secuencia lneal del programa y
saltar a otro punto del mismo. Pueden equivaler a la instruccin GOTO que traen muchos lenguajes de programacin.
d).- Instruccines de control Son instruccines especiales o de control que actan sobre el propio microprocesador.
Permiten acceder a diversas funciones, como por ejemplo activar o desactivar las interrupciones, pasar rdenes al
coprocesador matemtico, detener la actividad del microprocesador hasta que se produzca una interrupcin, etc.
Prcticamente todas las instruccines estn formadas por dos elementos:
cdigo de operacin que indica el tipo de operacin se va a realizar operandos, que son los datos
sobre los que acta.
Por ejemplo, una instruccin que sume dos nmeros est formado por:
cdigo de operacin que indique "sumar"; primer nmero a sumar y segundo nmero a sumar.
Existen instruccines que slo tienen un operando o incluso que no tienen ninguno, estando formadas solamente por
el cdigo de operacin.
EJECUCIN DE LAS INSTRUCCINES
Para que un programa pueda ser ejecutado por un ordenador, ha de estar almacenado en la memoria central
(memoria RAM). El microprocesador tomar una a una las instruccines que lo componen e ir realizando las tareas
correspondientes.

CISC: Complex Instructions Set Computer, Ordenador con un conjunto de


instruccines complejo.
RISC: Reduced Instructions Set Computer, Ordenador con un conjunto de
instruccines reducido.
Anteriormente hemos definido el set de instruccines como el conjunto de
instruccines que es capaz de entender y ejecutar un microprocesador. Si ese
microprocesador entiende y ejecuta muchas instruccines (cientos de ellas), se
trata entonces de un microprocesador CISC. En cambio, si el microprocesador
entiende y ejecuta muy pocas instruccines (decenas de ellas), se trata entonces
de un microprocesador RISC.

MEMORIA

Se denomina ciclo de instruccin al conjunto de acciones que se llevan a cabo en la realizacin de


una instruccin. Se compone de dos fases: Fase de bsqueda y Fase de ejecucin .
Fase de bsqueda
En esta fase se transfiere la
instruccin que se va a ejecutar desde la memoria central
Instruccin 1
a la unidad de control.
Instruccin 2
Fase de ejecucin Consiste en la realizacin de todas las
acciones que conlleva la propia instruccin.
BUSES
Instruccin 3
Una forma de clasificar los microprocesadores es en
C
P
U
funcin de las instruccines que son capaces de ejecutar.
Podemos encontrar dos tipos: microprocesadores: Con
tecnologa CISC y RISC.
Instruccin n

Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

En principio, parece que la tecnologa CISC es mucho ms ventajosa que la RISC. Pero no es as: un micro CISC
tarda mucho tiempo en ejecutar cada una de esas instruccines. En cambio un micro RISC, como solo entiende unas
cuantas, su diseo interno le permite ejecutarlas en muy poco tiempo, a una gran velocidad, mucho ms rpido que un
microprocesador CISC.
Cuando se desee que un microprocesador RISC ejecute cierta instruccin que no entiende, sta se descompondr en
varias instruccines de las sencillas que s entiende. An as, descomponiendo una instruccin compleja en varias
sencillas, es capaz de operar mucho ms rpido que el microprocesador CISC, el cual no tiene que descomponer esa
instruccin porque la entiende directamente.
Prcticamente, todos los microprocesadores que se utilizan en la fabricacin de ordenadores personales
(microprocesadores fabricados por Intel) son de tecnologa CISC. Intel, poco a poco, va abandonando la tecnologa
CISC y la sustituye por tecnologa RISC. As por ejemplo, un Pentium, sin dejar de pertenecer a la categoria CISC
incorpora algunas caracteristicas de los micros RISC. Es de esperar que en un futuro, los micros fabricados sean de
tecnologa RISC; entonces los ordenadores sern muchsimo ms rpidos de lo que hoy los conocemos.
Intel no fabrica microprocesadores completamente RISC para no perder la compatibilidad con los microprocesadores
anteriores.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.5 Diagramas de componentes internos
PRCTICA No. 6
NOMBRE: Descripcin de componentes
OBJETIVO:
- Que el alumno ejecute un programa observando los contenidos de los registros.
INTRODUCCIN:
Los registros internos del microprocesador
Registros de datos:
AX = Acumulador. Es el registro principal utilizado en las instrucciones aritmticas.
BX = Utilizado como base. Lo utilizaremos para indicar el desplazamiento u offset.
CX = Se utiliza como contador en los bucles y operaciones repetitivas.
DX = Utilizado tambin para operaciones aritmticas.
Estos registros son de 2 bytes y podemos referirnos a su parte baja y alta:
AX -> AH y AL
BX -> BH y BL
CX -> CH y CL
DX -> DH y DL
Registros de segmentos:
CS = Registro de segmento de cdigo. Contiene la direccin del segmento de cdigo, lo que son las
instruccines del programa.
DS = Registro de segmento de datos. Contiene la direccin del segmento de datos, es decir, el rea de
memoria donde se encuentran los
datos del programa.
SS = Registro de segmento de pila. Contiene la direccin del segmento de pila.
ES = Registro de segmento extra. El segmento extra es un segmento adicional que se utiliza para superar la
limitacin de los 64 Kb del
segmento de datos y para hacr la transferencia de datos entre segmentos.
Registros punteros de pila:
SP = Puntero de pila. Contiene la direccin relativa del segmento de pila.
BP = Puntero base. Utilizado para fijar el puntero de la pila y poder acceder a los elementos de esta.
Registros ndices:
SI = ndice fuente (Source Index)
DI = ndice destino (Destination Index)
Registro puntero de instruccines:
IP = Puntero de instruccin (Instruction Pointer)
Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

* Todos los registros anteriormente mencionados son de una longitud de 16Bits. Los de 32Bits se les antepone la letra
E de extendidos (EAX, EBX,EIP,...); para los procesadores 80386 y posteriores , hasta antes de los de 64 bits, que
manejan registros RAX,RBX,.. R0,R1,...
Registro de banderas:
Se usa para registrar la informacin de estado y de control de las operaciones del microprocesador.
Hay 9 banderas:
* Banderas de estado: Registran el estado del procesador, normalmente asociado a una comparacin
o una instruccin aritmtica.
CF = Bandera de acarreo. Indica acarreo en las instruccines aritmticas (Carry Flag)
OF = Bandera de desbordamiento aritmtico (Overflow Flag)
ZF = Bandera de resultado cero o comparacin igual (Zero Flag)
SF = Bandera de resultado o comparacin negativa (Sign Flag)
PF = Bandera de paridad (Parity Flag)
AF = Bandera auxiliar. Indica si hay necesidad de ajuste en las operaciones aritmticas con
nmeros BCD (Auxiliar Flag)
* Banderas de control: Registran el funcionamiento del procesador:
DF = Bandera de direccin. Controla la direccin (hacia adelante o hacia atrs)
en las operaciones con cadenas de caracteres incrementando o decrementando automticamente
los registros ndices (SI y DI) (Direction Flag)
IF = Bandera de interrupciones. Indica si estn permitidas o no las interrupciones de los
dispositivos externos (Interrupt Flag)
TF = Bandera de traza. Controla la operacin modo paso a paso (Trap Flag)
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.5.1 Descripcin de componentes

PRCTICA No. 7
NOMBRE: Funcionamiento interno
OBJETIVO:
- Que el alumno observe los contenidos de los registros e introduzca un programa directamente en la memoria y lo
ejecute.
INTRODUCCIN:
Cualquier versin del sistema operativo DOS o W indows, tiene disponible un comando externo llamado
DEBUG.EXE, localizado en W INDOW S\SYSTEM32 y podra ser usado dando doble clic sobre el o dentro de una
ventana del Smbolo del Sistema, el cual es otro archivo del sistema llamado CMD.EXE.
Aunque Debug es una herramienta antigua es una buena forma de comenzar a familiarizarnos con el
ensamblador. Debug viene con el sistema operativo, es muy til y fcil de usar aunque tambin muy limitada, pero
muy prctica y no es sensible al context (No hace diferencia entre MAYSCULAS y minsculas) y todos los nmeros
usados se consideran hexadecimales.
Una vez ejecutado el comando DEBUG, podras utilizar las siguientes opciones:
r
Visualizar el contenido de los registros
r(Registro)
Visualiza y permite modificarlo
q
Salir
g
Ejecutar lo anteriormente escrito
a
Agregar cdigo o Ensamblar
a(Direccin) Agregar a partir de Direccin
Ejecutar el DEBUG dentro de una ventana del Smbolo del Sistema para alterar el contenido del Registro AX

Pgina

de 74

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Para alterar el modo de video teclear lo siguiente, sin los comentarios que describen su funcionamiento.
D:\Tasm>debug

-A100
MOV AH,0
MOV AL,0F
INT 10
INT 20

Ensamblar a partir de la posicin 100 de memoria


Funcin 0 Iniciar modo de video
Seleccionamos el modo de video 640 X 350 grficos o 0D
Ejecutar interrupcin 10 hex
Termina programa y retornar

-G

Ejecutar

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
1.5.2 Funcionamiento interno

PRCTICA No. 8
NOMBRE: Manejo de memoria
OBJETIVO:
- Que el alumno haga uso de diferentes tamaos de memoria en un programa.
INTRODUCCIN:
Memoria PRINCIPAL
La memoria es una coleccin
Memoria CACHE
de posiciones o celdas contiguas de
una longitud de un byte cada una de
CPU
ellas, totalmente direccinables.
Considerando la forma en que
es accesada, se puede clasificar como
RAM
(Random
Acces
Memory
Memoria de Acceso Aleatorio ) y SAM
(Secuencial Acces Memory Memoria
de Acceso Secuencial ) y tomando
encuenta los permisos de lectura y
escritura en ROM (Read Only Memory Memoria de Solo Lectura) y RWM (Read W rite
Memory Memoria de Lectura/Escritura). Los EEPROM (Electric Erased Programmer
Read Only Memory Memoria de Solo Lectura Programable Borrable Elctricamente ).
Algunos de estos trminos son usados tanto en medios electrnicos (Circuitos
Integrados), como en medios magnticos o magntico-pticos (Disco o Cinta).
La memoria virtual es una combinacin de memoria primaria y secundaria; administrada por un sistema
operativo, los cuales pueden trabajar en modo Real o Protegido. Este ltimo es posible usarlo en Ordenador
personales, desde que apareci el procesador 286. En modo real es posible leer y escribir en cualquier parte de la
memoria principal y en modo protegido cada programa; entre ellos el sistema operativo usan reas de memoria
independientes para trabajar; con la finalidad de no interferirse entre ellos al momento de leer o escribir en memoria.
Programacin con segmentos:
Pgina

de 74

10

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Al crear un program a con segm entos, cada uno de ellos pude ser de hasta 64 Kb , haciendo uso de
registros de 16 bits (IP,SS...) y en los de propsito general (AX...), pudiendo usar las m itades (AH...). Este tipo de
program acin es aceptada desde los proces adores 8008, hasta los actuales pentium .
Pila SEGMENT PARA ST ACK SSTTAAC
CKK
Datos SEGMENT PARA ddaattooss
Codigo SEGMENT PARA ccooddggoo
Programacin con seccio nes:
Al crear un program a con secciones lgicas es pos ible referenciar por program a hasta 4Gb, haciendo
uso de registros de 32 bits (EIP...) y los de props ito general (EAX...). el inicio de cada seccin determ ina el fin de la
anterior. Existen dos seccines principales, la .CODE y .DAT A; esta ltim a puede ser dividida en dos categoras.
.386
; Procesador 80386 con registros de 32 bits.
.286
; Procesador 80286 con registros de 16 bits.
.MODELL SMALL
; Modos para la compilacin TINY,SMALL,MEDIUM,COMPACT o LARGE
.DAT A
; Esta seccin contiene la informacin inicializada.
.DAT A?
; Esta seccin contiene la informacin no inicializada.
.CONST
; Esta seccin contiene declaraciones de constantes.
.CODE
; Esta seccin contiene las instrucciones del programa.
.ST ACK 64
; Esta seccin contiene el espacio para la pila; por defautl es 64.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.6 Manejo de memoria

PRCTICA No. 9
NOMBRE: Direccinamiento de datos implcito
OBJETIVO:
Que el alumno:
Sea capaz de efectuar y entender el funcionamiento del direccinamiento implcito.
Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar, ligar y
ejecutar los programas que se presentan en el manual.
INTRODUCCIN:
Son todas las intrucciones que no llevan parmetros, que no accesan memoria, o bien que tienen una forma
especfica de accesarla.
Ejemplos: CLI, PUSHF, POPF, NOP
En este modo se especifican los operandos en forma implcita en la definicin de la instruccin. Por ejemplo,
la instruccin "complementar acumulador" es la instruccin de modo implcito porque el operando en el
registro de acumulador esta implcito en la definicin de la instruccin. De hecho todas las instruccines de
referencia a registro que utilizan un acumulador son instruccines de modo implcito.
Las instruccines de direccin cero en un ordenador organizado con pila son instruccines de modo implcito
porque esta implcito que los operandos estan en la parte superior de la pila.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.1 Implcito

;PR1_7_1.ASM
;Direccinamiento implcito
;El operando sin operadores
Pila
SEGMENT
PARA STACK
DB
64 DUP(0)
Pila
ENDS

STACK

Pgina

de 74

11

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

SEGMENT
PARA Codigo
Implcito
PROC FAR
ASSUME CS:Codigo,SS:Pila
PUSHF
POPF
CLI
NOP
RET
Implcito
ENDP
Codigo
ENDS
END Implcito
Codigo

PRCTICA No. 10
NOMBRE: Direccionamiento de datos inmediato
OBJETIVO:
Que el alumno:
Sea capaz de efectuar y entender el funcionamiento del direccinamiento inmediato.
Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Tiene dos operandos: un registro y una constante que se usa por su valor. El valor constante no se tiene que
buscar en memoria, pues ya se obtuvo al hacer el "fetch" de la instruccin. Por tanto, es rpido aunque no tanto como
el modo registro; requiere ir al BIU por el dato. En este modo se especifica el operando en la instruccin misma. En
otras palabras, una instruccin de modo inmediato tiene un campo de operando, en lugar de un campo de direccin.
Un campo de operando contiene el operando real que se va a usar junto con la operacion especificada en la
instruccin. Las instruccines de modo inmediato son utiles para Iniciar registros en un valor constante.
El campo de direccin de una instruccin puede especificar una palabra de memoria o un registro de procesador.
Cuando el campo de direccin especifica un registro de procesador se dice que la instruccin esta en modo de
registro.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.2 Inmediato

;PR1_7_2.ASM
;Direccinamiento inmediato
;El operando fuente es el dato a mover al destino
Pila
SEGMENT
PARA STACK
STACK
DB
64 DUP(0)
Pila
ENDS
Codigo
SEGMENT
PARA Codigo
Inmediato
PROC FAR
ASSUME CS:Codigo,SS:Pila
MOV AH,00
MOV AL,04
MOV AX,0FFFFH
MOV AX,365
MOV AL, -30
MOV BL,35
MOV BH,-37
RET

Pgina

de 74

12

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Codigo

Inmediato
ENDP
ENDS
END Inmediato

.286
.model small
.stack 64
.code
Inmediato:
MOV AH,00
MOV AL,04
MOV AX,0FFFFH
MOV AX,365
MOV AL, -30
MOV BL,35
MOV BH,-37
MOV AX,4C00H
INT 21H
END

Inmediato

PRCTICA No. 11
NOMBRE: Direccionamiento directo
OBJETIVO:
Que el alumno:
Sea capaz de efectuar y entender el funcionamiento del direccinamiento directo.
Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Uno de los operandos involucra una localidad especfica de memoria. El valor constante se tiene que buscar
en memoria, en la localidad especificada. Es ms lento que los anteriores, pero es el ms rpido para ir a memoria,
pues ya "sabe" la localidad, la toma de la instruccin y no la tiene que calcular.
En este modo la direccin efectiva es igual a la parte de direccin de la instruccin. El operando reside en
memoria y su direccin la proporciona en forma directa el campo de direccin de la instruccin. En una instruccin de
tipo brinco el campo de direccin especifica la direccin de transferencia de control del programa real.
Se presenta una prctica sencilla buscando que el alumno d un primer paso hacia el conocimiento del
lenguaje ENSAMBLADOR. Las instruccines en ENSAMBLADOR se basan en nemotcnicos, los cuales permiten
estructurar la lgica que el programador desea implementar.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.3 Directo

;PR1_7_3.ASM
;Direccinamiento directo
;El operando fuente es una Variable que posee el dato a mover
Pila
SEGMENT
PARA STACK
STACK
DB
64 DUP(0)
Pila
ENDS
Datos

SEGMENT
Variable1
DB
Variable2
DB
Variable3
DW

PARA Datos
25
0AFH
0A1FCH
Pgina

de 74

13

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Datos

ENDS

Codigo
Directo

SEGMENT
PARA Codigo
PROC FAR
ASSUME CS:Codigo,DS:Datos,SS:Pila
; SE PREPARA EL REGRESO A DOS
PUSH DS
; Almacena Direccin de Psp
MOV AX,00
PUSH AX
; Almacena Desplazamiento
MOV AX,Datos
; Se Inicializan Apuntadores de Segmentos
MOV DS,AX
; Establece Direccinamiento Normal al rea De Datos
MOV AL,Variable1
MOV BH,Variable2
MOV CX,Variable3
RET
ENDP

Directo
Codigo

ENDS
END

Directo

NOMBRE: Direccinamiento entre registros


OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccinamiento entre registros.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Usa solamente registros como operandos.
Es el ms rpido, pues minimiza los recursos necesarios (toda la informacin fluye dentro del EU del CPU).
En este modo, los operandos estan en registros que residen dentro de la CPU. Se selecciona el registro particular de
un campo de registro en la instruccin. Un campo K bits puede especificar cualquiera de 2k registros.
Se presenta una prctica sencilla buscando que el alumno de un primer paso hacia el conocimiento del
lenguaje ENSAMBLADOR. Las instruccines en ENSAMBLADOR se basan en nemotcnicos, los cuales permiten
estructurar la lgica que el programador desea implementar.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.4 Registro

;PR1_7_4.ASM
;Direccinamiento entre registros
;El operando fuente y destino a mover son registro o mitades respectivamente.
Pila
SEGMENT
PARA STACK
STACK
DB
64 DUP(0)
Pila
ENDS
Codigo
SEGMENT
PARA Codigo
Registro
PROC FAR
ASSUME CS:Codigo,SS:Pila
MOV
AX,DS
MOV
AL,CL
MOV
AX,BX
MOV
DS,AX
MOV ES,DS
Pgina

de 74

14

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Codigo

Registro
ENDS

MOV BL,AL
RET
ENDP
END

Registro

PRCTICA No. 13
NOMBRE: Direccinamiento registro indirecto
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccinamiento indirecto de registros.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
En este modo la instruccin especifica un registro en la CPU cuyo contenido proporciona la direccin del
operando en la memoria. En otras palabras, el registro seleccionado contiene la direccin del operando en lugar del
operando mismo. Antes de utilizar una instruccin de modo indirecto por registro, el programador debe asegurarse de
que la direccin de memoria del operando esta colocada en el registro del procesador con una instruccin previa.
Entonces una referencia al registro es equivalente a especificar una direccin de memoria. La ventaja de una
instruccin de modo de registro indirecto es que el campo de direccin de la instruccin utiliza menos bits para
seleccionar un registro de los que necesitaria para especificar una direccin de memoria en forma directa.
Se presenta una prctica sencilla buscando que el alumno de un primer paso hacia el conocimiento del
lenguaje ENSAMBLADOR. Las instruccines en ENSAMBLADOR se basan en nemotcnicos, los cuales permiten
estructurar la lgica que el programador desea implementar.
En este modo, el campo de direccin de la instruccin proporciona la direccin en que se almacena la direccin
efectiva en la memoria. El control recupera la instruccin de la memoria y utiliza su parte de direccin para accesar la
memoria una vez mas con el fin de leer la direccin efectiva.
Unos cuantos modos de direccinamiento requieren que el campo de direccin de la instruccin se sume al contenido
de un registro especifico en la CPU. En estos modos la direccin efectiva se obtiene el calculo siguiente:
Direccin efectiva = Parte de direccin de la instruccin + el contenido de registro de CPU
El registro de CPU utilizado en el calculo puede ser el contador de programa, un registro de ndice o un registro base.
En cualquier caso tenemos un modo de direccinamiento diferente que se utiliza para una aplicacion distinta.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.5 Registro indirecto

;PR1_7_5.ASM
; Direccinamiento indirecto de registros
; El operando fuente SI, DI, DX o BP poseen la direccin para referenciar el dato y debe estar entre corchetes.
Pila
SEGMENT
PARA STACK
STACK
DB
64 DUP(0)
Pila
ENDS
Datos

SEGMENT
Variable3
DW
Datos
ENDS
Codigo

PARA Datos
0A1FCH

SEGMENT
PARA Codigo
RegistroIndirecto
PROC FAR
ASSUME CS:Codigo,DS:Datos,SS:Pila
Pgina

de 74

15

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

PUSH
MOV
PUSH
MOV
MOV
LEA
MOV
MOV
MOV
LEA
MOV
MOV
MOV
RET
RegistroIndirecto
Codigo
ENDS
END

DS
AX,00
AX
AX,Datos
DS,AX
BX, Variable3
AX,[BX]
SI, OFFSET Variable3
AX,[SI]
DI,Variable3
AX,[DI]
BP, OFFEST Variable3
AX,[BP]
ENDP
RegistroIndirecto

PRCTICA No. 14
NOMBRE: Direccinamiento registro relativo
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccinamiento registro relativo.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en el que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
En este modo el contenido del contador de programa se suma a la parte de direccin de la instruccin para
obtener la direccin efectiva. La parte de direccin de la instruccin por lo general es un nmero con signo (en
representacion de complemento a dos) el cual puede ser positivo o negativo. Cuando se suma este nmero al
contenido del contador de programa, el resultado produce una direccin efectiva cuya posicin en la memoria es
relativa a la direccin de la siguiente instruccin. Para hacer mas claro con un ejemplo, consideremos que el contador
de programa contiene el nmero 200 y que la parte de direccin de la instruccin contiene el nmero 11. La
instruccin en la posicin 200 se lee de la memoria durante la fase de recuperacion y el contador de programa se
incrementa en uno a 201. El calculo de direccin efectiva para el modo de direccin relativa es 201 + 11 = 212. Esto
es 11 posiciones de memoria adelante de la direccin de la siguiente instruccin. Con frecuencia se utiliza el
direccinamiento relativo con instruccines de tipo brinco, cuando la direccin del brinco est en el rea que rodea la
palabra de la instruccin misma. Esto da como resultado un campo de direccin ms pequeo en el formato de la
instruccin porque la direccin relativa puede especificarse con una cantidad de bits que se necesitan para
representar la direccin de memoria completa.
Se presenta una prctica sencilla buscando que el alumno d un primer paso hacia el conocimiento del
lenguaje ENSAMBLADOR. Las instruccines en ENSAMBLADOR se basan en nemotcnicos, los cuales permiten
estructurar la lgica que el programador desea implementar.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.6 Registro relativo

;PR1_7_6.ASM
;Direccinamiento registro relativo
Pila
SEGMENT
PARA STACK
DB
64 DUP(0)

STACK
Pgina

de 74

16

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Pila

ENDS

Datos

SEGMENT
Variable1
DB
Datos
ENDS
Codigo

PARA Datos
HOLA ALUMNOS.

( ENSAMBLADOR)

SEGMENT
PARA Codigo
RegistroRelativo
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
MOV AX,00
PUSH AX
MOV AX,Datos
MOV DS,AX
LEA
MOV
MOV
MOV

RET
RegistroRelativo
ENDS
Codigo
END

BX, Variable1
AL, [BX + 3]
AL, 2[BX]
AL, [BX] + 1

;
;
;
;

0000000000000000
AL = A
AL = L
AL = O

ENDP
RegistroRelativo

STRUC - ENDS: permite definir registros al estilo de los lenguajes de alto nivel, para acceder de una manera ms
elegante a los campos de una informacin con cierta estructura. Estos campos pueden componerse de cualquiera de
los tipos de datos simples (DB 8 Bits, DW 16 Bits = 2 Bytes = 1 Palabra, DD 4 Bytes, DQ 4 Palabras) y pueden ser
modificables o no en funcin de si son simples o mltiples, respectivamente:
Sintaxis:
alumno

alumno
ejemplo

STRUC
cont
edadaltura
peso
otros
telefono
ENDE

DB
DB
DB
DB
DD

'0123456789'
75,200
0
10 DUP(0)
?

; modificable
; no modificable
; modificable
; no modificable
; modificable

alumno <'Victoria',,101,,3130661>
MOV AX,OFFSET ejemplo.telefono
LEA BX,ejemplo
MOV CL,[BX].peso
; equivale a [BX+12]

RECORD: similar a STRUC pero operando con campos de bits. Permite definir una estructura determinada de byte
o palabra para operar con comodidad.
Sintaxis:
nombre

RECORD nombre_de_campo:tamao[=valor],...

Donde nombre permitir referenciar la estructura en el futuro, nombre_de_campo identifica los distintos campos,
a los que se asigna un tamao (en bits) y opcionalmente un valor por defecto.
registro

RECORD a:2=3, b:4=5, c:1

La estructura registro totaliza 7 bits, por lo que ocupa un byte. Est dividida en tres campos que ocupan los 7
bits menos significativos del byte: el campo A ocupa los bits 6 y 5, el B los bits del byte: el campo A ocupa los bi1 al 4
y el C el bit 0:
65 4321 0
Pgina

de 74

17

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

11 0101 ?
La reserva de memoria se realiza, por ejemplo, de la siguiente manera:
reg1
registro <2,,1>
Quedando reg1 con el valor binario 1001011 (el campo B permanece inalterado y el A y C toman los valores
indicados). Ejemplos de operaciones soportadas:
MOV
MOV
MOV

AL, B
AL, MASK A
AL, W IDTH A

; AL = 5 (desplazamiento del bit menos significativo de A)


; AL = 01100000b (mscara de A)
; AL = 2 (anchura de A)

PRCTICA No. 15
NOMBRE: Direccinamiento registro base indexado
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccinamiento base indexado.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
En este modo el contenido de un registro ndice se suma a la parte de direccin de la instruccin para obtener
la direccin efectiva. El registro ndice es un registro de CPU especial que contiene un valor ndice. Un campo de
direccin de la instruccin define la direccin inicial del arreglo de datos en la memoria. Cada operando del arreglo se
almacena en la memoria en relacion con la direccin inicial. La distancia entre la direccin inicial y la direccin del
operando es el valor del ndice almacenado en el registro de ndice. Cualquier operando en el arreglo puede
accesarse con la misma instruccin siempre y cuando el registro ndice contenga el valor de ndice correcto. El
registro ndice puede incrementarse para facilitar el acceso a operandos consecutivos.
Algunos ordenadores dedican un registro de CPU para que funcione exclusivamente como un registro ndice. De
manera implcita este registro participa cuando se utiliza una instruccin de modo ndice. En los ordenadores con
muchos registros de procesador, cualquiera de los registros de la CPU pueden contener el nmero de ndice. En tal
caso, el registro debe estar especificado en forma explicita en un campo de registro dentro del formato de instruccin.
En este modo, el contenido de un registro base se suma a la parte de direccin de la instruccin para obtener
la direccin efectiva. Esto es similar al modo de direccinamiento indexado, excepto en que el registro se denomina
ahora registro base, en lugar de registro de ndice. La diferencia entre los dos modos esta en la manera que se usan
mas que en la manera en que se calculan. Se considera que un registro ndice contiene un nmero de ndice que se
relaciona con la parte de direccin de la instruccin. Se considera que un registro base contiene una direccin base y
que el campo de direccin de la instruccin proporciona un desplazamiento en relacion con esta direccin base. El
modo de direccinamiento de registro base se utiliza en los ordenadores para facilitar la localizacion de los programas
en memoria. Cuando se mueven datos y programas de un segmento de memoria a otro, como se requiere en los
sistemas de multiprogramacin, los valores de direccin de las instruccines deben reflejar este cambio de posicin.
Con un registro base los valores de desplazamiento de las instruccines no tienen que cambiar. Solo el valor del
registro base requiere una actualizacion para reflejar el comienzo de un nuevo segmento de memoria.
Se presenta una prctica sencilla buscando que el alumno de un primer paso hacia el conocimiento del
lenguaje ENSAMBLADOR. Las instruccines en ENSAMBLADOR se basan en nemotcnicos, los cuales permiten
estructurar la lgica que el programador desea implementar.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
1.7 Direccinamiento de los datos
1.7.7 Registro base indexado
;PR1_7_7.ASM
;Direccinamiento registro base indexado
Pila
SEGMENT PARA STACK 'STACK'

Pgina

de 74

18

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

DB
Pila

64 DUP(0)

ENDS

Datos SEGMENT PARA 'Datos'


Variable1
DB
Lista
DW
Datos ENDS

5,4,3,2,1 DUP (5,6,7,8,9 DUP (5,4,3,2,1))


10,20,30,40,50,60,70,80,90,100

Codigo SEGMENT PARA 'Codigo'


RegistroBaseIndexado
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
MOV AX,00
PUSH AX
MOV AX,Datos
MOV DS,AX
MOV
MOV
MOV
MOV

AX,00
BX,8
DI,2
AL,Variable1[BX][DI] ; AL = 3

MOV
MOV
MOV

BX,2
SI,14
AX,Lista[BX][SI]

; AX = 90

AX = 05A

RET
RegistroBaseIndexado
ENDP
Codigo
ENDS
END RegistroBaseIndexado

PRCTICA No. 16
NOMBRE: Formato de un programa
OBJETIVO:
Que el alumno:
- Conozca y cree un programa; el cual cuente con todos los segmentos y puntos principales de los que puede estar
formado un programa.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Las estructuras de programa presentadas posteriormente , tanto para segmentos como para secciones,
pueden ser compilados y ligados con Macroassembler y Turbo para 16 bist, respetando la sintaxis para cada caso;
ejemplo:
Un programa en lenguaje ensamblador es una serie de sentencias ejecutables que le dicen al ensamblador
que operaciones tienen que realizar.
Cada sentencia esta compuesta por cuatro campos
Nombre Operacin Operando(s) Comentario
1.- Campo Nombre
Todas las letras de la A a la Z .
Dgitos del 0 al 9 .
Smbolos Especiales .
Variables, rtulos, Constantes, Nombre segmento, Nombre de procedimientos, Nombre de macros.
Variables
Representa una posicin de memoria que es accesible por un programa y el contenido de
esta posicin puede cambiar durante la ejecucin del programa.
Pgina

de 74

19

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Rtulo
Son los nombres aplicados a instruccines ejecutables en los programas de aplicacin los
cuales son referenciados como cdigo relativo un nombre o rotulo pudiendo tener 3 atributos.
Direccin de Segmento
Desplazamiento de segmento
Descriptor de accesibilidad NEAR o FAR cuando no se especifica, se considera NEAR.
Datos
Pila
Ciclo:
Countador
label near
Final
label far
Constantes
Binaria
Consta de ceros 1/0 una seguida por la letra b.
Ocho equ 00001000b
Decimal
Consta de series de dgitos del 0 al 9 y opcionalmente seguida por la letra D.
Cuarenta equ
40D
Treinta equ
30
Hexadecimal
Consta de series de dgitos del 0 al 9 y A a la F; terminada por la letra H.
Si el valor hexadecimal comienza con una letra entonces se antepone un cero.
Nueve equ
9h
Diez EQU 0AH
Octal
Serie de digitos del 0 al 7 terminados por la letra O o Q.
Tres EQU 3O
Siete EQU 7Q
Carcter
Puede tener cualquier smbolo del cdigo ASCII encerrado entre comillas simples o dobles si
contiene ms de dos caracteres la pseudo operacin DB (Define byte) debe ser utilizada si la
cadena carcter contiene solo uno de dos caracteres, entonces solo pueden ser utilizadas las
pseudo operaciones DD, DQ, DT, DW .
LetraB DD
B
Nombre
DB
Persona
Flotante
Representa valores en notacin cientfica .
Flotante
DD
3.1415E-1
Real Hexadecimal
Digitos del 0 al 9 y de la A a la F y terminados por la letra R siguiendo las reglas de los datos
hexadecimales.
RelHexa
DD
0FAB 12345R
Nombre de Segmento
Se da en el campo del nombre de la sentencia del segmento.
Codigo SEGMENT PARA codigo
2.- Campo Operacin
Este campo contiene un nemotcnico para ejecutar una instruccin del microprocesador.
Mov AX, 0AF2Ah
3.- Campo Operando
Este campo contiene la posicin o posiciones donde estan los datos que van a ser manipulados por la
instruccin de la operacin .
Mov AX, 8
4.- Campo Comentario
Es el ultimo de los 4 campos y es utilizado para documentar el programa internamente e inicia con un punto y
coma.
Mov AH, 43
; Asigna un cuarenta y tres a la parte alta del registo AX
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.2 Formato de un programa
Pgina

de 74

20

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR2_2a.ASM
;Programa que ejemplifica el uso de segmentos con registros de 16 bist.
;El programa realmente no hace nada y es terminado con la instruccin RET.
;Nombre
Operacin
Operando(s) Comentario
Tres EQU 3Q
;Constante octal
Ocho equ
00001000b
;Constante binaria
Pila
SEGMENT PARA STACK 'STACK'
; Pila es nombre del segmento
DB
64 DUP(0)
Pila
ENDS
Datos SEGMENT PARA 'Datos'
; Datos es nombre de segmento
Variable1
DB
5
Datos ENDS
Codigo SEGMENT PARA 'Codigo'
FormatoPrograma
PROC FAR
;Procedimiento principal, punto de entrada del programa
ASSUME CS:Codigo, DS:Datos, ES,Datos, SS:Pila
PUSH DS
; Guardar el contenido del registro de Segmento de Datos en la pila
MOV AX,00
PUSH AX
MOV AX,Datos
MOV DS,AX ;Operacin MOV con los operandos destino DS y fuente AX
MOV ES,AX ;El segmento extra es requerido por algunas interrupciones
;Agrega la lgica necesaria por tu programa
RET
;Retorno del procedimiento y fin del programa
FormatoPrograma ENDP
Codigo
ENDS
END FormatoPrograma

;PR2_2b.ASM
;Programa que ejemplifica el uso de secciones en procesadores con registros de 16 bist (80286).
;El programa realmente no hace nada, unicamente coloca el valor 4C00H en el registro AX, para que
; la interrupcin 21H termine el programa.
.286
.MODEL SMALL
.CODE
Programa:
;Agrega la lgica necesaria para tu programa
MOV AX,4C00H
;Funcin para terminar programa
INT 21H
;Interrupcin para terminarlo
.STACK 64
END Programa

PRCTICA No. 17
NOMBRE: Proceso de compilado, ligado y ejecucin de un programa
OBJETIVO:
Que el alumno:
- Practicar las diferentes formas de compilar, ligar y ejecutar un programa.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.

Pgina

de 74

21

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

INTRODUCCIN:
El cdigo fuente es un texto escrito generalmente por una persona que se utiliza como base para generar otro
cdigo con un compilador o intrprete para ser ejecutado por una ordenador.
Normalmente se refiere a la programacin de software. Un nico programador o un equipo de ellos escriben el
cdigo fuente en el lenguaje de programacin elegido. Posteriormente en un proceso de compilacin el cdigo fuente
se traduce en cdigo objeto.
A diferencia del cdigo objeto, el cdigo fuente es texto simple, capaz de ser ledo por cualquier editor de textos y lo
que es ms importante, entendible por cualquier programador. En l estn escritas las instruccines que deber
realizar la ordenador, segn la sintaxis de un lenguaje de programacin. Tener el cdigo fuente es vital si se necesita
modificar un programa.
El trmino de cdigo fuente tambin se usa para el cdigo de otros lenguajes, como los de marcado de textos,
como el HTML, que posteriormente son interpretados por un programa especializado, en este caso el navegador web,
para su lectura.
Fase 1

Fase 2

Cdigo Fuente

Cdigo Objeto No
Ejecutable .OBJ

Edicin

Editor

Fase 3

Cdigo Objeto
Ejecutable .EXE

Traduccin

Ligado

Compilador

L. Editor

AP L I C AC I O N E S

Bibliotecas

Sistema Opertivo WIndows:


A:\MASM>Masm Programa;
A:\MASM>Link Programa
A:\MASM>Programa

A:\TASM>Tasm Programa
Para compilar generando un .OBJ
A:\TASM>Tlink Programa
Para ligar generando un .EXE
A:\TASM>Programa
Para ejecutar
A:\TASM>TD Programa
Para depurar o debuger, siempre y cuando
para compilar se haya utilizado Tasm /zi Programa
y al ligar Tlink /v programa

C:\masm32\bin\ml /c /coff /nologo Programa.asm

/c Ensamblar si ligar
/coff Archivo de cdigo objeto no
ejecutable
/nologo Suprimir el mensaje de derechos de
copia
C:\\masm32\bin\Link /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text Programa.obj > nul
/SUBSYSTEM Entorno de ejecucin WINDOWS o CONSOLE
/MERGE con quien se unir el programa
Sistema Operativo Linix:
#nasm f elf programa.asm
Compilar
#ld -s -c programa programa.o
Ligar
#./programa
Ejecutar
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.2 Formato de un programa
;PR2_2.ASM
;Definicin de un programa general para Macro Assembler

Pgina

de 74

22

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;Nombre

Operacin

Operando(s)

Comentario

PRCTICA No. 18
NOMBRE: Directivas de ensamble
OBJETIVO:
Que el alumno:
- Pondr en prctica las directivas de precompilacin.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Es posible usar las directivas para programar en cualquier procesador y con cualquier versin de compilador.
Solo basta con consultar la disponibilidad de las mismas para cada uno de ellos.
.386 Tipo de procesador a usar, .MODEL Modelo de memoria a usar, .DATA Seccin para la definicin de datos,
.CODE Seccin para la incorporacin del cdigo, .STACK Seccion para la definicin de la pila, .IF .ELSE .ENDIF
.ELSEIF Estatuto de decisin, .WHILE .ENDW Estatuto de repeticin Mientras, .BREAK Suspende la ejecucin de
un bloque de cdigo y se va hasta el final del mismo,

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
2.2 Formato de un programa

PRCTICA No. 19
NOMBRE: Transferencia de datos
OBJETIVO:
Que el alumno:
- Probar el funcionamiento de las instruccines que le permitan mover, referenciar e intercambiar datos.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
LDS y LES Cargan el puntero de 4 bytes, localizados en la posicin de memoria indicada por el segundo
operando, en un registro de segmento y uno de palabra. La primera palabra del sealizador (desplazamiento) se carga
en el registro del primer operando; la ltima palabra del puntero se carga en el registro DS (para LDS) o ES (para
LES).
XCHG Cambia el operando fuente byte o palabra con su operando destino al mismo tipo.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.5 Instruccines para transferencia de datos
;PR2_5.ASM
;Transferencia de datos
Pila
SEGMENT
PARA
DB
64 DUP(0)
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
Variable2
DD
Variable3
DD

STACK
'STACK'
;Reserva 64 bytes en el rea de la pila y los inicia con ceros

5
?
10,20,30,40,50

Pgina

de 74

23

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
TransferenciaDatos PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV
LEA
LDS
LES
XCHG
XCHG
XCHG

BL, Variable1
DX, Variable3
SI, Variable3
BX, Variable2
BX, DX
CL, Variable1
AL, CL

RET
TransferenciaDatos
Codigo
ENDS
END

;Copia el contenido del operando fuente en el destino


;Tomar la direccin efectiva del Variable
;Carga puntero de doble palabra en registro
;Carga puntero de doble palabra en registro

ENDP
TransferenciaDatos

PRCTICA No. 20
NOMBRE: Aritmtica binaria
OBJETIVO:
Que el alumno:
- Experimentar con las diferentes instruccines que le permitirn efectuar operaciones en aritmtica binaria.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Operaciones aritmticas sin signo.
ADD Suma dos operandos, almacenando el resultado en el destino; Sealizadores afectados
AF,CF,OF,PF,SF,ZF.
SUB Resta el contenido del operando fuente al destino, dejando el resultado en el destino; sealizadores
afectados OF,SF,ZF,PF,AF,CF.
MUL
Multiplica el contenido del operando fuente por el contenido de AL o AX, segn sea el caso, si el
operando fuente es de un byte, lo multiplica por el contenido de AL, dejando el resultado en AX; pero si el operando
fuente es de una palabra, lo multiplica por el contenido de AX, dejando el resultado en DX:AX , dejando en DX el
resultado mas significativo del resultado. OF y Cf se ponen a cero si DX es cero, en caso contrario se ponen a uno.
DIV
Divide el contenido del operando de tipo byte, entre el contenido del registro AX, almacenando el
cociente en AL y el residuo en AH; cuando el divisor es una palabra, divide el contenido de DX:AX, dejando el cociente
en AX y el residuo en DX.
INC
Incrementa en una unidad el contenido del operando especificado, pudiendo ser un registro, mitad o
una variable. Sealizadores afectados SF,OF,ZF,AF,PF.
DEC
Decrementa en una unidad el contenido del operando especificado, pudiendo ser un registro, mitad o
una variable. Sealizadores afectados SF,OF,ZF,AF,PF.
ADC, SBB, NEG,CBW,CWD, IMUL, IDIV
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.6 Instruccines aritmticas
2.6.1 Aritmtica binaria

Pgina

de 74

24

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR2_6_1.ASM
; Instruccines aritmticas binarias
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
4
Variable2
DB
3
Variable3
Dw
10
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
AritmeticaBinaria
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV AL,Variable1
MOV BL,Variable2
INC
AL
DEC BL
ADD AL,Variable2
SUB AL,Variable2
MOV AX, Variable3
MUL Variable2
resultado en AX
RET
AritmeticaBinaria
Codigo
ENDS
END

; Incrementa en una unidad el contenido de AL


; Decrementa en una unidad el contenido de BL
; Suma el contenido de Variable2 al de AL, dejando el resultado en AL

; Multiplica el contenido de AX por el contenido de Variable2, dejando el

ENDP
AritmeticaBinaria

PRCTICA No. 21
NOMBRE: Aritmtica empacada
OBJETIVO:
Que el alumno:
- Podr apreciar y experimentar con las instruccines que se pueden efectuar antes o despus de las operaciones
aritmticas.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Ajuste a ASCII el contenido de AL despus de:
AAA La suma, convirtiendo el contenido de AL en un dgito decimal sin empacar, es decir un nmero entre el
0 y el 9.
AAS La sustraccin, convirtiendo el contenido de AL en un dgito decimal sin empacar, es decir un nmero
entre el 0 y el 9.
AAM La multiplicacin, convirtiendo el contenido de AL en un dgito decimal sin empacar, es decir un nmero
entre el 0 y el 9.
AAD La divisin, convirtiendo el contenido de AL en un dgito decimal sin empacar, es decir un nmero entre
el 0 y el 9.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.6 Instruccines aritmticas
2.6.2 Aritmtica empacada
Pgina

de 74

25

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR2_6_2.ASM
;Transferencia de datos
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA
'Datos'
Variable1
DW
5
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
AritmeticaEmpacada PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV BX,8
MOV AX,Variable1
ADD AX,BX
AAA
;Ajuste ASCII despues de la suma
RET
AritmeticaEmpacada ENDP
Codigo
ENDS
END AritmeticaEmpacada

PRCTICA No. 22
NOMBRE: Manipulacin de banderas
OBJETIVO:
Que el alumno:
- Apagar y encender las banderas.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
CLC borra el sealizador de arrastre.
La operacin CLC pone el sealizador de arrastre a 0 . No estn afectados ningn registro ni
sealizador.
Sintaxis: CLC (no operando)
Sealizadores afectados: CF = 0
Sealizadores no definidos: Ninguno
CLD borra el sealizador de direccin.
CLD borra el sealizador de direccin, incrementa SI y DI. Ningn otro registro ni sealizador estn
afectados. Despus de que se ejecuta CLD, las operaciones de cadena incrementa automticamente
los registro ndice (SI y/o DI).
Sintaxis: CLD ( no operando)
Sealizadores afectados: DF
Sealizadores no definidos: Ninguna
CLI borra sealizador de interrupcin (inhabilita interrupciones).
La instruccin CLI borra el sealizador de habilitacin de interrupcin. No es afectado ningn otro
sealizador.

Pgina

de 74

26

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Sintaxis: CLI ( no operando)


Sealizadores afectados: IF = 0
Sealizadores no defenidos: Ninguno
CMC complementa sealizador de arrastre. Esta instruccin cambia el valor del sealizador de arrastre. Si el
sealizador de arrastre esta a 1, se convierte en 0. Si esta a 0 se convierte en 1.
Sintaxis: CMC
Sealizador afectados: CF
Sealizador no definidos: Ninguno.
LAHF carga en AH los sealidadores. Esta instruccin carga SF, ZF, AF, PF, CF, ciertos bits del registro AH.
AH
SF ZF

AF

PF

CF

Las posiciones de los bits1, 3 y 5 del registro AH estn indefinidas.


SAHF almacena el contenido del registro AH en los sealizadores SF, ZF, xx, AF, xx, PF, xx, CF. Los valores
del registro AH se utilizan para cargar los sealizadores aqu listados desde los bits 7, 6, 4, 2 y 0, respectivamente.
Sintaxis: SAHF (no operando)
Sealizadores afectados: Ninguno
Sealizadores no definido: Ninguno
STC pone a 1 sealizador de arrastre.
Sintaxis: STC (no operandos)
Sealizadores afectados: CF = 1
Sealizadores no definidos: Ninguno
STD pone a 1 sealizador de direccin. La instruccin STD pone a 1 el sealizador DF. Esto hace que las
instruccines de cadena posteriores decremente los registros SI y/o DI.
Sintaxis: STD (no operando)
Sealizadores afectados: Ninguno
Sealizadores no definidos: Ninguno
STI pone a 1 sealizador de habilitacin de Interrupcin. Esto permite que sean facilitadas las interrupciones
externas enmascarables despus de la ejecucin de la instruccin siguiente.
Sintaxis: STI (no operando)
Sealizadores afectados: CF = 1
Sealizadores no definidos: Ninguno.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.7 Instruccines de manipulacin de banderas
;PR2_7.ASM
; Instruccines de manipulacin de banderas
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Codigo
SEGMENT
PARA 'Codigo'
ManipulacinDeBanderas
PROC FAR
ASSUME CS:Codigo, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
STC
; Encender la bandera de acarreo
CLC
; Apagar la bandera de acarreo

Pgina

de 74

27

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

LAHF
;Cargar las banderas en la parte alta del registro AX
RET
ManipulacinDeBanderas
ENDP
Codigo
ENDS
END ManipulacinDeBanderas

PRCTICA No. 23
NOMBRE: Comparacin y prueba
OBJETIVO:
Que el alumno:
- Har uso de las instruccines que le permita comparar contenidos y verificarlos.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
CMP Comparacin entre dos operandos, restndolos, lo cual afecta los sealizadores, pero no su
contenido. Afectando los sealizadores OF,SF,ZF,AF,PF,CF.
TEST Permite efectuar una comparacin lgica, haciendo uso de la intruccin AND lgica de bit a bit en los
dos operandos. Afectando los siguientes sealizadores: OF =0, CF=0, SF, ZF, PF.
Despus del uso de cualquiera de las anteriores intrucciones, generalmente se usa un salto, condicional o no.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.8 Instruccines de comparacin y prueba
;PR2_8.ASM
; Instruccines de comparacin y prueba
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
5
Variable2
DD
?
Variable3
DD
10,20,30,40,50
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
ComparacinYPrueba PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
CMP
JE

Variable1,Variable2
Fin

TEST AX,BX
JNE
Fin

; Comparacin entre dos operandos, restndolos

; Comparacin lgica, haciendo uso de AND bit a bit en los dos operandos

Fin:

RET
ComparacinYPrueba ENDP
Codigo
ENDS
END ComparacinYPrueba

Pgina

de 74

28

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

PRCTICA No. 24
NOMBRE: Saltos condicionales
OBJETIVO:
Que el alumno:
- Har uso de las instruccines que le permitirn efectuar saltos dentro del mismo programa.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Una introduccin de salto se reduce a cambiar el contenido de IP y, eventualmente el de CS.
Principalmente, existen dos tipos de instruccines de salto: aquellas que especifican la direccin de salto
inmediato despus del cdigo de operacin, es decir, especifican la etiqueta a la que hay que saltar (denominados
saltos directos), y aquellas que especifican una direccin de memoria de la que hay que recoger la direccin a la que
saltar (denominadas saltos indirectos).
Los bytes que componen una instruccin de salto directo incluyen en el cd. la operacin algunos bytes que
especifican la direccin a la que se debe producir el salto.
Saltos incondicionales:
Pero existen varios formatos posibles para la instruccines de salto directo. El primero se denomina SHORT
JUMP (salto corto), y el nico dato que incluye la instruccin despus del cd. de ope racin es un byte, que
representa en complemento a dos el valor a aadir a IP para seguir la ejecucin. Este byte se suma a IP, para lo que
primero es necesario extenderlo en signo (que el signo del primer byte ocupe el segundo byte) a 16 bits. As, el byte
representa un desplazamiento entre -128 y +127 bytes (256 bytes), que es el rango que se puede especificar con un
bytes en complemento a dos.
Si observamos el orden en el que el microprocesador lleva a cabo la ejecucin de una instruccin, veremos que el
desplazamiento se suma a IP despus de haber incrementado ste. Por tanto, el desplazamiento se toma desde la
direccin de comienzo de la siguiente instruccin al salto, y no desde la propia instruccin de salto.
El siguiente formato de salto directo es el NEAR JUMP o salto cercano. Este formato, la instruccin incluye dos
bytes que forman la palabra a sumar a IP, tambin en complemento a dos. As, el rango de salto est entre -32768 y
+32768 bytes (65535 bytes), que efectivamente permiten un salto a cualquier punto del segmento donde reside la
instruccin de salto (en este formato CS tampoco es alterado por el salto). El ensamblador comprueba si el salto est
en el rango (-128, +127) para realizar un salto corto y si no lo est genera un salto cercano.
El ltimo tipo de salto se denomina FAR JUMP o salto lejano. Esta denominacin se debe a que ste formato de
salto, cambia tanto CS como IP, pudiendo saltar a cualquier punto del megabyte direccinable (2 elevado a 20). En
ste formato de salto, la instruccin lleva dos palabras con el desplazamiento y el segmento de la direccin a la que
hay que saltar (se utiliza para realizar un salto a otro segmento). Este tipo de salto copia directamente en IP y CS los
valores dados por la instruccin, sin tener en cuenta el contenido previo de ambos.
Existen dos formatos de instruccines de indirecto: el primero, denominado NEAR JUMP o salto cercano, lee una
palabra de la direccin de memoria especificada y carga el registro IP con sta. As, se puede saltar a cualquier punto
del segmento donde resida la instruccin de salto. El otro tipo se denomina FAR JUMP o salto lejano, y toma de la
direccin especificada dos palabras, la primera de la cuales se introduce en IP, y la segunda en CS (Ya que el
ordenamiento INTEL siempre se almacenan primero los elementos de menor peso). De sta forma se puede saltar a
cualquier punto de la memoria direccinable con un salto indirecto.
JMP: El formato de la instruccin es JMP direccin. Provoca un salto incondicional, por lo que se utiliza para seguir la
ejecucin del programa en otro punto, que puede ser especificando una etiqueta (salto directo) o
especificando una direccin (salto indirecto). Cuando incluimos instruccines de salto en el programa,
indicamos la direccin del destino, y en caso de que el salto necesite especificar un valor a sumar a IP, el
ensamblador se encarga de calcular el desplazamiento desde el punto donde se ejecuta el sal to. En una
instruccin JMP; el propio ensamblador decide si debe generar un salto corto o lejano: en el caso de que
el destino est en el rango de un byte con signo, se genera un salto corto, en caso contrario, se genera un
salto cercano.
Saltos condicionales:
Pgina

de 74

29

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Para los siguiente saltos, vamos a tener en cuenta significados de palabras inglesas que nos van a ayudar a definir el tipo de salto a realizar:
(Equal=igual, Not=no, Greater=mayor, Less=menor, Above=superior, Below=inferior, Carry=acarreo, Zero=cero, Overflow=desbordamiento, Sign=signo, Parity=paridad)
JA: (Salto si superior). Es equivalente a JNBE (Salto si no in ferior ni igual). El formato es: JA etiqueta si tanto el flag de
acarreo CF como el flag de cero ZF est a cero (CF= 0, ZF=0). Si CF=1 o ZF=1 no se transfiere el control.
No se considera el signo.
Ejemplo:
CMP ax, bx ; Comparar AX con BX.
JA etiqueta ; Saltar (Bifurcar) a ETIQUETA si AX>BX
; (sin considerar signo).
ETIQUETA:
JAE: (Salto si superior o igual). Es equivalente a JNB (Salto si no inferior). El formato es: JAE etiqueta. Salta a la
etiqueta si el flag de acarreo es cero (CF=0). No se considera el signo.
Ejemplo:
CMP ax, bx ; Comparamos AX con BX.
JAE etiqueta ; Bifurca a ETIQUETA si AX> o =BX
; (sin considerar el signo).
ETIQUETA:
JB: (Salto si inferior). Es equivalente a JNAE (Salto si no su perior ni igual) y a JC (Salto sin acarreo). El formato es: JB
etiqueta. Salta a la etiqueta si el flag de acarreo es uno (CF=1). No se considera el signo.
Ejemplo:
CMP ax, bx
JB etiqueta ; Bifurca a ETIQUETA si AX < BX
; (sin considerar el signo).
ETIQUETA:
JBE: (Salto si inferior o igual). Es equivalente a JNA (Salto si no superior). El formato es: JBE etiqueta. Salta a la
etiqueta si el flag de acarreo es igual a 1 o el flag de cero es igual a uno (CF=1 y ZF=1). Si CF=0 y ZF=0
no hay salto. No se considera el signo.
Ejemplo:
CMP ax, bx
JBE etiqueta ; Bifurca a ETIQUETA si AX es = o < que BX ; (sin considerar el signo).
ETIQUETA:
JE: (Salto si igual). Es equivalente a JZ (Salto si cero). El formato es: JE etiqueta. Salta a la etiqueta si el flag de cero
es igual a uno (ZF=1). Se considera nmero con signo y sin signo.
Ejemplo:
JZ etiqueta ; Bifurca a ETIQUETA si AX es cero.
ETIQUETA:
JG: (Salto si mayor). Es equivalente a JNLE (Salto si no menor ni igual). El formato es: JG etiqueta. Salta a la etiqueta
si el flag de cero es igual a cero y el flag de desbordamiento contiene el mismo valor que el flag de signo
(ZF=0 y SF=OF). Si ZF=1 o SF<>OF, no hay salto. Se considera el signo.
Ejemplo:
CMP ax, bx
JG etiqueta ; Bifurca a ETIQUETA si AX > BX
; (considerando el signo).
ETIQUETA:
JGE: (Salto si mayor o igual). Es equivalente a JNL (Salto si no menor). El formato es: JGE etiqueta. Salta a la etique ta si el flag de desbordamiento contiene el mismo valor que el flag de signo (SF=OF). Se considera el
signo.
Ejemplo:
CMP ax, bx
JGE etiqueta ; Bifurca a ETIQUETA si AX es > o = BX
; (considerando el signo).
ETIQUETA:
JLE: (Salto si menor o igual). Es equivalente a JNG (Salto si no mayor). El formato es: JLE etiqueta. Salta a la etique ta si el flag de cero est a uno o el flag de desborda miento y el de signo contiene valores distintos (ZF=1 o
SF distinto de OF). Si ZF=0 y SF=OF no se produce el salto. Se considera el signo.
Pgina

de 74

30

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Ejemplo:
CMP ax, bx
JLE etiqueta ; Bifurca a ETIQUETA si AX es < o = BX
ETIQUETA:

; (considerando el signo).

JNA, JNAE, JNB, JNBE, JNE, JNG, JNGE, JNL, JNLE:


Estas instruccines comprueban exactamente las condiciones opuestas a sus anlogas sin la letra N. En
realidad no sera necesaria, porque son sinnimas de JBE, JB, JAE, JNZ, JLE, JL, JGE Y JE,
respectivamente. Pero el lenguaje ensamblador estndar las incluye para facilitar el trabajo del programa dor.
JO: (Salto si desbordamiento). Formato es: JO etiqueta. Salta a la etiqueta si el flag de desbordamiento est a uno
(OF=1).
Ejemplo:
ADD ax, bx ; AX=AX+BX
JO etiqueta ; Bifurca a ETIQUETA si hay desbordamiento
; (Overflow).
ETIQUETA:
JNO: (Salto si no desbordamiento). El formato es: JNO etiqueta. Salta a la etiqueta si el flag de desbordamiento est a
cero (OF=0).
Ejemplo:
ADD al, bl ; AL=AL+BL
JNO etiqueta ; Bifurca a ETIQUETA si no hay desbordamiento
; (No overflow).
ETIQUETA:
JS: (Salto si signo). El formato es: JS etiqueta. Salta a la etiqueta si el flag de signo est a uno (SF=1).
Ejemplo:
SUB ax, bx ; AX=AX-BX
JS etiqueta ; Bifurca a ETIQUETA si signo, es decir, AX < 0 ; (en este caso, si AX es menor que BX).
ETIQUETA:
JNS: (Salto si no signo / si el signo es positivo). El formato es: JNS etiqueta. Salta a la etiqueta si el flag de signo est
a cero (SF=0).
Ejemplo:
SUB ax, bx ; AX=AX-BX
JNS etiqueta ; Bifurca a ETIQUETA si no signo, es decir, AX > o = que BX
; (en este caso, si AX es
mayor o igual que BX).
ETIQUETA:
JP: (Salto si paridad). Es equivalente a JPE (salto sin paridad par). El formato es: JP etiqueta. Salta a la etiqueta si el
flag de paridad est a uno (PF=1).
Ejemplo:
AND ax, bx ; AX=AX AND BX
JP etiqueta ; Bifurca a ETIQUETA si paridad par, es decir
; si el nmero de "unos (1)" que hay en AX es
par.
ETIQUETA:
JNP: (Salto si no paridad). Es equivalente a JPO (salto sin paridad impar). El formato es: JNP etiqueta. Salta a la
etiqueta si el flag de paridad est a cero PF=0).
Ejemplo:
AND ax, bx ; AX=AX AND BX
JNP etiqueta ; Bifurca a ETIQUETA si paridad impar, es decir
; si el nmero de "unos (1)" que hay en
AX es impar.
ETIQUETA:
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.9 Instruccines de salto
2.9.1 Condicionales

Pgina

de 74

31

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR2_9_1.ASM
; Instruccines de salto
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Codigo
SEGMENT
PARA 'Codigo'
Saltos PROC FAR
ASSUME CS:Codigo,SS:Pila
PUSH DS;Guarda la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX,00
MOV BX,10
INICIO: INC
AX
DEC BX
CMP AX,BX
JE
FIN
CONDICIONADO
JMP INICIO
INCONDICIONAL
FIN:
RET
Saltos ENDP
Codigo
ENDS

; Incrementa en una unidad el contenido de AX


; Decrementa en una unidad el contenido de BX
; Compara el contenido de AX con el de BX
; Si los contenidos comparados son iguales salta al FIN
; Siempre que llegue a este punto salta al INICIO

END

SALTO
SALTO

Saltos

PRCTICA No. 25
NOMBRE: Ciclos
OBJETIVO:
Que el alumno:
- Pondr en prctica las instruccines que le permitirn hacer uso de cuatro tipos de ciclos.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
LOOP:
Esta instruccin permite realizar "bucles" utilizando el registro CX como contador (CX en un contador
que va decrementndose). Un bucle es un conjunto de instruccines que se ejecutan una serie de
veces. Esta instruccin equivale al par: DEC CX // JNZ etiqueta. El formato es: LOOP etiqueta.
LOOPE:
Esta instruccin al igual que LOOP, permite realizar "bucles" utilizando el registro CX como contador
(CX en un contador que va decrementndose) pero adems el flag de cero debe estar a uno (ZF=1).
Es equivalente a LOOPZ (Bucle si cero). Esta instruccin equivale al par: JNE FIN // LOOP OTRO.
El formato es: LOOPE etiqueta.
LOOPNE: Esta instruccin al igual que LOOP, permite realizar "bucles" utilizando el registro CX como contador
(CX en un contador que va decrementndose) pero adems el flag de cero debe estar a cero
(ZF=0). Es equivalente a LOOPNZ (Bucle si no cero). Esta instruccin equivale al par: JE FIN //
LOOP OTRO. El formato es: LOOPNE etiqueta.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.10 Instruccines de ciclos

Pgina

de 74

32

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR2_10.ASM
; Instruccines de ciclos
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Vector
DB
1,2,3,4,5,0
Cuantos
DW
5
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
InstruccinesDeCiclos
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV
ETIQUETA:

CX,Cuantos

LOOP ETIQUETA

; CX = 5 El cul ser el nmero de veces del bucle


; Aqu estaran las instruccines que estn dentro del bucle.
; CX = CX 1 y bifurca a ETIQUETA mientras CX diferente de cero

MOV BL,00
;Aseg urar que BL tenga cero, para usal o como acumulador
MOV SI,OFFSET Vector
; Mover a SI el Inicio del Vector
DEC SI
; Decrementar el contenido del registro para poder generalizar dentro del ciclo
INICIO: INC
SI
; Incrementar en una unidad el contenido del registro SI
ADD BL,Vector[SI] ; Aqu estaran las instruccines que estn dentro del bucle.
CMP Vector[SI],0 ; Comparar elemento del vector con cero para determinar si es el final
LOOPNE INICIO
; Regresa a INICIO mientras no sea igual acero
RET
InstruccinesDeCiclos
ENDP
Codigo
ENDS
END InstruccinesDeCiclos

PRCTICA No. 26
NOMBRE: Operaciones lgicas
OBJETIVO:
Que el alumno:
- Har uso de las cuatro instruccines lgicas en programas separados.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
EInstruccines Lgicas: NEG, NOT, AND, OR, XOR
Datos de

Compuerta

Datos de

NEG: Esta instruccin calcula el complemento a


entrada
lgica
salida
dos del operando, y lo almacena en el
mismo lugar. Esto es, efectivamente,
equivalente a cambiar de signo el operando de la instruccin.
MOV AX, 4
; Mover un cuatro al registro AX.
NEG AX
; Se haya el complemento a 2 de AX y se guarda en AX (AX = - 4).
NEG BYTE PTR ES:[BX+SI+2] ; Se haya el complemento a 2 de la posicin de memoria (dentro del
Segmento Extra) indicada por el
; de "BX+SI+2"

Pgina

de 74

33

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

NOT: Se realiza el NOT lgico del operando bit a bit. El NOT consiste en invertir cada bit del operando (pasar los 0
a 1 y los 1 a 0; 10100 01011)
Tabla
de
verdad
E
S
S=E
0
1
1
0
NOT SI
NOT W ORD PTR ES:[0]
los 1 a 0.

; Del val or que t enga SI pasa los 0 a 1 y los 1 a 0.


; La palabra apuntada al inicio del segmento extra, se pasa los 0 a 1 y

AND: Operacin "y lgico" a nivel de bit entre los dos operandos. El resultado se almacena en el destino.
Formato AND destino, fuente.
Permite apagar un bit o asegurarnos que se encuentra apagado en la posicin que lo agreguemos en el
operando fuente.
Tabla
de
verdad
E1 E2
S
0
0
0
S = E1 * E2
0
1
0
1
0
0
1
1
1
AND
AND
AND
AND

AX.BX
ES:[0], DX
DI, ES:[SI]
BYTE PTR[9], 3

; AND l gico entr e AX y BX. El resultado queda en AX.


; Lo mismo pero con posiciones de memoria.
; Lo mismo pero con valores inmediatos.

OR: Operacin "o lgico exclusivo" a nivel entre los dos operandos. El resultado se almacena en el destino.
Formato OR destino, fuente.
Permite encender un bit o asegurarnos que se encuentra encendido en la posicin que lo agreguemos en el
operando fuente.
Tabla
de
verdad
E1 E2
S
0
0
0
S = E1 + E2
0
1
1
1
0
1
1
1
1
OR AL, AH
; Las mismas operacio nes que con AND pero utili zando el OR.
OR [DI], CH
OR CL, [BP+4]
OR BYTE PTR ES:[SI], 1
XOR: Operacin "o lgico exclusivo" a nivel de bit entre los dos operandos. El resultado se almacena en destino.
Formato XOR destino, fuente.
Tabla
de
verdad
E1 E2
S
0
0
0
S = E1 * E2 + E1 * E2
0
1
1
1
0
1
1
1
0
Pgina

de 74

34

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

XOR AX, AX
de AX (AX=0).

; El XOR entre dos bits con el mismo valor es siempre 0, independientemente del valor previo

; Las ventajas de hacerlo as son dos: la ejecucin de XOR reg, reg es ms rpida que la de
MOV reg, o que la de MOV ax,0 , y la codificacin de la ; primera ocupa menos bytes que la
;segunda; Esta tcnica no puede utilizarse para poner a cero los registros de segmento.
XOR BYTE PTR[55AAh], 4
XOR AL, 00AAh
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.11 Instruccines lgicas
;PR2_11.ASM
; Instruccines lgicas
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
10
;10 Decimal es equivalente a 00001010B
Variable2
DB
11011101B
Variable3
DW
1010101010101011B
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
InstruccinesLogicas PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
00001010 Variable1
PUSH AX
AND
11011101 BL
MOV AX, Datos
00001000 BL
MOV DS, AX
MOV
AND
MOV
OR

BL,Variable2
BL, Variable1
AX, 0A5FFH
Variable3, AX

OR

1010101010101011
1010010111111111
1010111111111111

AX
Variable3
Variable3

RET
InstruccinesLogicas ENDP
Codigo
ENDS
END InstruccinesLogicas

PRCTICA No. 27
NOMBRE: Desplazamiento circular
OBJETIVO:
Que el alumno:
- Pondr en prctica y apreciar el efecto de los desplazamientos circulares.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
RCL (rotacin a la izquierda con acarreo)
Sintaxis: RCL destino, contador

Pgina

de 74

35

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Rotar a la izquierda los bits del operando destino junto con el indicador de acarreo CF el nmero de bits
especificado en el segundo operando. Si el nmero de bits a desplazar es uno, se puede especificar directamente, en
caso contrario el valor debe cargarse en CL y especificar CL como segundo operando. No es conveniente que CL sea
mayor de siete, en bytes; quince, en palabras.
RCL
RCL
RCL

RCR (rotacin a la derecha con acarreo)

AX,1
AL,CL
DI,1

Sintaxis: RCR destino, contador

Rotar a la derecha los bits del operando destino junto con el indicador de acarreo CF el nmero de bits
especificado en el segundo operando. Si el nmero de bits es uno se puede especificar directamente; en caso
contrario su valor debe cargarse en CL y especificar CL como segundo operando:
RCR
RCR

ROL (rotacin a la izquierda)

BX,CL
BX,1

Sintaxis: ROL destino, contador

Rota a la izquierda los bits del operando destino el nmero de bits especificado en el segundo operando, que
puede ser uno CL previamente cargado con el valor del nmero de veces.
ROL
ROL

ROR (rotacin a la derecha)

DX,CL
AH,1

Sintaxis: ROR destino, contador

Rota a la derecha los bits del operando destino el nmero de bits especificado en el segundo operando. Si el
nmero de bits es uno se puede poner directamente, en caso contrario debe ponerse a travs de CL.
ROR
ROR

CL,1
AX,CL

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
2.12 Instruccines de rotacin y desplazamiento
;PR2_12a.ASM
; Instruccines de rotacin y desplazamiento
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
5
Variable2
DW
0101001101010001B
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
RotacionYDesplazamiento PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX

Pgina

de 74

36

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

MOV CL,Variable1
MOV AX,Variable2
RCL AX,1
;Rotacin a la izquierda con acarreo un bit
RCL AX,CL
RET
RotacionYDesplazamiento ENDP
Codigo
ENDS
END RotacionYDesplazamiento
PRCTICA No. 28
NOMBRE: Desplazamiento lneal
OBJETIVO:
Que el alumno:
- Pondr en prctica y apreciar el efecto de los desplazamientos lneales.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
SAL,SHL,SAR,SHR
SAL/SHL (desplazamiento aritmtico a la izquierda)

Sintaxis: SAL/SHL destino, contador

Desplaza a la izquierda los bits del operando el nmero de bits especificado en el segundo operando que
debe ser CL si es
mayor que uno los
bits desplazados.

SAR (desplazamientoaritmtico a la derecha)

Sintaxis: SAR destino, contador

Desplaza a la derecha los bits del operando destino el nmero de bits especificado en el segundo operando.
Los bits de la izquierda se rellenan con el bit de signo del primer operando. Si el nmero de bits a desplazar es 1 se
puede especificar directamente, si es mayor se especifica a travs de CL.
SAR
SAR

SHR (desplazamiento lgico a la derecha)

AX,CL
BP,1

Sintaxis: SHR destino, contador

Desplaza a la derecha los bits del operando destino el nmero de los bits especificados en el segundo
operando. Los bits de la izquierda se llena con cero. Si el nmero de bits a desplazar es 1 se puede especificar
directamente en el caso en que no ocurra se pone el valor en CL:
SHR
SHR

AX,CL
CL,1

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
2.12 Instruccines de rotacin y desplazamiento
;PR2_12b.ASM
; Instruccines de rotacin y desplazamiento
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
5

Pgina

de 74

37

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Variable2
DW
0AH
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
RotacionYDesplazamiento
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV CL,Variable1
MOV AX,Variable2
SAL
AX,1
SHL AX,CL
RET
RotacionYDesplazamiento ENDP
Codigo
ENDS
END RotacionYDesplazamiento
PRCTICA No. 29
NOMBRE: Manipulacin de la pila
OBJETIVO:
Que el alumno:
- Pondr en prctica las instruccines que le permitan introducir y extraer datos de la pila.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
La estructura de una PILA es similar a un montn de libros apilados: los elementos se van ordenando cada uno
detrs del ltimo en llegar (es decir, los libros se van apilando cada uno encima del anterior), pero al sacarlos de la
estructura se empieza por el ltimo en llegar, acabando por el primero (al retirar los libros se comienza por el superior,
y se acaba por el que queda abajo del todo).
A la operacin de introducir un elemento en una pila se le suele dar el nombre de empujar un elemento (PUSH en
ingls). La operacin de extraer un elemento de una pila se le denomina POP.
Los elementos que puede almacenar la pila del microprocesador son valores de 16 bits, con lo cual el puntero de
pila se debe incrementar o decrementar 2 unidades a la hora de sacar o introdu cir valores en la pila (a meter un valor
de 16 bits en la pila el puntero de la pila se decrementa en dos unidades, y a la hora de sacar un elemento de la pila el
puntero se incrementa en dos unidades; la pila crece hacia abajo en lugar de hacia arriba).
El microprocesador tiene dos registros que se utilizan para gestionar la pila: el SS (Segmento de Pila) y el SP
(Puntero de Pila). El par SS:SP da la direccin donde se encuentra el ltimo valor empujado en la pila.
PUSH:
Decrementa en 2 unidades el puntero de la pila, es decir, decrementa en 2 unidades el registro SP, y a
continuacin almacena en la cima de la pila la palabra especificada en el operando origen asociado a la
instruccin.
Formato PUSH origen
Ejemplo:
PUSH ax
;es equivalente a: SP = SP-2 // MOV ss:[sp], ax
El operando origen no puede ser un operando inmediato (ni el registro de segmento CS).
POP: Esta instruccin toma una palabra de la cima de la pila y la siten el operando destino asociado a la
instruccin, incrementando, a continuacin, en 2 unidades el puntero de la pila.
Formato POP origen
Ejemplo: POP ax
; es equivalente a: AX = SS:[SP] // SP = SP + 2
Cuando una instruccin PUSH o POP se ejecuta en un cdigo de programa con el tamao de registro de 32
bits, el ensamblador utiliza como valor de transferecencia 4 bytes en lugar de 2 bytes (una palabra), y las
operaciones realizadas con ESP se efectan sobre unidades de 4 elementos.
PUSHF: Esta instruccin decrementa en 2 unidades el puntero de la pila y a continuacin, almacena en la cima de la
pila el registro de indicadores (FLAGS). No tiene ningn operando.
POPF:
Esta instruccin almacena en el registro de indicadores (FLAGS) la palabra situada en la cima de la pila
aumentando en 2 unidades, a continuacin, el puntero de la pila. No tiene ningn operando.
PUSHA y POPA: Estas instruciones almacenan y sacan de la pila la informacin contenida en los registros siguientes
y en el orden siguiente: AX, CX, DX, BX, SP, BP, SI y DI. El valor de SP es guardado en la pila antes de
Pgina

de 74

38

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

que el primer registro sea guardado. En el caso de utilizar registros de 32 bits la instruccines seran:
PUSHAD y POPAD.
Todo lo que entra en la pila, tiene que salir de la pila, en orden inverso a como entr.
Para situar y sacar palabras de la pila es el siguiente:
PUSH AX
PUSH BX
PUSH CX
PUSH DX
Rutina del programa
POP DX
POP CX
POP BX
POP AX
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
2.13 Instruccines para el stack
;PR2_13.ASM
; Instruccines para el stack
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
5
Variable2
DD
?
Variable3
DD
10,20,30,40,50
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
InstruccinesParaElStack
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
PUSH ES
POP ES
PUSHA
POPA

; Introduce en la pila el contenido del Segmento Extra


; Extrae de la pila un dato de 16 bist, el cual es guardado en el Segmento Extra
; Introduce los registros en la pila
; Extrae los registros de la pila

RET
InstruccinesParaElStack
ENDP
Codigo
ENDS
END InstruccinesParaElStack

PRCTICA No. 30
NOMBRE: Definicin de cadenas
OBJETIVO:
Que el alumno:
- Definir diferentes cadenas en el segmento de datos.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.

Pgina

de 74

39

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
Direccin
Direccin
Carcter Carcter
Carcter
programas que se presentan en el manual.
DECIMAL HEXADECIMAL
ASCII
BINARIO DECIMAL

INTRODUCCIN:
STRING o CADENA
Ms de un carcter contiguo, referenciado
por una variable y almacenado en alguna localidad de
memoria.
Para poder almacenar una cadena en memoria es
necesario definirla utilizando la siguiente sintaxis :
NombreVariable
Directiva
Dato
Carrera1
DB
INFORMTICA$
Carrera2
DB
SISTEMAS,$
Se utiliza (DB) como directiva para definir una
variable string y el signo de pesos, como
delimitador de la cadena.
Al escribir la cadena ser almacenada en la
memoria en forma binaria, utilizando un byte
por cada carcter, siendo estos de tipo ASCII.

0
1
2
3
4
5
6
7
8
9
10
11

0
1
2
3
4
5
6
7
8
9
A
B

I
N
F
O
R
M
A
T
I
C
A
$

1001001
1001110
1010000
1001111
1010010
1001101
1000001
1010100
1001001
1000011
1000001
100100

73
78
70
79
82
77
65
84
73
67
65
36

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
3.1 Definicin de string
;PR3_1a.ASM
; Definicin de string y desplegado en pantalla
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
INFORMTICA$
Variable2
DB
SISTEMAS,$
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
DefinicinDeString
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
;Asignar la direccin de los datos del programa en AX
MOV DS, AX
;Copiar la direccin de AX al registro de segmento de datos DS
LEA DX, Variable1 ; Tomar la direccin efectiva de Variable1 en DX
LEA DI, Variable2 ; Tomar la direccin efectiva de Variable2 en DI
RET
DefinicinDeString ENDP
;Fin del procedimiento principal
Codigo
ENDS
;Fin del segmento de cdigo
END DefinicinDeString
;Fin del programa

;PR3_1b.ASM

Pgina

de 74

40

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;Programa similar al anterior que despliega en pantalla dos cadenas utilizando directivas
;en modo texto y con registros de 16 bits
.286
.MODEL SMALL
;Modelo de compilacin pequeo
.CODE
;Inicio del codigo
Principal:
MOV AX, @DATA
;Asignar la direccin de los datos del programa en AX
MOV DS, AX
;Copiar la direccin de AX al registro de segmento de datos DS
LEA DX, Texto
;Tomar la direccin de la variable Texto en DX
MOV AH, 9
;Mover un nueve en AL que es la funcin para desplegar una cadena
INT 21H
;Provocar la interrupcin veintiuno
MOV AX,4C00H
;Moverle 4C en AH que es la funcin para terminar el programa
INT 21H
;Provocar la interrupcin veintiuno
.DATA
;Inicio del sgmento de datos
Texto DB 'Hola$'
;Variable Texto de tipo BYTE inicializada con Hola
el $ indica el fin de la
cadena
.STACK
;Inicio del segmento de pila de tamao por defecto de 64Kb
END Principal
;Fin del programa
;Instituto Tecnolgico de Ciudad Victoria
;Departamento de Sistemas y Computacin
;Autor: Jos Regino Infante Ventura
;Fecha de creacin: Mayo del 2005
;PR3_1c.ASM
;Programa similar al anterior que despliega en pantalla dos cadenas utilizando directivas
;en modo grfico y con registros de 32 bits
.386
.model flat, stdcall
;Modelo plano con llamadas estandar
option casemap :none
; Sensible al contexto
; Incorporacin de cdigo fuente (inc) y cdigo mquina no ejecutable (lib)
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.code
Principal:
jmp @F
szDlgTitle db "Programa Mnimo en MASM32",0
;Ttulo de la caja de mensaje
szMsg
db " I n f o r m a t i c a ",0
;Texto dentro de la caja
@@:
push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox
push 0
call ExitProcess
end Principal
;Fin del programa

;Instituto Tecnolgico de Ciudad Victoria


;Departamento de Sistemas y Computacin
;Autor: Jos Regino Infante Ventura
;Fecha de creacin: Mayo del 2005
;PR3_1d.ASM
;Programa similar al anterior que despliega en pantalla dos cadenas utilizando directivas
;en modo grfico y con registros de 32 bits
.386
.model flat, stdcall
;Modelo plano con llamadas estandar
Pgina

de 74

41

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

option casemap :none

; Sensible al contexto
; Incorporacin de cdigo fuente (inc) y cdigo mquina no ejecutable (lib)
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.code
Principal:
jmp @F
szDlgTitle db "Programa Mnimo en MASM32",0
;Ttulo de la caja de mensaje
szMsg
db " I n f o r m a t i c a ",0
;Texto dentro de la caja
@@:
push MB_OK
;MB_OK constande ANSI igual a cero existe dentro de WINDOWS.INC
invoke MessageBox,0,ADDR szMsg,ADDR szDlgTitle,MB_OK
invoke ExitProcess,0
end Principal
;Fin del programa

PRCTICA No. 31
NOMBRE: Almacenamiento en memoria de cadenas
OBJETIVO:
Que el alumno:
- Guardar cadenas en memoria.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
STOS : Almacenar una cadena de caracteres.
STOS/ STOSB/ STOSW (80286/80386)
Almacena AL (byte) o AX (palabra) en ES: [DI]
La instruccin STOS transfiere el contenido del registro AL o del AX al byte de memoria o palabra de memoria
sealada por ES:DI. El operando destino debe ser direccinable desdel registro ES, no se permite anulacin
de segmentos.
Sintaxis : STOS
destino _ cadena
STOSB
STOSW
EJEMPLO:
MOV
ECX , 0FFCCAAH
(solo 80386)
LEA
EDI , VARIABLE
MOV
AX , -
REP STOSB
STOS : Almacena los contenidos del registro AL, AX, EAX en un byte, palabra o palabra doble en memoria, la
direccin de memoria siempre est sujeta a los registros ES:DI. Dependiendo de la bandera de direccin,
STOS incrementa o disminuye el registro DI en 1 para byte, 2 para palabra y 4 para palabra doble.
Un uso prctico de STOS con un prefijo REP es para iniciar el rea de datos a cualquier valor especfico, tal
como limpiar el rea de despliegue a blancos. Puede establecer el nmero de bytes, palabras o palabras
dobles en el EX. Con el siguiente programa se borra la zona de memoria :
En este otro ejemplo se ilustra la misma tarea excepto que el contador cambia a un 5 y se repite la instruccin
STOSW en vez de la instruccin STOSB. Adems, tambin se utiliza el registro AX en vez del registro AL.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
3.2 Almacenamiento en memoria

Pgina

de 74

42

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR3_2.ASM
; Definicin de string
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMTICA$"
Variable2
DB
"SISTEMAS","$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
DefinicinDeString
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos,ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV ES, AX
LEA
MOV
CLD
MOV
REP

DI, Variable1
CX,10

; Tomar la direccin efectiva de Variable1 en DX


; Al contador se le asigna un diez
; Borrar sealizador de direccin para autoincremento de DI
; Asigna a la parte baja del registro AX el dato R 52H
; Asigna el byte almacenado en Al a la direccin de DI

AL,'R'
STOSB

LEA
MOV
CLD

DI, Variable2
CX,4

; Tomar la direccin efectiva de Variable2 en DI


; Al contador se le agina un cuatro
; Borrar sealizador de direccin para autoincremento de DI

MOV
REP

AX,'E'
STOSW

; Asigna al registro AX el dato E 45H


; Asigna una palabra almacenado en AX a la direccin de DI

RET
DefinicinDeString
Codigo
ENDS
END

ENDP
DefinicinDeString

PRCTICA No. 32
NOMBRE: Movimiento de cadenas
OBJETIVO:
Que el alumno:
- Har uso de las instruccines que le permitan efectuar movimientos a distintos lugares en la memoria.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
MOVS : Mover una cadena de caracteres.
MOVS / MOVSB / MOVSW ( 80286 / 80386)
Descripcin : Desplaza byte / palabra DS:[SI] o ES:[DI]
Desplaza byte / palabra DS:[ESI] o ES:[EDI]
Las instruccines MOV copian el byte o palabra en [SI] al operando destino byte o palabra en ES:[DI]. El
operando destino debe ser direccinable desdel registro ES. Los segmentos anulados no son posibles para el
operando destino, pero el operando fuente puede utilizar un segmento anulado.

Pgina

de 74

43

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Sintaxis :

MOVS CadenaDestino, CadenaFuente


MOVSB
MOVSW
Formas de la instruccin MOVS
MOVSB
[DI] = [SI] : DI = DI 1 ; SI = SI 1 (byte transferido) MOVSW
[DI] = [SI] : DI = DI 2 ; SI = SI 2 (palabra transferida)
MOVSD
[DI] = [SI] : DI = DI 4 ; SI = SI 4 (doble palabra transferida)
MOVS BYTE1, BYTE2
[DI] = [SI] : DI = DI 1 ; SI = SI 1 (si BYTE 1 y BYTE 2 son bytes)
MOVS WORD1, WORD2 [DI] = [SI] : DI = DI 2 ; SI = SI 2 (si WORD1 y WORD 2 son palabras)
MOVS DWORD 1, DWORD2 [DI] = [SI] : DI = DI 4 ; SI = SI 4 (si DWORD1 Y DWORD2 son
dobles)
MOVS : Combina con un prefijo REP y una longitud en el CX puede mover cualquier nmero de caracteres
donde usted no codifica los operandos, la instruccin se parece a esto :
[ETIQUETA: ] REP MOVS [ ES : DI, DS :SI]
Para la cadena receptora, los registros segmento: desplazamiento son ES:DI; para la cadena emisora los
registros Segmento: desplazamiento son DS:SI, como resultado al inicio de un programa .EXE inicia el
registro ES junto con el registro DS, y antes de ejecutar el MOVS, utilice LEA para iniciar los registros DI y SI.
Dependiendo de la bandera de direccin, MOVS incrementa o disminuye los registros DI y SI en 1 para un
byte, en 2 para una palabra y en 4 para palabra doble.
SINTAXIS :
MOVS cadena destino, cadena_ fuente
MOVSB (transfiere un byte) con prefijo de repeticin REP, es ideal para esta tarea como se ilustra en el
siguiente programa :
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
3.3 Instruccines para manipulacin
;PR3_3a.ASM
; Mover una cadena de caracteres
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DW
5
Variable2
DB
"Sistemas e Informatica$"
Variable3
DB
"Departamento$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
InstruccinesParaManipulacion
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
;===========================
MOV CX, Variable1
; Num De byte/palabras
LEA DI, Variable2
; Direccin de Variable2
LEA SI, Variable3
; Direccin de Variable3
CLD
; borrar direccin
REP MOVS Variable2, Variable3
;===========================
;Empleo de la instruccin MOVSB
LEA DI, Variable2
; direccinar Variable2
LEA SI, Variable3
; direccinar Variable3
CLD
; borrar direccin

Pgina

de 74

44

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

MOV CX,5
; cargar contador
REP MOVSB
; transferir 5 bytes
;===========================
RET
InstruccinesParaManipulacion
ENDP
Codigo
ENDS
END InstruccinesParaManipulacion

PRCTICA No. 33
NOMBRE: Comparacin entre cadenas
OBJETIVO:
Que el alumno:
- Har uso de las instruccines que le permitirn efectuar comparaciones entre cadenas.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
CMPS : Comparar cadenas.
CMPS/CMPSB/CMPSW (80286/80386)
Compara bytes / palabras ES:[DI] o DS:[SI] de DS:[ESI]
Sintaxis :
CMPS
fuente _ cadena , destino _ cadena
CMPSB
CMPSW
CMPS : Compara el contenido de una localidad de memoria (direccinada por DS:SI) con la que otra localidad
de memoria (direccinada por ES:SI) dependiendo de la bandera de direccin, CMPS disminuye tambin los
registros SI y DI en 1 para bytes, 2 para palabras y cuatro para palabras dobles.
Proporciona una comparacin alfanumrica, una comparacin de acuerdo a los valores ASCII. Considere la
comparacin de dos cadenas que contienen JEAN y JOAN. Una comparacin de izquierda a derecha.
J : J iguales
E : O diferentes
A : A iguales
N : N iguales
Una comparacin de los cuatro bytes termina con una comparacin de N con N (iguales).
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
3.3 Instruccines para manipulacin
;PR3_3b.ASM
; Comparacin entre cadenas
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMATICA$"
Variable2
DB
"INFORMATICA$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
ComparacionEntreCadenas
PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila

Pgina

de 74

45

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

MOV AX,00
PUSH AX
MOV AX,Datos
MOV DS,AX
MOV ES,AX
;===========================
MOV
SI, OFFSET Variable1
MOV
DI, OFFSET Variable2
CLD
MOV
CX, 12
REPE
CMPS Variable1 , Variable2
;===========================
MOV
SI, OFFSET Variable1
MOV
DI, OFFSET Variable2
CMPS
Variable1 , Variable2
CMPS
DS:BYTE PTR [SI], ES:[DI]
;===========================
LEA
SI , Variable1
LEA
DI , Variable2
CMPS
Variable1 , Variable2
RET
ComparacionEntreCadenas ENDP
Codigo
ENDS
END ComparacionEntreCadenas

PRCTICA No. 34
NOMBRE: Carga de cadenas
OBJETIVO:
Que el alumno:
- Har uso de las instruccines que le permitan tomar la direccin de las cadenas.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
LODS : Carga una cadena de caracteres.
Formas de la instruccin LODS.
Simblica
Funciones
LODSB
AL = [SI] ; SI = SI 1
LODSW
AX = [SI] ; SI = SI 2
LODSD
EAX=[SI] ;SI=SI 4
LODS LIST AL = [SI] ;SI=SI 1 (si LISTA es un byte)
LODS DATA1 AX = [SI] ; SI = SI 2 (si DATO1 es una palabra)
LODS DATA4 EAX= [SI] ; SI = SI 4 (si DATO es una doble palabra)
Sintaxis :
LODS CadenaFuente
LODSB
LODSW
LODS : Carga al AL con un byte, el AX con una palabra o el EAX con una palabra doble desde la memoria :
la direccin de memoria est sujeta a los registros DS:SI, aunque puede pasar por alto el SI, dependiendo de
la bandera de direccin, la operacin tambin incrementa o disminuye el SI en 1 para byte, en 2 para palabra
y en 4 para palabra doble.
Ya que una operacin LODS llena el registro ; no existe razn prctica para utilizar con ella el prefijo REP,
para la mayor parte de los propsitos, una sencilla instruccin MOV es adecuada.
SCAS : Rastrear cadenas.
SCAS / SCASB / SCASW (80286 / 80386)

Pgina

de 74

46

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

SCAS : Esta instruccin compara el registro AL con un bloque de bytes de memoria, al registro AX con un
bloque de palabras de la memoria o al registro EAX con un bloque de dobles palabras de memoria, SCAS
resta la localidad de memoria de AL, AX o EAX sin alterar ni el registro ni la localidad de la memoria.
Difiere de CMPS en que SCAS busca una cadena por un valor de byte, palabra o palabra doble especificada.
SCAS compara el contenido de la localidad de memoria (direccinada por ES:DI) con el contenido de registro
AL. AX, EAX.
Dependiendo de la bandera de direccin, SCAS tambin incrementa o disminuye el registro DI en 1 para
bytes, 2 para palabras y cuatro para palabras dobles. AL final de la ejecucin, SCAS establece las banderas
AF, CF, DF, PF, SF y ZF. Cuando se combina con el prefijo REP y una longitud en el CX, SCAS puede
buscar en cadenas con cualquier longitud.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
3.3 Instruccines para manipulacin
;PR3_3c.ASM
; Carga de cadenas
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMTICA$"
Variable2
DB
?
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
CargaDeCadenas
PROC FAR
ASSUME CS:Codigo, DS:Datos,ES:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
;========================Copiar los caracteres del uno al once de Variable1, desde la posicin de
MOV CX,11 ;Variable2 mas once, hasta que CX igual a cero (Quedando invertida la cadena)
LEA SI, Variable1
;SI toma la direccin efectiva de donde inicia Variable1
LEA DI, Variable2+11
;DI toma la direccin efectiva de donde inicia Variable2 ms 11
bytes
CLD
;Se borra la bandera de direccin
Repite: LODSB ;Carga un byte en AL de la direccin que tiene SI MOV
[DI],AL ;El
contenido de AL es copiado a la direccin de DI
DEC DI
;Decrementa en una unidad la direccin de DI
LOOP Repite
;Regresa a la etiqueta Repite en tanto CX diferente de cero
;===========================
RET
CargaDeCadenas
Codigo
ENDS
END

ENDP
CargaDeCadenas

PRCTICA No. 35
NOMBRE: Interrupciones de E/S de cadenas
OBJETIVO:
Que el alumno:
- Practicar con las interrupciones y sus funciones, que le permitirn leer o escribir cadenas.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.

Pgina

de 74

47

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.

INTRODUCCIN:
Existen tres tipos de interrupciones; BIOS Sistema Bsico de Entrada/Salida (Basic Imput Otput System),
S.O. Sistema Operativo, comnmente llamado DOS por Sistema Operativo de Disco (Disk Operation System) y las
de Hardware que son las que se provocan entre si los dispositivos electrnicos para llamar la atencin entre ellos
Procesador,Memoria,Teclado,.... En este manual seran usadas solamente las de BIOS y S.O; siendo ambas
provocadas por la instruccin INT NmeroInterupcin
en donde previamente se le asign a los registros
especificados para esa funcin, los datos que necesite y a la mitad superior del registro AX la funcin que debe
llevar acabo la interrupcin, de existir una subfuncin deber estar asignada en la parte baja del mismo registro
AH,AL.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
3.4 Interrupciones para e/s de strings
;PR3_4.ASM
; Interrupciones para e/s de strings
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable2
DB
"SISTEMAS",0AH,0DH,"$" ;0AH Avance de lnea 0DH Retorno de
carro
Variable1
DB
"INFORMATICA$"
;$ Fin de la cadena
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
InterrupcionesParaESDeStrings
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
;===========================
Desplegar en pantalla la cadena ubicada en Variable2
MOV DX,OFFSET Variable2
;Tomar en DX el desplazamiento de donde inicia Variable2
MOV AH,9
;La funcin 9 indica desplegar una cadena, cuya direccin se encuentra en DX
INT
21H
;Provocar la interrupcin 21H del S.O.
;===========================
Desplegar en pantalla la cadena ubicada en Variable1
LEA DX,Variable1
;Tomar en DX La direccin de donde inicia Variable1
MOV AH,9
;L funcin 9 indica desplegar una cadena, cuya direccin s e encuentra en DX
INT
21H
;Provocar la interrupcin 21H del S.O.
RET
InterrupcionesParaESDeStrings
ENDP
Codigo
ENDS
END InterrupcionesParaESDeStrings

PRCTICA No. 36
NOMBRE: Manipulacin del disco con interrupciones de S.O.
OBJETIVO:
Que el alumno:
- Podr leer y escribir datos en un archivo.

Pgina

de 74

48

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.


Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.

INTRODUCCIN:
******************************************************
****************************
************************************************************
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
4.1 Definicin de interrupciones
;PR4_1.ASM
; Lectura de un sector de un disco removible de 1.4Mb
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
512 DUP ('R'),"$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
ManipulacionDisco PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
;===========================
; Asegurarse de que exista un medio removible BL 0 Defecto, 1 A, 2 B, etc
; Despus de la interrupcin si AX = 00H el dispositivo es removible y si AX = 01FH
es fijo;
; siempre y cuando la bandera de carro no se encuentre encendida, despus de la interrupcin.
MOV BL,1
; Unidad A
MOV AX,4408H
; Funcin 4408H Dedectar si el equipo cuenta con la unidad
INT
21H
;===========================
; Lectura de unsector del disco
MOV AH,44H
; Funcin Lectura
MOV AL,04H
; Subfuncin lectura
MOV BL,1
; Unidad 0 Default, 1A, etc.
LEA DX,Variable1 ; Direccin donde se dejar lo leido
INT
21h
; Provocar la interrupcin, para hacer lo anterior especificado
;===========================
MOV AH,9
;Funcin desplegar cadena
LEA DX,Variable1 ; Direccin donde se encuentra la cadena
INT
21H
; Provocar la interrupcin, para hacer lo anterior especificado
RET
ManipulacionDisco ENDP
Codigo
ENDS
END ManipulacionDisco

PRCTICA No. 37
NOMBRE: Manipulacin del disco con interrupciones de BIOS
OBJETIVO:

Pgina

de 74

49

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Que el alumno:
- Podr leer y escribir uno o ms sectores en el disco.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, gr abar , edit ar , compil ar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
La interrupcin 17H del BIOS permite leer, escribir, formatear y
verificar el estado de los discos. El uso de esta interrupcin puede
ocasionar el deterioro de los datos del disco, cuando se especifica la
funcin de formateo o escritura sin tener el cuidado suficiente. Se
recomienda usar solamente unidades removibles, con la finalidad de que
puedan ser formateadas para restableser su funcionamiento.
La mayora de las funciones de la interrupcin 13H alteran la bandera de
acarreo, si hubo un xito o fracaso, regresando el cdigo de error en el
registro AH. El BIOS mantiene en su rea de datos informacin acerca de
cada dispositivo y su Estado. 40:41H para el rea de datos de unidades de
disco flexible y en 40:74H para discos duros.
Si una operacin sobre el disco regresa un error, este podr ser restablecido con la funcin 00H y se podr reintentar
la operacin nuevamente. Si el error persiste se deber mostrar un mensaje de error en donde se especifique el
problema y la posible solucin.
Cdigo Estado
Cdigo Estado
00H
Sin error
09H
Intento de DMA de cruzar una frontera de 64K el
L/E
01H
Comando incorrecto, no reconocido por el 10H
Encontr un Control Cclico Redundante (CRC)
controlador
incorrecta
02H
Marca de direccin en disco no encontrada
20H
Fallo del controlador (Hardware)
03H
Intento de escribir en un disco protegido
40H
Fallo en operacin de bsqueda (Hardware)
04H
Pista/sector no vlido
80H
Fallo en el dispositivo al responder (Tiempo
excedido, no
Existe disco, puerta abierta)
05H
Fallo en la operacin de restablecer
06H
Se retir el disco flexible desde el ltimo 0AAH Unidad no preparada
acceso
07H
Parmetros de la unidadd erroneos
0BBH Error no definido
08H
Acceso directo a memoria (DMA) rebasado
0CCH Fallo al escribir
Para restablecer el sistema de disco flexible:
MOV AH,00H; Funcin para restablecer el disco
MOV DL,80H ;Disco duro
INT
13H
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
4.3 Tipos de Interrupciones
;PR4_3.ASM
; Programa que permite leer el primer sector de un disco ubicado en la unidad A
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
512 DUP(R) ;Reserva un espacio de 512 bytes iniciados con R
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'

Pgina

de 74

50

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

ManipulacionDico
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en
la pila
MOV
PUSH
MOV
MOV

AX,00
AX
AX, Datos
DS, AX

MOV
MOV
MOV
MOV
MOV
MOV
LEA

AH,2
AL,1
CH,0
CL,1
DH,0
DL,0
BX,Variable1

; Funcin para leer uno o ms sectores del disco


; Cantidad de sectores (1...)
; Nmero de la PISTA, en este caso es la CERO (0...)
; Nmero de la SECTOR, en este caso es la UNO (1...)
; Nmero de la CARA, en este caso es la CERO ( 0 ...)
; Nmero de la UNIDAD, en este caso es la CERO (0 Defecto, 1 A, 2 B, 3 C)
; Direccin donde se dejaran los datos leidos,
; dejando en AH el resultado de la operacin y en AL la cantidad de sectores

leidos
INT
(Discos)

13H

RET
ManipulacionDico
Codigo
ENDS
END

; Interrupcin de BIOS para manipular medios de almacenamiento secundarios

ENDP
ManipulacionDico

PRCTICA No. 38
NOMBRE: Manipulacin del video con interrupciones de BIOS
OBJETIVO:
Que el alumno:
- Podr introducir y extraer datos de la memoria de video, haciendo uso de interrupciones .
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
La pantalla es una malla de posiciones direccinables, en donde puede ser posicionado el cursor o carcter,
en la memoria de video y posteriormente es reflejada en el monitor, normalmente tiene 25 renglones y 80 columnas
en modo texto y en mdo grfico 800 columnas y 600 renglnes en donde cada posicin es un pxel, punto o dot.
Para hacer referencia a la esquina superior Izquierda es el rengln cero y columna cero.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
4.3.2 Interrupciones enternas del BIOS
MATERIAL Y EQUIPO NECESARIO:
Ordenador con sistema operativo DOS o posterior, con el MACRO y TURBO ASSEMBLER versin 3 o
posterior para 16 bits.
METODOLOGIA:
1. El alumno crear y ejecutar el programa PR4_3_2a.ASM. En caso de que por error al transcribir el texto, el
alumno cometiese errores de sintaxis indicados por el compilador, deber corregirlos hasta lograr la correcta
ejecucin del programa.
2. El maestro explicar la funcin de las instruccines utilizadas en el programa.
3. El alumno almacenar una cadena, tomada desde el teclado, para finalmente desplegarla.
4. El alumno modificar el programa PR4_3_2a.ASM.
5. El alumno analizar los resultados.
6. El alumno elaborar un reporte.
Pgina

de 74

51

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

;PR4_3_2a.ASM
;Programa para borrar toda la pantalla haciendo uso de interrupcin de BIOS
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Codigo
SEGMENT
PARA 'Codigo'
InterrupcionesParaESDeStrings
PROC FAR
ASSUME CS:Codigo, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en
la pila
MOV AX,00
PUSH AX
; Borrado de pantalla usando interrupcin del BIOS
MOV CX,0000
;Esquina superior izquierda
MOV DX,2479H
;Esquina inferior derecha
MOV BH,7
;Atributo normal (Blanco sobre negro)
MOV AH,6
;Funcin enrollar pantalla hacia arriba
MOV AL,0
;Toda la pantalla, puede especificarse el nmero de lneas
INT
10H
;Funcin para manipulacin del VIDEO
RET
InterrupcionesParaESDeStrings
ENDP
Codigo
ENDS
END InterrupcionesParaESDeStrings

PRCTICA No. 39
NOMBRE: Manipulacin del teclado con interrupciones de BIOS
OBJETIVO:
Que el alumno:
- Podr introducir y extraer datos del teclado y el bfer, haciendo uso de interrupciones.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
La interrupcin 16H permite efectuar operaciones bsicas con el teclado, proporcionando diferentes funciones
especificadas en el octeto de AH.
00H
Lectura de un carcter de las 83 teclas disponibles; La operacin verifica el bfer del teclado en
busca de un carcter. Si ninguno est presente, la operacin espera a que el usuario presione alguna tecla, si
se encuentra alguna, lo regresa en AL y su cdigo de rastreo en AH. Si el carcter pulsado es extendido AL
contiene 00.
01H
Determina si un carcter est presente. Es similar a la anterior, pero con la diferencia de que si un
carcter es ingresado en el bfer del teclado, la operacin pone a cero la bandera ZF; si no est presente
ningn carcter la operacin pone a uno la bandera ZF y no espera.
02H
Regresa el estado actual de la tecla SHIFT. Esta operacin regresa en AL el estado de la tecla shift
desde el rea de datos del BIOS, ubicada en la localidad 417H(40:17H). Si el shift izquierdo esta presionado,
en AL el bit uno, si el shift derecho esta presionado, en AL el bit cero.
05H
Escritura en el teclado. Permite que desde un programa se pueda incertar caracteres en el bfer del
teclado, sin tener que presionar ninguna tecla, hasta que se llene. Cargue el carcter ASCII en CH y el cdigo
de rastreo en CL.
10H
Lectura de un carcter del teclado. La operacin es similar a la funcin 00, pero aceptando caracteres
extendidos, como F11, F12...Verifica el estado del bfer del teclado para determinar si se ha ingresado un
carcter. Si ninguno est presente, la operacin espera que el usuario presione una tecla. Si tiene un carcter

Pgina

de 74

52

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

lo regresa en AL y su cdigo de rastreo en AH. Si la tecla pulsada es una funcin extendida, el carcter en AL
es 00, para Inicio y F1, F11 Y F12; pero en las teclas duplicadas como Inicio y RePg, regresa E0H.
11H
Determina si se encuentra un carcter. Es parecida a la funcin 01H, excepto que reconoce el teclado
ampliado.
12H
Regresa el estado actual del Shift. Es similar a la funcin , excepto que puede regresar el estado del
shift extendido en AL.
Teclas de funcin extendida y cdigo de rastreo.
Una tecla de funcin extendida como F1 o Inicio
solicitan una accin en lugar de enviar un carcter. . Como programador se puede especificar que
presionando la tecla Inicio se coloque el cursor en la esquina superior izquierda
Tecla
AH
AL
Cada tecla tiene un cdigo de rastreo ,
A
1EH
41H
empezado con 01 para Esc. Pormedio de stos
*
09H Arruba
2AH
cdigos un programa puede determinar el origen
*
29H Tec. Nm.
29H
de cualquier tecleo. Provocando la interrupcin
Ins
52
Cero o E0 Ampliado
16H con la funcin 10H y pulsando el carcter,
retorna lo siguiente:
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
4.3.2 Interrupciones enternas del BIOS
;PR4_3_2b.ASM
; Manipulacin del teclado con interrupciones (BIOS)
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Msg
DB
"Pulsaste la tecla uno$"
;$ Fin de la cadena
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
ManipulacinDelTeclado
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
MOV AH,10H
; funcin para leer un carcter
INT
16H
CMP AL,31H ; Compara si el carcter pulsado es un uno
JE
PRESIONADO ; Si es igual Salta a la etiqueta PRESIONADO
JMP FIN
PRESIONADO:LEA DX, Msg
MOV AH,9
INT
21H
; Desplegar la cadena de shift presionado
FIN:
RET
ManipulacinDelTeclado
ENDP
Codigo
ENDS
END ManipulacinDelTeclado

PRCTICA No. 40
NOMBRE: Manipulacin del puerto paralelo con interrupciones de BIOS
OBJETIVO:
Que el alumno:

Pgina

de 74

53

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Podr introducir y extraer datos del puerto paralelo, haciendo uso de interrupciones .
Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.

INTRODUCCIN:
La impresora debe entender la seal enviada desde el procesador, por ejemplo, para saltar una pgina,
avanzar lnea o tabular. El procesador tambin debe entender las seales enviadas desde la impresora, como si se
encuenta encendida, si tiene papel, si esta en lnea. Desafortunadamente los diferentes tipos de impresoras envian
seales diferentes, lo cual hace que el crear la interfaz entre el programa y el ordenador tenga que ser ms verstil.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
4.3.2 Interrupciones externas del BIOS
;PR4_3_2c.ASM
;Envio de una cadena de caracteres a la impresora, haciendo uso del archivo lgico del S.O. LPT1 con
interrupciones de BIOS
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMATICA$"
;$ Fin de la cadena
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
InterrupcionesParaESDeStrings
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
LEA BX, Variable1
; Rutina para enviar un carcter a la vez al archivo LPT1
MOV DX,0
; LPT1
MOV AH,1
; Funcin para indicar el inicio
INT
17H
; Interrupcion de BIOS para Inicia la impresora
REPITE:
MOV AL,Variable1[BX]
; Mover el contenido de la Variable1 en la posicin BX a AL
CMP AL,$
; Comparar si el contenido de AL es el carcter usado como fin de la cadena
JE
FIN
; Si es IGUAL salta a la etiqueta FIN
MOV AH,0
INT
17H
INC
BX
JMP REPITE
FIN:
RET
; Fin del procedimeiento principal, regresando el control a quien lo llam
InterrupcionesParaESDeStrings
ENDP
Codigo
ENDS
END InterrupcionesParaESDeStrings

PRCTICA No. 41
NOMBRE: Definicin de macros internas
OBJETIVO:
Que el alumno:
- Experimentar con la definicin de macros internas.

Pgina

de 74

54

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.


Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.

INTRODUCCIN:
Las macros son una forma de subprogramacin al igual que los procedimientos, con la diferencia que stas en
cada punto en donde son llamadas durante el proceso de compilacin, se incorpora el cdigo completo de la macro,
deben de especificarse fuera de cualquier segmento del programa, se les llama internas porque se encuentran en el
mismo archivo en donde reside el programa que las usa, su ejecucin es ms rpida que un procedimiento, pero el
cdigo objeto generado es de mayor tamao, para llamarlas slo basta con usar su nombre y de existir parmetros,
estos debern ser separados por al menos un blanco, cuando son definidas las macros con parmetros, cada uno es
separados por una coma entre ellos, todas las etiquetas usadas dentro de una macro debern ser declaradas como
locales, todos los registros usados en una macro deben de ser guardados en la pila al iniciar y antes de terminar
deben de ser restaurados en orden inverso a como fueron almacenados, con la finalidad de no alterar en nada la
lgica del programa que las llama.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
5.1 Definicin
5.2 Parmetros y etiquetas 5.3 5.4 Ventajas y desventajas
Ensamble
;PR5_1a.ASM
; Definicin de macros internas
ClrScr MACRO
;Borra toda la pantalla no requiere parmetros
PUSH AX
;Guardar contenido de los registros en la pila
PUSH BX
PUSH CX
PUSH DX
MOV AH,6
;Funcin Enrolla pantalla activa hacia arriba
MOV AL,0
;Nmero de lneas, cero para toda la pantalla
MOV BH,07
;Atributo usado para borrar
MOV CH,00
;Fila esquina superior izquierda
MOV CL,00
;Columna esquina superior izquierda
MOV DH,25
;Fila esquina inferior derecha
MOV DL,80
;Columna equina inferior derecha
INT
10H
;Interrupcin de video
POP DX
;Extraer contenido de los registros de la pila
POP
CX
POP
BX
POP AX
ENDM
;Fin de la macro ClrScr
WRITEXY MACRO X, Y, Cadena
;Escribe el contenido de Cadena en Renglon Y Columna X
PUSH AX
PUSH DX
MOV AH,15
;Funcin obtener pantalla actual
INT
10H
MOV AH,2
;Funcin posicionar cursor
MOV DH,Y
;Fila
MOV DL,X
;Columna
INT
10H
MOV AH,9
;Funcin Desplegar cadena
LEA DX,Cadena
;Direccin de cadena a desplegar
INT
21H
;Interrupcin del Sistema Operativo
POP DX

Pgina

de 74

55

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

POP AX
ENDM
WRITE MACRO
Msg
PUSH AX
PUSH DX
MOV AH,9
LEA DX,Msg
INT
21H
POP DX
POP AX
ENDM

;Escribe el contenido de Msg que llega como parmetro

Delay MACRO TIEMPO


LOCAL CICLO1,CICLO2
;CICLO1,CICLO2 SON ROTULOS LOCALES
PUSH CX
;GUARDA VALORES DX Y CX ORIGINAL EN PILA
PUSH DX
MOV DX,TIEMPO
CICLO2:
MOV CX,0FFFFH
CICLO1:
DEC
CX
CMP CX,0
;Comparar el contenido de CX con Cero
JNE CICLO1
;Saltar si la comparacin anterior no es igual
DEC DX
;Decrementar en una unidad el contenido de DX
CMP DX,0
JNE CICLO2
POP DX
POP CX
ENDM
Pila

SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMATICA","$"
;$ Fin de la cadena
Variable2
DB
"SISTEMAS","$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
MacrosInternas
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
ClrScr
WriteXY
1 1 Variable1 ;Escribir el contenido de Variable1 en rengln 1 columna 1
Delay 0FFFFH
;Retardo de FFFFh tiempos
Write Variable2
;Desplegar el contenido de Variable2 en la posicin donde se encuentre el
cursor
Delay 0FFFFH
Writexy 0ah 0AH Variable2
Delay 0FFFFH
Write Variable1
RET
MacrosInternas
ENDP
Codigo
ENDS
END MacrosInternas

Pgina

de 74

56

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

PRCTICA No. 42
NOMBRE: Definicin de macros externas
OBJETIVO:
Que el alumno:
- Experimentar con la definicin de macros externas.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Se les llama macros externas, debido a que el cdigo de las macros existe en un archivo diferente al que las
usa, permitiendo que se puedan agrupar en archivos, macros que realizan funciones parecidas y as formar una
biblioteca de macros. Requiriendo la siguente directiva de pre compilacin para incorporar el cdigo de las macros en
el achivo que las usar: #INCLUDE NoArMa.INC Lo cual significa Nombre Del Archivo de Macros y es opcional la
extencin y la ruta, si sta es omitida se considera que el achivo que se incluira se encuentra en la unidad y directorio
desde donde se efectua la compilacin.
Para el usuario la compilacin, ligado y ejecucin; seran idnticas a haber utillizado macros internas o
externas; pero en el momento de la compilacin se tardar unas fracciones de tiempo ms al usar las macros externas
y es resultado de la bsqueda e incorporacin del archivo de macros en el programa que las usar.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
5.1 Definicin
5.2 Parmetros y etiquetas 5.3 5.4 Ventajas y desventajas
Ensamble
;NoArMa.INC Nombre del Archivo de Macros Incluido
;Puede ser guardado con cualquier nombre e incorporado a cualquier programa
; que demande el uso de alguna de las macros existentes en este archivo
;Macros existentes ClrScr, WriteXY, Write, Dalay
ClrScr MACRO
;Borra toda la pantalla no requiere parmetros
PUSH AX
;Guardar contenido de los registros en la pila
PUSH BX
PUSH CX
PUSH DX
MOV AH,6
;Funcin Enrolla pantalla activa hacia arriba
MOV AL,0
;Nmero de lneas, cero para toda la pantalla
MOV BH,07
;Atributo usado para borrar
MOV CH,00
;Fila esquina superior izquierda
MOV CL,00
;Columna esquina superior izquierda
MOV DH,25
;Fila esquina inferior derecha
MOV DL,80
;Columna equina inferior derecha
INT
10H
;Interrupcin de video
POP DX
;Extraer contenido de los registros de la pila
POP
CX
POP
BX
POP AX
ENDM
;Fin de la macro ClrScr
WRITEXY MACRO X, Y, Cadena
;Escribe el contenido de Cadena en Rengln Y Columna X
PUSH AX
PUSH DX
MOV AH,15
;Funcin obtener pantalla actual
INT
10H
MOV AH,2
;Funcin posicionar cursor
MOV DH,Y
;Fila

Pgina

de 74

57

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

MOV
INT
MOV
LEA
INT
POP
POP
ENDM

DL,X
10H
AH,9
DX,Cadena
21H
DX
AX

WRITE MACRO
Msg
PUSH AX
PUSH DX
MOV AH,9
LEA DX,Msg
INT
21H
POP DX
POP AX
ENDM

;Columna
;Funcin Desplegar cadena
;Direccin de cadena a desplegar
;Interrupcin del Sistema Operativo

;Escribe el contenido de Msg que llega como parmetro

Delay MACRO TIEMPO


LOCAL CICLO1,CICLO2
;CICLO1,CICLO2 SON ROTULOS LOCALES
PUSH CX
;GUARDA VALORES DX Y CX ORIGINAL EN PILA
PUSH DX
MOV DX,TIEMPO
CICLO2:
MOV CX,0FFFFH
CICLO1:
DEC
CX
CMP CX,0
;Comparar el contenido de CX con Cero
JNE CICLO1
;Saltar si la comparacin anterior no es igual
DEC DX
;Decrementar en una unidad el contenido de DX
CMP DX,0
JNE CICLO2
POP DX
POP CX
ENDM
;Instituto Tecnolgico de Ciudad Victoria
;Departamento de Sistemas y Computacin
;Autor: Jos Regino Infante Ventura
;Fecha de creacin: Mayo del 2005
;PR5_1b.ASM programa del tema cinco y subtema uno
;Programa que har uso de las macros externas, localizadas en
;el archivo que se incluye a continuacin
INCLUDE NoArMa.INC
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMATICA","$"
;$ Fin de la cadena
Variable2
DB
"SISTEMAS","$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
MacrosExternas
PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
ClrScr
WriteXY
1 1 Variable1
Pgina

de 74

58

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Delay 0FFFFH
Write Variable2
Delay 0FFFFH
Writexy
0ah 0AH Variable2
Delay 0FFFFH
Write Variable1
RET
MacrosExternas
ENDP
Codigo
ENDS
END MacrosExternas

PRCTICA No. 43
NOMBRE: Definicin de procedimientos internos
OBJETIVO:
Que el alumno:
- Experimentar definiendo procedimientos internos.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Los procedimientos son secciones de cdigo que se ejecutan desde varios lugares en un programa mediante
llamadas a ellos. Cada vez que se llama a un procedimiento se ejecuta las instruccines que forman ese
procedimiento, y despus se devuelve el control al programa que llam o programa principal.
Una declaracin de procedimiento comienza y termina con el par de directivas PROC y ENDP e incluye bien una
opcin NEAR o FAR. Estos atributos informan al ensamblador de que tipo de bifurcacin o instruccin de llamada
generan
cuando
van
a
esa
posicin
particular
.
La instruccin CALL sirve para llamar a procedimiento. Esta guarda direccin instruccin siguiente, transfiere
control.
La instruccin CALL hace que la direccin de la siguiente instruccin se almacene en pila; entonces el control del
programa se transfiere al operando parmetro. Cuando se completa el procedimiento llamado, continua la ejecucin
del programa que llamo en la instruccin que sigue a la instruccin CALL
Sintaxis: CALL parmetro_ operando.
Sealizadores afectados: Ninguno (excepto cuando se presenta una conmutacin de tarea).
CALL Cercana: Esta instruccin tiene 3 bytes de longitud; el primer byte contiene el cdigo y el segundo y tercero
contienen el desplazamiento o distancia. Cuando se ejecuta un CALL cercano, primero salva en la pila la direccin de
desplazamiento de la siguiente instruccin.
Esa direccin est en el apuntador de instruccines (IP o EIP). por qu salvar IP o EIP en la pila?. El apuntador de
instruccines siempre apunta a la siguiente instruccin en el programa. Para la instruccin CALL, se salva el
contenido de IP o EIP dentro de la pila, con lo cual el control del programa pasa a la instruccin que sigue al CALL
despus
de
que
termina
un
procedimiento.
CALL Lejana: Esta instruccin puede llamar a un procedimiento almacenado en cualquier localidad de la memoria
en el sistema. La instruccin Call lejana tiene 5 bytes y tiene un cdigo de operacin seguido por el valor de los
registros IP y CS. Los bytes 2 y 3 contienen el nuevo contenido de IP y los bytes 4 y 5 contienen el nuevo contenido
de CS.
La instruccin Call lejana salva el contenido de IP y CS en la pila antes de brincar a la direccin indicada por los
bytes 2 a 5 de la instruccin. Esto permite que la Call lejana llame a un procedimiento ubicado en cualquier lugar en la
memoria y que retome desde el procedimiento.
Instruccin Call con operandos registros: Las instruccines Call, al igual que las JMP pueden contener un
operando registro y un ejemplo es la instruccin Call BX. Esta instruccin salva el contenido de IP dentro de la pila.
Despus, brinca a la direccin de desplazamiento de 16 bits almacenada en cualquier registro de 16 bits, excepto los
registros
de
segmento.
La instruccin Call tambin puede referenciar apuntadores lejanos si la instruccin aparece como CALL FAR PTR
[SI]. Esta instruccin recupera una direccin de 32 bits en la memoria del segmento de datos direccinada por SI y la
utiliza
como
direccin
para
un
procedimiento
lejano.
Los Procedimientos pueden ser considerados como NEAR (intrasegmento) o FAR (intersegmento). Estos
Pgina

de 74

59

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

atributos en un procedimiento ayudan al microprocesador a determinar el tipo de instruccin CALL a generar cuando
el procedimiento es requerido. Tambin deben ser establecido un camino para la vuelta desde el procedimiento. Este
camino de instruccines difiere dependiendo del atributo NEAR o FAR. Si el procedimiento tiene el atributo NEAR, el
IP es guardado en la pila; si tiene el atribuo FAR, ambos CS e IP son guardados en la pila.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
6.1 Definicin de procedimientos
6.2 Paso de 6.3 Instruccin para llamada
6.4 Procedimientos
parmetros
internos
;PR6_1.ASM
; Definicin de procedimientos internos
Pila
SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA 'Datos'
Variable1
DB
"INFORMATICA$"
Variable2
DB
"SISTEMAS$"
Datos ENDS
Codigo
SEGMENT
PARA 'Codigo'
ProcedimientoInterno PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
;Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
LEA DX,Variable1
CALL DesNL ;Llamando al procedimiento Desplegar cadena con Nueva Lnea
LEA DX,Variable2
CALL Des
;Llamada a procedimiento desplegar sin cambio de lnea
RET
ProcedimientoInterno ENDP
Des
PROC NEAR
PUSH AX
;Guardar contenido del registro que se alterar
MOV AH,9 ;Funcin para desplegar cadena ubicada en DX
INT
21H
POP AX
;Recuperar contenido del registro antes de entrar al procedimiento
RET
Des
ENDP
DesNL PROC NEAR
PUSH AX
;Guardar contenido del registro que se alterar
MOV AH,9 ;Funcin para desplegar cadena ubicada en DX
INT
21H
MOV AH,2 ;Funcin para deplegar un carcter
MOV DL,0AH
;Carcter a desplegar Avance de lnea
INT
21H
MOV DL,0DH
;Carcter a desplegar Retorno de carro
INT
21H
POP AX
;Recuperar contenido del registro antes de entrar al procedimiento
RET
DesNL ENDP
Codigo
ENDS
END ProcedimientoInterno

Pgina

de 74

60

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

PRCTICA No. 44
NOMBRE: Definicin de procedimientos externos
OBJETIVO:
Que el alumno:
- Experimentar definiendo procedimientos externos.
- Aprenda la sintaxis bsica de un programa en ENSAMBLADOR y las palabras reservadas.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
Los procedimientos externos se ubican en un segmento de cdico de programa independiente al principal,
llamndosele a estos biblioteca de procedimientos, los cuales pueden estar organizados, tomando en cuenta sus
capacidades o rea de aplicacin. Los cuales pueden ser incorporados al programa principal al momento del enlace o
LINK (LINK NoProPr + Bibliot). El nombre del Programa Principal y la Biblioteca deben de encontrarse compilados y
en el archivo de Bibloteca los procedimientos llevaran la directiva FAR, ya que son externos al segmento de codigo
que los llamar, especificado lambien la pseudo operacin PUBLIC.
En el programa principal se especificar que se trata de procedimientos externos, mediante la pseudo
operacin EXTRN y los llamados a cada procedimiento sera atravs de la pseudo operacin CALL.
La pseudo operacin EXTRN identifica smbolos o variables utilizadas en el archivo del programa actual,
cuyos atributos se definen en otro archivo. Sintaxis EXTRN Nombre : Tipo
En donde tipo puede ser FAR para los
procedimientos y BYTE, WORD,DW ORD,QW ORD,DQW ORD oTBYTE para las variables.
La pseudo operacin PUBLIC permite especificar los procedimientos o variables que se ponen a disposicin
de otros programas que se enlazarn a ste. Sintaxis PUBLIC Nombre1,Nombre2
Cuando se especifiquen ms de uno debern ser separados por una coma en ambos casos.
Pasos para compilar y ligar:
Tasm BPE
Tasm PR6_5
Tlink PR6_5 + BPE

Compila y genera un BPE.OBJ


Compila y genera un PR6_5.OBJ
Liga PR6_5.OBJ con BPE.OBJ y genera PR6_5.EXE

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
6.5 Procedimientos externos
; BPE.ASM
; Biblioteca de Procedimientos Externos
BPE.ASM
EXTRN Cadena : BYTE
;Se especifica que la variable Cadena se encuentra en otro archivo
Codigo SEGMENT PARA
PUBLIC
'Codigo'
PUBLIC
Clrscr,Despliega
;Se declaran pblicos los procedimientos ClrScr y despliega
ASSUME CS:Codigo
ClrScr PROC FAR ;Procedimiento para borrar toda la pantalla
MOV AH,7
;Desplazar el contenido de ventana hacia abajo para borrarla
MOV AL,00
;Indica que ser toda la ventana
MOV BH,7
;Atributo a usar para borrar
MOV CH,0
;Renglon superior izquierdo
MOV CL,0
;Columna superior izquierda
MOV DH,24
;Rengln inferior derecho
MOV DL,80
;Columna inferior derecha
INT
10H
;Interrupcin BIOS Manipulacin Video
RET
;Retorna a una intruccin despus de dnde fue llamado
ClrScr ENDP
;Fin del procedimiento
Despliega
PROC FAR
MOV AH,9
LEA DX,Cadena

;Procedimiento para desplegar una cadena ubicada en la variable cadena

Pgina

de 74

61

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

INT
21H
RET
Despliega
ENDP
Codigo
ENDS
END
;PR6_5.ASM
; Programa Principal desde donde se llamaran los procedimientos Externos
EXTRN ClrScr:FAR,Despliega:FAR ;Se especifica que los procedimientosClrScr y Despliega se encuentra en
otro archivo
Pila

SEGMENT
PARA STACK
'STACK'
DB
64 DUP(0)
;Reserva 64 bytes en el rea de la pila y los inicia con ceros
Pila
ENDS
Datos SEGMENT PARA PUBLIC
'Datos'
Cadena DB "SISTEMAS",0AH,0DH,"$" ;0AH Avance de lnea
0DH Retorno de carro
Variable1 DB "INFORMATICA$"
;$ Fin de la cadena
Datos ENDS
Codigo SEGMENT PARA
'Codigo'
PUBLIC Cadena ;Se declara pblica la variable Cadena, para poder ser usada en otro archivo
(Segmento)
ProcedimientosExternos
PROC FAR
;Procedimiento principal
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS
; Introduce la direccin del segmento de datos del programa que llama a ste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
;Tomar la direccin en AX de donde existen los datos de este programa
MOV DS, AX
;Asignarle la direccin de datos guardada en AX al Registro de Segmento de
Datos DS
CALL ClrScr
;Borrar toda la pantalla con procedimiento externo
CALL Despliega
;Desplegar la cadena SISTEMAS con procedimiento externo
MOV AH,9
;Funcin para desplegar cadena
LEA DX,Variable1 ;Tomar la direccin de la cadena
INT
21H
;Desplegar la cadena INFORMATICA desde este segmento
RET
ProcedimientosExternos
ENDP
;Fin del procedimiento principal
Codigo
ENDS
;Fin del segmento
END ProcedimientosExternos
;Fin del programa

PRCTICA No. 45
NOMBRE: Programacin a bajo nivel con Pascal
OBJETIVO:
Que el alumno:
- El alumno practicar, programando a bajo nivel en el lenguaje de programacin Pascal.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
El lenguaje de programacin Pascal es posible provocar interrupciones, haciendo uso de la librera DOS, en
la cual se encuentran diferentes procedimientos que se pueden consultar desde la ayuda, en esta prctica se usa el
intr. y los registros de 8 y 16 bits; el pascal es ejecutado desde una ventana con el smbolo del sistema.
Declaracin: procedimiento Intr(IntNo: Octeto; var Regs: TRegisters); donde: - IntNo es el nmero de la
interrupcin del software (0... 255). - TRegisters es un procedimiento definido en la libreria DOS.

Pgina

de 74

62

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:


TEMA
SUBTEMAS
7.1Pascal y ensamblador
PR7_1a.ASM *)
PROGRAM PR7_1a;
USES
CRT, (* Librera requerida para poder usar el WRITELN,...*)
DOS; (* Librera requerida para poder provocar interrupciones, usar los registros y declarar variables de ese
tipo*)
VAR
Msg : String;
Fecha, Anio, Mes, Dia
: string;
Regs
: Registers;
(* Declaracion de la variable Regs como de tipo Registers*)
BEGIN
Msg := 'Hola';
Writeln(msg);
Regs.ah := $2a;
(* Funcin para tomar la fecha del BIOS
*)
intr($21,regs);
(* Provocar la interrupcion 21 hexadecimal
*)
WITH Regs do
BEGIN
str(CX , Anio);
(* Convertir a cadena el dato contenido en CX
*)
str(DH , Mes);
str(DL , Dia);
END;
Fecha := Dia + '/' + Mes + '/' + Anio; (* Concatenar en Fecha las cadenas contenidas en Dia, Mes y Ao*)
writeln('La Fecha es: ', Fecha);
END.
PRCTICA No. 46
NOMBRE: Cdigo Ensamblador inmerso en un programa en Pascal.
OBJETIVO:
Que el alumno:
- Incorporar cdigo en ensamblador en un programa en Pascal o Delphi.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
El lenguaje de programacin Pascal, como tal ya no existe, ha evolucionado a el manejador de base de datos
llamado Delphi de Borland y es en l en donde se crea el ejemplo de programacin a bajo nivel con codigo inmerso en
ensamblador, lo cual es parecido a haberlo hecho en Turbo pascal.
Los comentarios en una declaracin del asm deben estar en el estilo de Delphi. Un punto y coma no indica que el
resto de la lnea es un comentario
En general, las reglas del uso del registro en una declaracin del ASM son iguales que las de un procedimiento o de
una funcin externo. Una declaracin del asm debe preservar el EDI, ESI, los registros ESPECIALMENTE, de EBP, y
de EBX, pero puede modificar libremente los registros de EAX, de ECX, y de EDX. En entrada a una declaracin del
asm, EBP seala al marco actual del apilado y seala ESPECIALMENTE a la tapa del apilado. A excepcin de
ESPECIALMENTE y EBP, una declaracin del asm no puede asumir nada sobre contenido del registro en entrada a la
declaracin
Usted puede escribir procedimientos y funciones completos usando cdigo en lnea del lenguaje ensamblador, sin
incluir una declaracin del final del comenzar.... Por ejemplo,

Pgina

de 74

63

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

function LongMul(X, Y: Integer): Longint;


asm
MOV EAX,X
IMUL Y
end;
El recopilador realiza varias optimizaciones en estas rutinas:
parmetros cuyo tamao no es de 1, 2, o 4 octetos. Dentro de la rutina, tales parmetros deben ser tratados como si
fueran parmetros del var. A menos que una funcin vuelva una secuencia, una variante, o una referencia de la
interfaz, el recopilador no asigna una variable del resultado de la funcin; una referencia al smbolo de @Result es un
error. Para las secuencias, variantes, y los interfaces, el llamador asigna siempre un indicador de @Result.
El recopilador genera solamente los marcos de la pila para las rutinas jerarquizadas, para las rutinas que tienen
parmetros locales, o para las rutinas que tienen parmetros en la pila.
El cdigo automticamente generado de la entrada y de la salida para la rutina seria esto:
PUSH
MOV
SUB
...
MOV
POP
RET

EBP
EBP,ESP
ESP,Locals
ESP,EBP
EBP
Params

; Presente si Locales <> 0 o Parmetro <> 0


; Presente si Locales <> 0 o Parmetro <> 0
; Presente si Locales <> 0
; Presente si Locales <> 0
; Presente si Locales <> 0 o Parmetro <> 0
; Siempre presente

El lenguaje ensamblador regresa alguno de los siguientes resultados.


Los valores ordinales se regresan en AL(8 bits), AX (16 bits), o EAX (32 bits).
Los valores reales son regresados en el ST(0) e el registro de la pila del procesador. (Los valores actuales
son escalados por 10000.)
Apuntador a cadena largas regresado en EAX.
Cadena corta es regresado en un apuntador de localizacin temporal @Result.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
7.1Pascal y ensamblador
PR7_1b.ASM*)
PROGRAM PR7_1b;
{$APPTYPE CONSOLE}
USES
SysUtils;
VAR
Msg : String;
{$R *.res}
FUNCTION SumPas(X, Y: Integer): Integer;
BEGIN
Result := X + Y;
END;
FUNCTION Sum(X, Y: Integer): Integer; stdcall;
BEGIN
ASM
MOV EAX,X
ADD EAX,Y
MOV @Result,EAX
END;
END;
FUNCTION LongMul(X, Y: Integer): Longint;

Pgina

de 74

64

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

ASM
MOV
IMUL
END;

EAX,X
Y
(* Multiplica el contenido de Y por el de EAX*)

BEGIN
Msg := 'Hola';
Writeln(msg);
Writeln('Multiplica entero largo con ensamblador : ',LongMul(2,3));
Writeln('Suma enteros con ensamblador : ',sum(3,5));
Writeln('Suma enteros con Delphi : ',SumPas(8,9));
END.

PRCTICA No. 47
NOMBRE: Programacin a bajo nivel con lenguaje C
OBJETIVO:
Que el alumno:
- El alumno practicar, programando a bajo nivel en el lenguaje de programacin C.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
El lenguaje de programacin C permite provocar interrupciones y as poder tener un control de hardware y software,
hasta la versin de windows 95. En versiones posteriores de sistema operativo, al programa ejecutable generado se
debe especificar que mantenga la compatibilidad con el 95. Esto puede hacerse con el Explorador de windows,
pulsando el botn derecho del ratn, cuando el apuntador del mismo se encuentre sobre el programa ejecutable
generado; en la opcin de propiedades.
Las interrupciones desde el lenguaje C o Ensamblador no pueden ser provocadas en versiones de W indows 2000 o
posteriores, al estar haciendo estos uso de la memoria protegida, que es permitida manejarla desde procesadores
286.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
7.2 C Ensamblador
//PR7_2a.CPP
//
#include <stdio.h> /*Librera que permite hacer uso de la impresin con formato y borrado de pantalla
#include <dos.h> /*Librera que permite disponer de los registros y las interrupciones
void main (void)
{
char msg1[]={"Informatica"}; /*Inicio de msg1, sin especificar su longitud con cadena Informatica
char msg2[9]={"Sistemas$"}; /*Inicio de msg2, de nueve posiciones con cadena Sistemas$
union REGS regs; /*Declaracion de la variable regs para poder accesar los registros y sus mitades
printf (msg1);
getchar();
/*detener la ejecucin del programa hasta pulsar el ENTER
regs.x.cx = 000;
regs.x.dx = 0x2479;
regs.h.bh = 7;
regs.h.ah = 6;
int86(0x10,&regs,&regs); /*Borrado de toda la pantalla haciendo uso de interrupcion diez de BIOS
getchar();
clrscr();

/*Borrado de la pantalla haciendo uso de la funcin de C para ello

*/
*/

*/
*/
*/
*/

*/

*/

Pgina

de 74

65

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

getchar();
printf (msg2);
getchar();

/*Impresin con formato haciendo uso de la funcin de C

*/

}
PRCTICA No. 48
NOMBRE: Cdigo Ensamblador inmerso en lenguaje C
OBJETIVO:
Que el alumno:
- Incorporar cdigo en ensamblador en un programa en C.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
El lenguaje C es sin duda el ms apropiado para la programacin de sistemas, pudiendo sustituir al
ensamblador en muchos casos. Sin embargo, hay ocasiones en que es necesario acceder a un nivel ms bajo por
razones de operatividad e incluso de necesidad (programas residentes que economicen memoria, algoritmos rpidos
para operaciones crticas, etc.). Es entonces cuando resulta evidente la necesidad de poder emplear el ensamblador y
el C a la vez.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS
7.2 C Ensamblador
//PR7_2b.CPP
//
#include "stdafx.h"
*/ Librera para poder utilizar printf */
#include "iostream.h"
*/ Librera para poder utilizar cout */
long int
Suma(long int X,long int Y);
int
SumaC(int X,int Y);
long int
LongMul(int X,int Y);
int main(int argc, char* argv[])
/* Funcin principal del programa */
{
printf("Operacin matemticas desde C y Ensamblador\n"); /* Funcin Impresin con formato */
cout << "X = 3 Y = 4\n";
/* Objeto para desplegado */
cout << "SumaC = " << SumaC(3,4) << "\n";
cout << "LongMul = " << LongMul(3,4) << "\n";
cout << "Suma = " << Suma(3,4) << "\n";
return 0;
}
int SumaC(int X,int Y)
{
return(X + Y);
}
long int Suma(long int X,long int Y)
{
_asm
// Block con cdigo ensamblador
{
mov
eax,X
add
eax,Y
mov
X,eax
}
return (X);

Pgina

de 74

66

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

}
long int LongMul(int X,int Y)
{
_asm mov
eax,X // Codificacin asm lnea por lnea
_asm imul
Y
_asm mov
X,eax
return (X);
}
//PR7_2d.CPP
//Elaborado en Turbo C++ y el ejecutable con conpatibilidad para Windows95
//
#include <conio.h> /* Consola Input / Output o de Entrada/Salida */
#include <stdio.h> /*Librera que permite hacer uso de la impresin con formato y borrado de pantalla */
#include <dos.h> /*Librera que permite disponer de los registros y las interrupciones
*/
void main (void)
{
char msg1[]={"Informatica"}; /*Inicio de msg1, sin especificar su longitud con cadena Informatica */
char msg2[9]={"Sistemas$"};
/*Inicio de msg2, de nueve posiciones con cadena Sistemas$ */
union REGS regs; /*Declaracion de la variable regs para poder accesar los registros y sus mitades */
printf (msg1);
getchar();
/*detener la ejecucion del programa hasta pulsar el ENTER
*/
asm{ mov cx,0000 /* Block con cdigo ensamblador para especificar los parmeros del borrado
mov dx,0x2479
/*Renglon 24 Columna 79
mov bh,7
/*Atributo del carcter normal
mov ah,6
/*Funcin para borrar hacia arriba
mov al,0
/*Toda la pantalla
}
int86(0x10,&regs,&regs); /*Borrado de pantalla con interrupcin de BIOS desde C
getchar();
asm{ mov ah,9
lea dx,msg2
int 0x21
/*Provocar la interrupcin 21 desde ensamblador inmerso en el cdigo C
}
getchar();

*/
*/
*/
*/
*/
*/

*/

printf (msg2);
getchar();
}
PRCTICA No. 49
NOMBRE: Programacin a bajo nivel con lenguaje Basic
OBJETIVO:
Que el alumno:
- El alumno practicar, programando a bajo nivel en el lenguaje de programacin Basic.
- Se familiarice con el ambiente de desarrollo en la que codificar, grabar, editar, compilar y ejecutar los
programas que se presentan en el manual.
INTRODUCCIN:
El lenguaje BASIC
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA
SUBTEMAS

Pgina

de 74

67

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

7.2 Basic Ensamblador

ANEXO No. 1
REPORTE DEL ALUMNO
El maestro definir los lineamientos mnimos de documentacin que debern contener las actividades
relacionadas con cada prctica. Se sugieren seleccionar de entre los siguientes aspectos los que se consideren
convenientes en funcin del tamao y complejidad de la prctica.

1.

Portada: Nombre del tecnolgico, nombre de la prctica, nombre de la asignatura y profesor que la imparte,
nombre del alumno, carrera y nmero de control, lugar y fecha de entrega.
2. Introduccin. Finalidad de la prctica y sntesis del contenido.
3. Marco terico. Definiciones , conceptos,...
4. Desarrollo de la prctica.
5. Impresin del cdigo fuente de cada una de los programas que se derivan de las actividades propias de sta
prctica indicando el nombre y la funcin general del programa,
autor y fecha de elaboracin (o ltima
modificacin), para cada mdulo se explicar brevemente su funcin especfica, los parmetros de entrada y/o
valores de salida.
6. Impresin de los resultados arrojados por la ejecucin del programa.
7. Recomendaciones tcnicas: especifica los mdulos o archivos que componen el programa, las utileras
requeridas, la estructura y mtodo de acceso a las tablas o archivos de entrada y/o salida.
8. Conclusiones. Algunas prcticas requieren que el alumno realice investigacin de temas, elaboracin de tablas,
comparacin de resultados, mediciones de tiempos, etc. El alumno escribir para esos casos las conclusiones a
las que llega.
9. Bibliografa. La que el estudiante para planear y elaborar la prctica.
10. Anexos. Tablas, formatos, Dibujos, Diagramas, fotografas,...
11. Todo los programas compilados y ligados; con los nombres especificados en el manual sern entregados en un
disco.
ANEXO No. 2 BIBLIOGRAFA
1.-

2.-

3.-

4.-

5.-

Autor(es)
KIP R. IRVINE
Ttulo
LENGUAJE ENSAMBLADOR PARA COMPUTADORAS BASADAS EN INTEL
QUINTA EDICIN
Editorial
PEARSON Prentice Hall
Autor(es)
W ILLIAN H. MURRAY III, CHRIS H. PAPPAS
Ttulo
PROGRAMACIN EN LENGUAJE ENSAMBLADOR 80386/80286
Editorial
Osborne/McGraw-Hill Mxico
Autor(es)
PETER ABEL
Ttulo
LENGUAJE ENSAMBLADOR Y PROGRAMACIN PARA PC IBM Y
COMPATIBLES
Editorial
Pearson Educacin, Mxico
Autor(es)
PETER NORTON
RICHARD W ILTON
Ttulo
THE NEW PETER NORTON PROGRAMMERS GUIDE TO THE IBM PC & PS/2
Editorial
Microsoft
http://masm32.com/ http://webster.cs.ucr.edu/

Pgina

de 74

68

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

ANEXO No. 3
BIOS
DOS
CISC
RISC
ALU
CPU
BIU
Firmware
ROM

GLOSARIO
Sistema Bsico de Entrada y Salida
Sistema Operativo en Disco
Complex Instructions Set Computer, Ordenador con un conjunto de instruccines complejo
Reduced Instructions Set Computer, Ordenador con un conjunto de instruccines reducido
Unidad Aritmtico-Lgica
Unidad de proceso central
Basic Interface Unit Unidad de Interfaz Bsica
Programacin en Firme, es un bloque de instrucciones de programa para propsitos
especficos, grabado en una memoria tipo ROM
Read Only Memory Memoria de solo lectura

ANEXO No. 4
INTERRUPCIONES
Las interrupciones constituyen quiz el mecanismo ms importante para la conexin del microcontrolador con
el mundo exterior, sincronizando la ejecucin de programas con acontecimientos externos.
El funcionamiento de las interrupciones es similar al de las subrutinas de las cuales se diferencian
principalmente en los procedimientos que las ponen en marcha. As como las subrutinas se ejecutan cada vez que en
el programa aparece una instruccin CALL, las interrupciones se ponen en marcha al aparecer en cualquier instante
un evento externo al programa, es decir por un mecanismo hardware.
Las interrupciones del procesador, hardware y software son invocadas de diferente manera:
Procesador: Las interrupciones del procesador o interrupciones lgicas son invocadas por el procesador como
consecuencia de un resultado inusual del programa, tal como un intento de divisin por cero.
Hardware: Las interrupciones de hardware son invocadas por mecanismos perifricos estos fijan sus
respectivas lneas de peticin de interrupcin (IRQ). Cada vez que una tecla es presionada, por ejemplo, el
teclado genera una interrupcin. Las interrupciones de hardware son vectoreadas a rutinas de servicio de
interrupcin (ISRs) estas generalmente residen en el BIOS.
Software: Las interrupciones de software son invocadas a travs de la instruccin INT del 8086. La mayora
de las interrupciones de software son vectoreadas a (DSRs) localizado en el BIOS, o en programas de aplicacin.

Nota: Los usuarios de Linux pueden consultar las interrupciones utilizadas en el sistema en el fichero
/proc/interrupts mediante el comando cat /proc/interrupts. Tambin mediante la utilidad dmesg en la forma dmesg
| grep -i irq

Servicios de la interrupcin 0x21 del DOS

Pgina

de 74

69

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

Funcin
o
Servicio

Descripcin de la accin

0x00

Termina Programa.

0x01

Entrada de Teclado

0x02

Salida de carcter a video

0x03

Entrada por el dispositivo Aux. estndar

0x04

Salida por el dispositivo Aux. estndar

0x05

Salida a impresora

0x06

Consola E/S

0x07

Entrada de consola sin eco

0x08

Entrada de consola sin eco sin checar ^C

0x09

Imprime cadena

0x0A

Lee cadena

0x0B

Checa el estado de la entrada

0x0C

Limpia el buffer del teclado e invoca el servicio

0x0D

Reset del disco

0x0E

Selecciona disco

0x0F

Abre archivo existente

0x10

Cierra archivo

0x11

Busca el primer archivo con algn atributo en el nombre

0x12

Busca el siguiente archivo con algn atributo en el nombre

0x13

Borra archivos

0x14

Lectura secuencial

0x15

Escritura secuencial

0x16

Crea archivo

0x17

Renombra archivo

0x18

Servicio interno de DOS

0x19

Busca el disco actual

0x1A

Habilita una localidad DTA

0x1B

Informacin FAT del disco por omisin

0x1C

Informacin FAT de un disco especfico

0x1D - 0x20 Servicio interno de DOS


0x21

Lectura aleatoria

0x22

Escritura aleatoria

0x23

Tamao de archivo

0x24

Habilita un campo de registro aleatorio

0x25

Habilita nueva direccin en el vector de interrupciones


Pgina

de 74

70

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

0x26

Crea un nuevo PSP

0x27

Lectura de bloque aleatoria

0x28

Escritura de bloque aleatoria

0x29

Busca el nombre de archivo

0x2A

Obtiene la fecha

0x2B

Actualiza la fecha

0x2C

Obtiene la hora

0x2D

Actualiza la hora

0x2E

Habilita o inicializa el switch verify

0x2F

Obtiene el DTA actual

0x30

Obtiene el nmero de versin de DOS

0x31

Termina un proceso y lo mantiene residente

0x32

Servicio interno de DOS

0x33

Checa por ^BREAK

0x34

Servicio interno de DOS

0x35

Obtiene una direccin del vector de interrupciones

0x36

Obtiene el espacio libre en disco

0x37

Servicio interno de DOS

0x38

Regresa la informacin dependiente a un pas

0x39

Crea un subdirectorio

0x3A

Borra un subdirectorio

0x3B

Cambia de directorio actual

0x3C

Crea un archivo

0x3D

Abre un archivo

0x3E

Cierra un manejador de archivo

0x3F

Lee de un archivo o dispositivo

0x40

Escribe a un archivo o dispositivo

0x41

Borra un archivo

0x42

Mueve apuntador de lectura / escritura

0x43

Cambia los atributos de un archivo

0x44

Control de E/S

0x45

Duplica un manejador de archivo

0x46

Forza la duplicacin de un manejador de archivo

0x47

Obtiene el directorio actual en una unidad de disco especfico

0x48

Asigna memoria

0x49

Libera memoria asignada

0x4A

Habilita Bloque
Pgina

de 74

71

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

0x4B

Carga o ejecuta un programa

0x4C

Salir (este servicio puede terminar un programa)

0x4D

Obtiene el cdigo de regreso de un subproceso

0x4E

Encuentra el primer archivo con algn atributo en el nombre

0x4F

Encuentra el siguiente archivo con algn atributo en el nombre

0x50 - 0x53 Servicio interno de DOS


0x54

Obtiene estado de verificacin

0x55

Servicio interno de DOS

0x56

Renombre archivo

0x57

Obtiene o actualiza la fecha y hora de un archivo

0x58

Servicio interno de DOS

0x59

Obtiene error extendido de DOS 3+

0x5A

Crea un archivo sencillo DOS 3+

0x5B

Crea un nuevo archivo DOS 3+

0x5C

Acceso a un archivo DOS 3+

0x5E00

Obtiene el nombre de una mquina DOS 3+

0x5E02

Habilita impresora para DOS 3+

0x5E03

Obtiene impresora para DOS 3+

0x5F03

Redirecciona un servicio de DOS 3+

0x5F04

Cancela la redireccin DOS 3+

0x62

Obtiene el segmento de un programa DOS 3+

0x67

Habilita manejador de contador DOS 3.30

0x68

Asigna archivo DOS 3.30

Apndice II - TABLA DE INTERRUPCIONES DEL SISTEMA

INT 00:
INT 01:
INT 02:
INT 03:
INT 04:
INT 05:
INT 06:
INT 07:
INT 08:
INT 09:
INT 0A:
INT 0B:
INT 0C:
INT 0D:
INT 0E:

Divisin por cero


Ejecucin paso a paso
No Enmascarable (NMI)
Puntos de ruptura
Desbordamiento (INTO)
Volcar pantalla por impresora (BIOS)
Cdigo de operacin incorrecto
Reservada
IRQ 0: Contador de hora del sistema (BIOS)
IRQ 1: Interrupcin de teclado (BIOS)
IRQ 2: canal E/S, segundo 8259 del AT
IRQ 3: COM2
IRQ 4: COM1
IRQ 5: disco duro XT, LPT2 en AT, retrazo vertical PCjr
IRQ 6: Controlador del disquete
Pgina

de 74

72

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

INT 0F:
INT 10:
INT 11:
INT 12:
INT 13:
INT 14:
INT 15:
INT 16:
INT 17:
INT 18:
INT 19:
INT 1A:
INT 1B:
INT 1C:
INT 1D:
INT 1E:
INT 1F:
INT 20:
INT 21:
INT 22:
INT 23:
INT 24:
INT 25:
INT 26:
INT 27:
INT 28:
INT 29:
INT 2A:
INT 2B-2D:
INT 2E:
INT 2F:
INT 30:
INT 31:
INT 32:
INT 33:
INT 34-3F:
INT 40:
INT 41:
INT 42:
INT 43:
INT 44-45:
INT 46:
INT 47-49:
INT 4A:
INT 4B-5F:
INT 60-66:
INT 67:
INT 68-6F:
INT 70:
INT 71:
INT 72:
INT 73:
INT 74:

IRQ 7: LPT1
Servicios de vdeo (BIOS)
Listado del equipo (BIOS)
Tamao de memoria (BIOS)
Servicios de disco (BIOS)
Comunicaciones en serie (BIOS)
Servicios del sistema (BIOS)
Servicios de teclado (BIOS)
Servicios de impresora (BIOS)
IBM Basic (ROM del BASIC)
Arranque del sistema (BIOS)
Fecha/hora del sistema
Accin de CTRL-BREAK (BIOS)
Proceso peridico del usuario (Usuario)
Parmetros de vdeo (BIOS)
Parmetros del disquete (BIOS)
Tabla de caracteres grficos (BIOS)
Fin de programa (DOS)
Servicio del sistema operativo (DOS)
Direccin de terminacin (DOS)
DOS CTRL-BREAK (DOS)
Manipulador de errores crticos (DOS)
Lectura absoluta de disco (DOS)
Escritura absoluta en disco (DOS)
Terminar permaneciendo residente (DOS)
DOS Idle (programas residentes que usan funciones DOS)
DOS TTY (impresin en pantalla)
Red local MS net
Uso interno del DOS
Procesos Batch (DOS)
Multiplex (DOS)
Compatibilidad CP/M-80 (xx:YYyy en JMP XXxx:YYyy)
Compatibilidad CP/M-80 (XX en JMP XXxx:YYyy)
Reservada
Controlador del ratn
Reservadas
Interrupcin de disquete (BIOS)
Parmetros del disco duro 1 (BIOS)
Apunta a la INT 10h original del BIOS si existe VGA
Caracteres grficos EGA (BIOS)
Reservadas
Parmetros del disco duro 2 (BIOS)
Reservadas
Alarma del usuario
Reservadas
Para uso de los programas
Interrupcin de EMS (controlador EMS)
Reservadas
IRQ 8: Reloj de tiempo real AT (2 chip 8259-AT)
IRQ 9: IRQ 2 redireccionada (2 chip 8259-AT)
IRQ 10: reservada (2 chip 8259-AT)
IRQ 11: reservada (2 chip 8259-AT)
IRQ 12: interrupcin de ratn IBM (2 chip 8259-AT)
Pgina

de 74

73

TECNOLOGICO DE ESTUDIOS SUPERIORES DE HUIXQUILUCAN


Academia de Ingeniera en Sistemas Computacionales Ing. J. D. Aurelio Rico Daz

INT 75:
INT 76:
INT 77:
INT 78-7F:
INT 80-85:
INT 86-F0:
INT F1-FF:

IRQ 13: error de coprocesador matemtico (2 chip 8259-AT)


IRQ 14: controlador disco fijo (2 chip 8259-AT)
IRQ 15: reservada (2 chip 8259-AT)
Reservadas
Reservadas para el Basic
Usadas por el Basic
Para uso de los programas

Pgina

de 74

74

Você também pode gostar