Manual de Practicas de Ensamblador1
Manual de Practicas de Ensamblador1
Manual de Practicas de Ensamblador1
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.
Pgina 2
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
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
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
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
de 74
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.
MEMORIA
Pgina
de 74
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
* 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
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
-G
Ejecutar
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
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
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
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
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
;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
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
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
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
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
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
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
DB
Pila
64 DUP(0)
ENDS
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
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
;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
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
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 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
;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,
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
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
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
;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
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
;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
AF
PF
CF
Pgina
de 74
27
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 lgica, haciendo uso de AND bit a bit en los dos operandos
Fin:
RET
ComparacinYPrueba ENDP
Codigo
ENDS
END ComparacinYPrueba
Pgina
de 74
28
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
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
Ejemplo:
CMP ax, bx
JLE etiqueta ; Bifurca a ETIQUETA si AX es < o = BX
ETIQUETA:
; (considerando el signo).
Pgina
de 74
31
;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
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
;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
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
Pgina
de 74
33
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.
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
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
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
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
AX,1
AL,CL
DI,1
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
BX,CL
BX,1
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
DX,CL
AH,1
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
Pgina
de 74
36
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)
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.
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
AX,CL
BP,1
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
Pgina
de 74
37
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
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
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
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
;PR3_1b.ASM
Pgina
de 74
40
;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
de 74
41
; 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
;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
AL,'R'
STOSB
LEA
MOV
CLD
DI, Variable2
CX,4
MOV
REP
AX,'E'
STOSW
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
Sintaxis :
Pgina
de 74
44
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
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
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
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
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
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
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
leidos
INT
(Discos)
13H
RET
ManipulacionDico
Codigo
ENDS
END
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
;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
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
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
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
POP AX
ENDM
WRITE MACRO
Msg
PUSH AX
PUSH DX
MOV AH,9
LEA DX,Msg
INT
21H
POP DX
POP AX
ENDM
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
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
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
de 74
58
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
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
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
Pgina
de 74
61
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
Pgina
de 74
63
EBP
EBP,ESP
ESP,Locals
ESP,EBP
EBP
Params
Pgina
de 74
64
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,®s,®s); /*Borrado de toda la pantalla haciendo uso de interrupcion diez de BIOS
getchar();
clrscr();
*/
*/
*/
*/
*/
*/
*/
*/
Pgina
de 74
65
getchar();
printf (msg2);
getchar();
*/
}
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
}
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,®s,®s); /*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
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
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
Pgina
de 74
69
Funcin
o
Servicio
Descripcin de la accin
0x00
Termina Programa.
0x01
Entrada de Teclado
0x02
0x03
0x04
0x05
Salida a impresora
0x06
Consola E/S
0x07
0x08
0x09
Imprime cadena
0x0A
Lee cadena
0x0B
0x0C
0x0D
0x0E
Selecciona disco
0x0F
0x10
Cierra archivo
0x11
0x12
0x13
Borra archivos
0x14
Lectura secuencial
0x15
Escritura secuencial
0x16
Crea archivo
0x17
Renombra archivo
0x18
0x19
0x1A
0x1B
0x1C
Lectura aleatoria
0x22
Escritura aleatoria
0x23
Tamao de archivo
0x24
0x25
de 74
70
0x26
0x27
0x28
0x29
0x2A
Obtiene la fecha
0x2B
Actualiza la fecha
0x2C
Obtiene la hora
0x2D
Actualiza la hora
0x2E
0x2F
0x30
0x31
0x32
0x33
0x34
0x35
0x36
0x37
0x38
0x39
Crea un subdirectorio
0x3A
Borra un subdirectorio
0x3B
0x3C
Crea un archivo
0x3D
Abre un archivo
0x3E
0x3F
0x40
0x41
Borra un archivo
0x42
0x43
0x44
Control de E/S
0x45
0x46
0x47
0x48
Asigna memoria
0x49
0x4A
Habilita Bloque
Pgina
de 74
71
0x4B
0x4C
0x4D
0x4E
0x4F
0x55
0x56
Renombre archivo
0x57
0x58
0x59
0x5A
0x5B
0x5C
0x5E00
0x5E02
0x5E03
0x5F03
0x5F04
0x62
0x67
0x68
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:
de 74
72
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
INT 75:
INT 76:
INT 77:
INT 78-7F:
INT 80-85:
INT 86-F0:
INT F1-FF:
Pgina
de 74
74