Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Tipos de Interfaces: Máquina-Máquina y Hombre-Máquina; este curso considera ambas y se recomienda para ello usar los
siguientes lenguajes de forma individual o mezclados (Ensamblador “tasm, masm y nasm”, C ”gcc, devcpp Visual C” ,
Java, Processing, Basic y Arduino (basasdo en Wiring)).
1.- Introducción al lenguaje ensamblador.
1.1 Importancia de la programación en lenguaje ensamblador.
LENGUAJE ENSAMBLADOR
OBJETIVO GENERAL:
Que el alumno, al término de todas las actividades sea capaz de utilizar el Lenguaje Ensamblador que permita
fortalecer los conocimientos sobre este lenguaje de programación, los cuales serán presentados de menor a mayor grado
de dificultad, con la finalidad de crearle un mayor interés y permita aprender el correcto uso de cada una de las
instrucciones de que está compuesto, corroborar la sintaxis y utilidad al ejecutar las prácticas propuestas. Esperando que
el alumno sea capaz de experimentar con nuevas rutinas que le permitirá solucionar de una forma más fácil los retos que
se le presenten en el control de lel ordenador y los periféricos estandarizados o no.
SIGNIFICADOS:
Lenguaje Ensamblador:
Es un lenguaje simbólico que permite programación a bajo nivel, lo cual proporciona control total del hardware y
software de un sistema de cómputo a traves de un conjunto de mnemònicos.
Un ensamblador es una aplicación de sistema que se encarga de traducir un archivo fuente escrito con
mnemònicos, a un archivo objeto que contiene código máquina, ejecutable directamente por la máquina para la que se ha
generado.
Características:
• Lenguaje compilado “Una vez generado el código ejecutable no requiere del lenguaje para su ejecución”.
• No es sensible al contexto “Sin distingo entre mayúsculas y minúsculas”.
• Lenguaje de bajo nivel “Después de este solo existen ceros y unos o código máquina”.
• Lenguaje de programación más rápido “Por ser compilado y existir una alineación uno a uno con el código
máquina”.
• No es para hacer grandes sistemas, es para hacer partes de código que se requiere ejecutar rápidamente y en
muchas ocasiones”.
• Permite como forma de subprogramación a las macros, procedimientos y librerías.
• Puede ser usados en equipos de computo o microcontroladores.
• Permite la manipulación de los registros internos del procesador.
• Puede usar las interrupciones del BIOS “Sistema Básico de Entrada/Salida” o del SO “Sistema Operativo”.
• Al ser un lenguaje de bajo nivel, existe una mayor interdependencia con el hardware.
• El tipo de programación es mas detallada que las de uno de lato nivel.
• No existen tipos de datos, solo se reservan espacios de memoria para alojarlos:
• BYTE DB 00
• WORD DW 00 00 Word (word, palabra) 16 bits.
• DWORD DD 00 00 00 00 Dword (double word, doble palabra) 32 bits.
• QWORD DQ 00 00 00 00 00 00 00 00 Qword (quadruple word, cuadruple palabra) 64 bits.
Tipos de ensambladores:
Ensambladores básicos. Son de muy bajo nivel y su tarea consiste básicamente en ofrecer
nombres simbólicos a las distintas instrucciones (mnemònicos) de la máquina apropiada, además de
ofrecer un formato de escritura cómodo para expresar los parámetros y cosas tales como los modos de
direccionamiento. Además, reconoce una serie de directivas (o meta instrucciones) que indican ciertos
parámetros de funcionamiento del ensamblador.
Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores
básicos, fueron muy populares en las décadas de los 50 y los 60, antes de la generalización de los lenguajes
de alto nivel. Hacen todo lo que puede hacer un ensamblador y además proporcionan una serie de directivas
para definir e invocar macro instrucciones (o simplemente, macros). Cuando invocamos a una macro, ésta
se expande al cuerpo que se definió.
Ensambladores modulares 32-bits. Pueden ser de alto y bajo nivel, pero solo emulado en 32-bits.
Microsoft aún esta reproduciendo el Microsoft Macro Assembler, es reproducido por un paquete preparado.
El ml 6.14 emula poderosos compilados en 32-bits, su sintaxis es mezcla de: C API, ensamblador, y macros.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 1 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
HLA High-Level Assembler, es un lenguaje poderoso que soporta de bajo y alto-nivel pero solo en 32-bits.
High-Level Assembler traducido a "Ensamblador de Nivel-Alto. Tiene un libro popular llamado "AOA" Art of
Assembly Language traducido a "Arte del Lenguaje Ensamblador". Tambien tiene fama de usar macros como
los de masm.
PRÁCTICA No.
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 básica 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.
INTRODUCCIÓN:
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:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 2 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
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 Operación Operando(s) Comentario
1.- Campo Nombre
Todas las letras de la A a la Z .
Dígitos del 0 al 9 .
Símbolos Especiales .
Variables, rótulos, Constantes, Nombre segmento, Nombre de procedimientos, Nombre de macros.
Variables
Representa una posición de memoria que es accesible por un programa y el contenido de esta
posición puede cambiar durante la ejecución del programa.
Rótulo
Son los nombres aplicados a instrucciones ejecutables en los programas de aplicación los
cuales son referenciados como código relativo un nombre o rotulo pudiendo tener 3 atributos.
Dirección 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 dígitos del 0 al 9 y opcionalmente seguida por la letra D.
Cuarenta equ 40D
Treinta equ 30
Hexadecimal
Consta de series de dígitos 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
Carácter
Puede tener cualquier símbolo del código ASCII encerrado entre comillas simples o dobles si
contiene más de dos caracteres la pseudo operación DB (Define byte) debe ser utilizada si la
cadena carácter 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 notación científica .
Flotante DD 3.1415E-1
Real Hexadecimal
Dígitos 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.
Código SEGMENT PARA ‘codigo’
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 3 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 4 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
.286
.MODEL SMALL
.CODE
Programa:
;Agrega la lógica necesaria para tu programa
MOV AX,4C00H ;Función para terminar programa
INT 21H ;Interrupción para terminarlo
.STACK 64
END Programa
El µC Microcontrolador esta formado por un Microprocesador y el conjunto de subsistemas que normalmente requiere
un microprocesador: memoria volátil (calculo temporal), memoria no volátil (donde almacena el programa), entrada y
salida.
Se define ahora lo que es un Microprocesador. Es un dispositivo integrado digital capaz de interpretar y ejecutar un
conjunto secuencial de instrucciones (programa). Básicamente contiene circuitos electrónicos que realizan
operaciones aritméticas , lógicas y de control. Se trata de un sistema muy complejo, por eso debe ir integrado en chips.
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 MMX™Technology.
Consulta www.intel.com, http://www.amd.com
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 amplía cada uno de esos registros a 64-bit, que entonces se refieren como RAX, RBX, RCX,
RDX, RSP, RBP, RSI, y RDI. También 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 versión 64-bit, R11d es el de 32 bits más bajo del mismo registro, R11w es los 16 pedacitos más bajos del registro y
R11l es el octeto más 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 más bajos de ESI. Los registros de 8
bits AH, BH, el CH y el ADO están disponibles en EM64T. No pueden ser utilizados en las mismas instrucciones con los
nuevos registros de 8 bits.
SPARC (del inglés 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 fácilmente compiladores
de alto rendimiento y una significativa reducción de memoria en las instrucciones load/store en relación con otras
arquitecturas RISC. Las ventajas se aprecian sobre todo en programas grandes.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 5 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Procesador
INTEL”Pentium”, SUN “Sparc”, APPLE “POwerPC”, IBM “Power”, ZILOG “Z80”, MOTOROLA “M68000,
MPC7455”, AMD Advanced Micro Devices “Duron”.
Tamaño de registro 8, 16, 32 y 64 biits
PRÁCTICA No. 3
NOMBRE: Historia de los procesadores
OBJETIVO:
- Que el alumno identifique mediante imágenes y físicamente las marcas y modelos de procesadores.
INTRODUCCIÓN:
Un microprocesador es un circuito integrado construido en un pedazo diminuto de silicio. Contiene miles, o incluso
millones, de transistores que se interconectan vía los rastros extrafinos de aluminio. La función de los transistores es
guardar y manipular datos juntos para que el microporcesador pueda realizar una gran variedad de funciones.
Calsificación deacuerdo a su marca:
Intel 8008,8088,80286,80386,Pentium,I3,I5,I7.
AMD K5, K6, Duron, Athlon, Phenom, Opteron 6300 con 16 nùcleos de 2.8Ghz,
Cyrix MI, MII.
Motorola M68000, MPC7455.
Texas Instruments ARM® Cortex™-A15 Core, ARM® Cortex™-A9 Core, ARM® Cortex™-A8 Core
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 6 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
ARM9™ Core.
Samsung Snapdragon Exynos.
PRÁCTICA No. 5
NOMBRE: Diagrama de componentes internos
OBJETIVO:
- Que el alumno evalue los componentes
internos de que constan los
Unidad
procesadores con diferente arquitectura. Aritmética Bus de Direcciones
Lògica
INTRODUCCIÓN:
Componentes del microprocesador
Unidad de
Reloj Control ROM RAM Puertos
Bus de Datos
Registros
Unidad de ejecución
Bus de Control
UNIDAD DE EJECUCIÓN Una vez que la unidad de decodificación sabe cuál es el significado de la instrucción leída de
memoria, se lo comunica a la unidad de ejecución. Esta unidad será la encargada de consumar la ejecución y para ello
activará las señales 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 instrucciones.
UNIDAD ARITMETICO LOGICA (ALU) La ALU “Aritmethic Logic Unit” es el bloque funcional del microprocesador
encargado de realizar todas aquellas operaciones matemáticas (suma, resta, multiplicación y division). Las operaciones
que realiza son las siguientes: suma, resta, multiplicación, división y aquellas que trabajan con dígitos binarios (10 que se
conoce como operaciones lógicas: AND, NOR, NOT, NAND, OR, X-OR, etc). En suma, saber cómo funciona un
microprocesador, implica conocer cómo se van ejecutando cada una de las instrucciones del programa que se almacena
en memoria. Los pasos globales que se siguen a la hora de consumar una instrucción son:
UNIDAD DE DECODIFICACION Se encarga de decodificar la instrucción que se va a ejecutar. Es decir, saber qué
instrucción es. Cuando el microprocesador lee de memoria una instrucción, el código de esa instrucción le llega a esta
unidad. Esta unidad se encarga de interpretar ese código para averiguar el tipo de instrucción a realizar. Por ejemplo,
instrucciones de suma, multiplicación, almacenamiento de datos en memoria,etc.
UNIDAD DE CONTROL
Es el centro nervioso del ordenador, ya que desde ella se controlan y gobiernan todas las operaciones. Cómo funciones
básicas tiene:
tomar las instrucciones de memoria decodificar o interpretar las instrucciones ejecutar las instrucciones ( tratar las
situaciones de tipo interno (inherentes a la propia CPU) y de tipo externo (inherentes a los periféricos). Para realizar su
función, la unidad de control consta de los siguientes elementos:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 7 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
REGISTRO DE
MICROORDENES INTRUCCIONES
BUS INTERNO
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 8 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Se conoce como set de instrucciones al conjunto de instrucciones que es capaz de entender y ejecutar un
microprocesador.
En función del tipo de microprocesador, concretamente si es más avanzado o no, podrá entender y ejecutar más o menos
instrucciones.
Las cuales se clasifican según su función en:
a).- Transferencia de datos. b).- Cálculo.
c).- Transferencia del control del programa. d).- Control.
a).- instrucciones de transferencia de datos Estas instrucciones mueven datos (que se consideran elementos de
entrada/salida) desde la memoria hacia los registros internos del microprocesador, y viceversa. También se usan para
pasar datos de un registro a otro del microprocesador. Existen algunas instrucciones que permiten mover no sólo un dato,
sino un conjunto de hasta 64 KBytes con una sola instrucción.
b).- instrucciones de cálculo Son instrucciones destinadas a ejecutar ciertas operaciones aritméticas, como por ejemplo
sumar, restar, multiplicar o dividir, o ciertas operaciones lógicas, como por ejemplo AND, OR, así como desplazamiento y
rotación de bits.
c)._ instrucciones de transferencia del control del programa Permiten romper la secuencia líneal del programa y saltar
a otro punto del mismo. Pueden equivaler a la instrucción GOTO que traen muchos lenguajes de programación.
d).- instrucciones de control Son instrucciones especiales o de control que actúan sobre el propio microprocesador.
Permiten acceder a diversas funciones, como por ejemplo activar o desactivar las interrupciones, pasar órdenes al
coprocesador matemático, detener la actividad del microprocesador hasta que se produzca una interrupción, etc.
Prácticamente todas las instrucciones están formadas por dos elementos:
código de operación que indica el tipo de operación se va a realizar operandos, que son los datos sobre
los que actúa.
Por ejemplo, una instrucción que sume dos números está formado por:
código de operación que indique "sumar"; primer número a sumar y segundo número a sumar.
Existen instrucciones que sólo tienen un operando o incluso que no tienen ninguno, estando formadas solamente por el
código de operación.
EJECUCIÓN DE LAS instrucciones
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 instrucciones que lo componen e irá realizando las tareas
correspondientes.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 9 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
sencillas, es capaz de operar mucho más rápido que el microprocesador CISC, el cual no tiene que descomponer esa
instrucción porque la entiende directamente.
Prácticamente, todos los microprocesadores que se utilizan en la fabricación de ordenadores personales
(microprocesadores fabricados por Intel) son de tecnología CISC. Intel, poco a poco, va abandonando la tecnología CISC y
la sustituye por tecnología RISC. Así por ejemplo, un Pentium, sin dejar de pertenecer a la categoría CISC incorpora
algunas características de los micros RISC. Es de esperar que en un futuro, los micros fabricados sean de tecnología
RISC; entonces los ordenadores serán muchísimo más rápidos de lo que hoy los conocemos.
Intel no fabrica microprocesadores completamente RISC para no perder la compatibilidad con los microprocesadores
anteriores.
PRÁCTICA No. 6
NOMBRE: Descripción de componentes
OBJETIVO:
- Que el alumno ejecute un programa observando los contenidos de los registros.
INTRODUCCIÓN:
Los registros internos del microprocesador
Registros de datos:
AX = Acumulador. Es el registro principal utilizado en las instrucciones aritméticas.
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 también para operaciones aritméticas.
Registros de segmentos:
CS = Registro de segmento de código. Contiene la dirección del segmento de código, lo que son las
instrucciones del programa.
DS = Registro de segmento de datos. Contiene la dirección 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 dirección del segmento de pila.
ES = Registro de segmento extra. El segmento extra es un segmento adicional que se utiliza para superar la
limitación de los 64 Kb del
segmento de datos y para hacr la transferencia de datos entre segmentos.
Registros índices:
SI = Índice fuente (Source Index)
DI = Índice destino (Destination Index)
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 10 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
* 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 información 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 comparación
o una instrucción aritmética.
CF = Bandera de acarreo. Indica acarreo en las instrucciones aritméticas (Carry Flag)
OF = Bandera de desbordamiento aritmético (Overflow Flag)
ZF = Bandera de resultado cero o comparación igual (Zero Flag)
SF = Bandera de resultado o comparación negativa (Sign Flag)
PF = Bandera de paridad (Parity Flag)
AF = Bandera auxiliar. Indica si hay necesidad de ajuste en las operaciones aritméticas con
números BCD (Auxiliar Flag)
* Banderas de control: Registran el funcionamiento del procesador:
DF = Bandera de dirección. Controla la dirección (hacia adelante o hacia atrás)
en las operaciones con cadenas de caracteres incrementando o decrementando automáticamente
los registros índices (SI y DI) (Direction Flag)
IF = Bandera de interrupciones. Indica si están permitidas o no las interrupciones de los
dispositivos externos (Interrupt Flag)
TF = Bandera de traza. Controla la operación modo paso a paso (Trap Flag)
=========================
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 11 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
XMM (SSE(Streaming SIMD Extensions) es una extensión al grupo de instrucciones MMX ) registros (128 bits)
XMM0 (128 bits) Registro 0
XMM1 (128 bits) Registro 1
XMM2 (128 bits) Registro 2
XMM3 (128 bits) Registro 3
XMM4 (128 bits) Registro 4
XMM5 (128 bits) Registro 5
XMM6 (128 bits) Registro 6
XMM7 (128 bits) Registro 7
XMM8 (128 bits) Registro 8
XMM9 (128 bits) Registro 9
XMM10 (128 bits) Registro 10
XMM11 (128 bits) Registro 11
XMM12 (128 bits) Registro 12
XMM13 (128 bits) Registro 13
XMM14 (128 bits) Registro 14
XMM15 (128 bits) Registro 15
================================
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 12 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
DDR3 es un tipo de memoria RAM. Forma parte de la familia SDRAM de tecnologías 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
rápido, entonces permitiendo velocidades pico de transferencia y velocidades de bus más altas que las
versiones DDR anteriores. Sin embargo, no hay una reducción en la latencia, la cual es proporcionalmente
más alta. Además la DDR3 permite usar integrados de 512 megabits a 8 gigabytes, siendo posible fabricar
módulos de hasta 16 Gb.
SDRAM (de las siglas en Inglés Synchronous Dynamic Random-Access Memory) se refiere a una familia
de memorias dinámicas de acceso aleatorio (DRAM) que tienen una interfaz síncrona.
La RDRAM es un tipo de memoria síncrona, conocida como Rambus DRAM. Éste es un tipo de memoria
de siguiente generación a la DRAM en la que se ha rediseñado la DRAM desde la base pensando en
cómo se debería integrar en un sistema.
DDR SDRAM (de las siglas en Inglés Double Data Rate Synchronous Dynamic Random-Access Memory)
es un tipo de memoria RAM, de la familia de las SDRAM.
1.4 El concepto de interrupciones
Una interrupción es una llamada de atención, con la finalidad de ser atendido. Puesen ser de Harware, Software
(SO “Sistema Operativo”) o Firmware (Software inmerso o incorpora en el hardware, ejemplo el BIOS “Aistema Básico de
Entrada Salida”).
Este documento se enfoca a las del Sistema Operativo y las del BIOS haciendo uso de la instrucción INT/IRET. Lo
último que hace un manejador de interrupciones es ejecutar la instrucción IRET. La instrucción IRET regresa el control del
CPU al proceso interrumpido haciendo lo opuesto a la instrucción INT.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 13 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
INTRODUCCIÓN:
Son todas las intrucciones que no llevan parámetros, que no accesan memoria, o bien que tienen una forma
específica de accesarla.
Ejemplos: CLI, PUSHF, POPF, NOP
En este modo se especifican los operandos en forma implícita en la definición de la instrucción. Por ejemplo, la
instrucción "complementar acumulador" es la instrucción de modo implícito porque el operando en el registro de
acumulador esta implícito en la definición de la instrucción. De hecho todas las instrucciones de referencia a
registro que utilizan un acumulador son instrucciones de modo implícito.
Las instrucciones de dirección cero en un ordenador organizado con pila son instrucciones de modo implícito
porque esta implícito que los operandos estan en la parte superior de la pila.
PRÁCTICA No. 10
NOMBRE: direccionamiento de datos inmediato
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccionamiento inmediato.
- Aprenda la sintaxis básica 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.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 14 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
INTRODUCCIÓN:
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 instrucción. Por tanto, es rápido aunque no tanto como el
modo registro; requiere ir al BIU por el dato. En este modo se especifica el operando en la instrucción misma. En otras
palabras, una instrucción de modo inmediato tiene un campo de operando, en lugar de un campo de dirección. Un campo
de operando contiene el operando real que se va a usar junto con la operacion especificada en la instrucción. Las
instrucciones de modo inmediato son utiles para Iniciar registros en un valor constante.
El campo de dirección de una instrucción puede especificar una palabra de memoria o un registro de procesador. Cuando
el campo de dirección especifica un registro de procesador se dice que la instrucción esta en modo de registro.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 15 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV AX,365
MOV AL, -30
MOV BL,35
MOV BH,-37
MOV AX,4C00H
INT 21H
END Inmediato
PRÁCTICA No. 11
NOMBRE: direccionamiento directo
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccionamiento directo.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Uno de los operandos involucra una localidad específica de memoria. El valor constante se tiene que buscar en
memoria, en la localidad especificada. Es más lento que los anteriores, pero es el más rápido para ir a memoria, pues ya
"sabe" la localidad, la toma de la instrucción y no la tiene que calcular.
En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en memoria
y su dirección la proporciona en forma directa el campo de dirección de la instrucción. En una instrucción de tipo brinco el
campo de dirección especifica la dirección de transferencia de control del programa real.
Se presenta una práctica sencilla buscando que el alumno dé un primer paso hacia el conocimiento del lenguaje
ENSAMBLADOR. Las instrucciones en ENSAMBLADOR se basan en nemotécnicos, los cuales permiten estructurar la
lógica que el programador desea implementar.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 16 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
RET
Directo ENDP
Codigo ENDS
END Directo
INTRODUCCIÓN:
Usa solamente registros como operandos.
Es el más rápido, pues minimiza los recursos necesarios (toda la información fluye dentro del EU del CPU).
En este modo, los operandos están en registros que residen dentro de la CPU. Se selecciona el registro particular de un
campo de registro en la instrucción. Un campo K bits puede especificar cualquiera de 2k registros.
Se presenta una práctica sencilla buscando que el alumno de un primer paso hacia el conocimiento del lenguaje
ENSAMBLADOR. Las instrucciones en ENSAMBLADOR se basan en nemotécnicos, los cuales permiten estructurar la
lógica que el programador desea implementar.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 17 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PRÁCTICA No. 13
NOMBRE: Direccionamiento registro indirecto
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccionamiento indirecto de registros.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
En este modo la instrucción especifica un registro en la CPU cuyo contenido proporciona la dirección del operando
en la memoria. En otras palabras, el registro seleccionado contiene la dirección del operando en lugar del operando
mismo. Antes de utilizar una instrucción de modo indirecto por registro, el programador debe asegurarse de que la
dirección de memoria del operando esta colocada en el registro del procesador con una instrucción previa. Entonces una
referencia al registro es equivalente a especificar una dirección de memoria. La ventaja de una instrucción de modo de
registro indirecto es que el campo de dirección de la instrucción utiliza menos bits para seleccionar un registro de los que
necesitaria para especificar una dirección de memoria en forma directa.
Se presenta una práctica sencilla buscando que el alumno de un primer paso hacia el conocimiento del lenguaje
ENSAMBLADOR. Las instrucciones en ENSAMBLADOR se basan en nemotécnicos, los cuales permiten estructurar la
lógica que el programador desea implementar.
En este modo, el campo de dirección de la instrucción proporciona la dirección en que se almacena la dirección efectiva en
la memoria. El control recupera la instrucción de la memoria y utiliza su parte de dirección para accesar la memoria una
vez mas con el fin de leer la dirección efectiva.
Unos cuantos modos de direccionamiento requieren que el campo de dirección de la instrucción se sume al contenido de
un registro especifico en la CPU. En estos modos la dirección efectiva se obtiene el calculo siguiente:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 18 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV AX,00
PUSH AX
MOV AX,Datos
MOV DS,AX
PRÁCTICA No. 14
NOMBRE: Direccionamiento registro relativo
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccionamiento registro relativo.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
En este modo el contenido del contador de programa se suma a la parte de dirección de la instrucción para
obtener la dirección efectiva. La parte de dirección de la instrucción por lo general es un número con signo (en
representación de complemento a dos) el cual puede ser positivo o negativo. Cuando se suma este número al contenido
del contador de programa, el resultado produce una dirección efectiva cuya posición en la memoria es relativa a la
dirección de la siguiente instrucción. Para hacer mas claro con un ejemplo, consideremos que el contador de programa
contiene el número 200 y que la parte de dirección de la instrucción contiene el número 11. La instrucción en la posición
200 se lee de la memoria durante la fase de recuperación y el contador de programa se incrementa en uno a 201. El
calculo de dirección efectiva para el modo de dirección relativa es 201 + 11 = 212. Esto es 11 posiciones de memoria
adelante de la dirección de la siguiente instrucción. Con frecuencia se utiliza el direccionamiento relativo con instrucciones
de tipo brinco, cuando la dirección del brinco está en el área que rodea la palabra de la instrucción misma. Esto da como
resultado un campo de dirección más pequeño en el formato de la instrucción porque la dirección relativa puede
especificarse con una cantidad de bits que se necesitan para representar la dirección de memoria completa.
Se presenta una práctica sencilla buscando que el alumno dé un primer paso hacia el conocimiento del lenguaje
ENSAMBLADOR. Las instrucciones en ENSAMBLADOR se basan en nemotécnicos, los cuales permiten estructurar la
lógica que el programador desea implementar.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 19 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
DB 64 DUP(0)
Pila ENDS
RET
RegistroRelativo ENDP
Codigo ENDS
END RegistroRelativo
STRUC ENDS: permite definir registros al estilo de los lenguajes de alto nivel, para acceder de una manera más elegante
a los campos de una información 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 función de si son simples o múltiples, respectivamente:
Sintaxis:
alumno STRUC
cont DB '0123456789' ; modificable
edadaltura DB 75,200 ; no modificable
peso DB 0 ; modificable
otros DB 10 DUP(0) ; no modificable
telefono DD ? ; modificable
alumno ENDS
Sintaxis:
nombre RECORD nombre_de_campo:tamaño[=valor],...
Donde nombre permitirá referenciar la estructura en el futuro, nombre_de_campo identifica los distintos campos, a los que
se asigna un tamaño (en bits) y opcionalmente un valor por defecto.
registro RECORD a:2=3, b:4=5, c:1
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 20 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
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
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 AL, B ; AL = 5 (desplazamiento del bit menos significativo de A)
MOV AL, MASK A ; AL = 01100000b (máscara de A)
MOV AL, WIDTH A ; AL = 2 (anchura de A)
PRÁCTICA No. 15
NOMBRE: Direccionamiento registro base indexado
OBJETIVO:
Que el alumno:
- Sea capaz de efectuar y entender el funcionamiento del direccionamiento base indexado.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
En este modo el contenido de un registro índice se suma a la parte de dirección de la instrucción para obtener la
dirección efectiva. El registro índice es un registro de CPU especial que contiene un valor índice. Un campo de dirección
de la instrucción define la dirección inicial del arreglo de datos en la memoria. Cada operando del arreglo se almacena en
la memoria en relacion con la dirección inicial. La distancia entre la dirección inicial y la dirección del operando es el valor
del índice almacenado en el registro de índice. Cualquier operando en el arreglo puede accesarse con la misma
instrucción 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
implícita este registro participa cuando se utiliza una instrucción de modo índice. En los ordenadores con muchos registros
de procesador, cualquiera de los registros de la CPU pueden contener el número de índice. En tal caso, el registro debe
estar especificado en forma explicita en un campo de registro dentro del formato de instrucción.
En este modo, el contenido de un registro base se suma a la parte de dirección de la instrucción para obtener la
dirección efectiva. Esto es similar al modo de direccionamiento 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 número de índice que se relaciona con la
parte de dirección de la instrucción. Se considera que un registro base contiene una dirección base y que el campo de
dirección de la instrucción proporciona un desplazamiento en relacion con esta dirección base. El modo de
direccionamiento 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
multiprogramación, los valores de dirección de las instrucciones deben reflejar este cambio de posición. Con un registro
base los valores de desplazamiento de las instrucciones 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 práctica sencilla buscando que el alumno de un primer paso hacia el conocimiento del lenguaje
ENSAMBLADOR. Las instrucciones en ENSAMBLADOR se basan en nemotécnicos, los cuales permiten estructurar la
lógica que el programador desea implementar.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 21 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV AX,00
MOV BX,8
MOV DI,2
MOV AL,Variable1[BX][DI] ; AL = 3
MOV BX,2
MOV SI,14
MOV AX,Lista[BX][SI] ; AX = 90 AX = 05A
RET
RegistroBaseIndexado ENDP
Codigo ENDS
END RegistroBaseIndexado
INTRODUCCIÓN:
El código fuente es un texto escrito generalmente por una persona que se utiliza como base para generar otro
código con un compilador o intérprete para ser ejecutado por una ordenador.
Normalmente se refiere a la programación de software. Un único programador o un equipo de ellos escriben el
código fuente en el lenguaje de programación elegido. Posteriormente en un proceso de compilación el código fuente se
traduce en código objeto.
A diferencia del código objeto, el código fuente es texto simple, capaz de ser leído por cualquier editor de textos y lo que
es más importante, entendible por cualquier programador. En él están escritas las instrucciones que deberá realizar la
ordenador, según la sintaxis de un lenguaje de programación. Tener el código fuente es vital si se necesita modificar un
programa.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 22 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
El término de código fuente también se usa para el código 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.
=============================================================================================
Sistema Opertivo WIndows:
A:\MASM>Masm Programa; A:\TASM>Tasm Programa Para compilar generando un .OBJ
A:\MASM>Link Programa A:\TASM>Tlink Programa Para ligar generando un .EXE
A:\MASM>Programa A:\TASM>Programa Para ejecutar
A:\TASM>TD Programa Para depurar o debuger, siempre y cuando
para compilar se haya utilizado Tasm /zi Programa
y al ligar Tlink /v programa
===================================================
C:\masm32\bin\ml /c /coff /nologo Programa.asm /c Ensamblar si ligar /coff Archivo de código 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 ejecución WINDOWS o CONSOLE
/MERGE con quien se unirá el programa
Desensamblado de código máquina:
ndisasm -b {16|32|64} NombreDeArchivo
Desensamblando un .com
ndisasm -o100h NombreDeArchivo.com
Compilando y ligando para convertir de asm a com
nasm -f bin program.asm -o program.com
=============================================================================================
Sistema Operativo Linix:
#nasm –f elf programa.asm Compilar
#ld -s -c programa programa.o Ligar
#./programa Ejecutar
Los ficheros de código fuente llevarán la extensión *.ASM Los ficheros de listado llevarán la extensión *.LST
Los ficheros de código objeto llevarán la extensión *.OB] Los ficheros de errores llevarán la extensión *.ERR
Los ficheros ejecutables en formato Intel Hex llevarán la extensión *.HEX Comentario descriptivo del programa (utilizar una cabecera estandarizada).
Definir el microcontrolador que se usará (con las directivas LIST e INCLUDE). Introducir las opciones de compilación (que serán vistas más adelante) (opcional).
Establecer las constantes que se usarán (con la directiva EQU). Reservar espacios de memoria (directiva RES) (si es necesario).
Configurar los puertos. Desarrollar el programa con comentarios, en lo posible explicando cada línea de código..
Los mnemónicos escritos en minúscula y las constantes y variables en mayúscula hacen que el código escrito sea más visible.
Colocar las rutinas en el mismo sitio, todas contiguas. Dibujar diagramas de flujo o escribir seudocódigo.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA SUBTEMAS
2.2 Formato de un programa
;Instituto Tecnológico de Ciudad Victoria
;Departamento de Sistemas y Computación
;Autor: José Regino Infante Ventura
;Fecha de creación: Mayo del 2005
;PR2_2.ASM
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 23 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
INTRODUCCIÓN:
Es posible usar las directivas para programar en cualquier procesador y con cualquier versión 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 Sección para la definición de datos, .CODE
Sección para la incorporación del código, .STACK Seccion para la definición de la pila, .IF .ELSE .ENDIF .ELSEIF
Estatuto de decisión, .WHILE .ENDW Estatuto de repetición Mientras, .BREAK Suspende la ejecución de un bloque de
código y se va hasta el final del mismo,
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 24 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 25 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
;;========================================================== ;;==========================================================
;; Ejemplo de programación con SECCIONES que despliega una cadena en modo ;; Ejemplo de programación con SECCIONES que despliega una cadena en modo
;; texto. El principio de una nueva sección termina la anterior. ;; texto. El principio de una nueva sección termina la anterior.
;; Microcontrolador µC Intel 8051 ;; Micro controlador Microchip PIC16F84
;; Instituto Tecnológico de Cd. Victoria ;; Instituto Tecnológico de Cd. Victoria
;; Sistemas y Computación ;; Sistemas y Computación
;; José Regino Infante Ventura Agosto 2013 ;; José Regino Infante Ventura Agosto 2013
;;http://es.wikipedia.org/wiki/Lenguaje_ensamblador ;;http://es.wikipedia.org/wiki/Lenguaje_ensamblador
;;========================================================== ;;==========================================================
ORG 8030H ;Directiva ORG permite especificar la dirección en donde debe ser cargado inicialmente el ORG 0 ;Directiva ORG permite especificar la dirección en donde debe ser cargado inicialmente el
programa al ejecutarse. programa al ejecutarse.
include Inicio
T05SEG: bsf STATUS,RP0
SETB TR0 clrf PORTB
JNB uSEG,T05SEG ;Salta si el bit implicado no vale 1 a T05SEG movlw 0xFF
CLR TR0 ;para realizar una cuenta de movwf PORTA
CPL uSEG ;0,5 segundos mediante la bcf STATUS,RP0
MOV R1,DPL ;interrupción del timer 0. Principal
INVOKE movf PORTA,W
MOV R2,DPH movwf Contador
CJNE R2,#07H,T05SEG movf Contador,F
CJNE R1,#78H,T05SEG btfsc STATUS,Z
MOV DPTR,#0 goto PuntoDecimal
RET sublw d'9'
btfss STATUS,C
END
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 26 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Descompilador: es un programa que acepta como entrada código máquina y lo traduce a un lenguaje de alto nivel,
realizando el proceso inverso a la compilación.
Compiladores para procesadores CISC “Intel y compatibles” , tambien referenciados como x86:
Turbo Assembler (TASM), Microsoft Macro Assembler (MASM),
nasm (netwide assembler) para sistemas operativos DOS,WIN32 y LINUX http://nasm.us/
2.2 Ciclos numéricos
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 27 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PUSH DS ;Introduce la dirección del segmento de datos del programa que llama a éste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos ;Asignar la dirección de los datos del programa en AX
MOV DS, AX ;Copiar la dirección de AX al registro de segmento de datos DS
LEA DX, Variable1 ; Tomar la dirección efectiva de Variable1 en DX
LEA DI, Variable2 ; Tomar la dirección efectiva de Variable2 en DI
RET
DefiniciónDeString ENDP ;Fin del procedimiento principal
Codigo ENDS ;Fin del segmento de código
END DefiniciónDeString ;Fin del programa
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 28 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
@@:
push MB_OK
push offset szDlgTitle
push offset szMsg
push 0
call MessageBox
push 0
call ExitProcess
end Principal ;Fin del programa
INTRODUCCIÓN:
CMP Comparación entre dos operandos, restándolos, lo cual afecta los señalizadores, pero no su contenido.
Afectando los señalizadores OF,SF,ZF,AF,PF,CF.
TEST Permite efectuar una comparación lógica, haciendo uso de la intrucciòn AND lógica de bit a bit en los dos
operandos. Afectando los siguientes señalizadores: OF =0, CF=0, SF, ZF, PF.
Después 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
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 29 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
TEST AX,BX ; Comparación lógica, haciendo uso de AND bit a bit en los dos operandos
JNE Fin
Fin: RET
ComparaciónYPrueba ENDP
Codigo ENDS
END ComparaciónYPrueba
2.5 Saltos
PRÁCTICA No. 24
NOMBRE: Saltos condicionales
OBJETIVO:
Que el alumno:
- Hará uso de las instrucciones que le permitirán efectuar saltos dentro del mismo programa.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Una introducción de salto se reduce a cambiar el contenido de IP y, eventualmente el de CS.
Principalmente, existen dos tipos de instrucciones de salto: aquellas que especifican la dirección de salto inmediato
después del código de operación, es decir, especifican la etiqueta a la que hay que saltar (denominados saltos directos), y
aquellas que espe cifican una dirección de memoria de la que hay que recoger la dirección a la que saltar (denominadas
saltos indirectos).
Los bytes que componen una instrucción de salto directo incluyen en el cód. la operación algunos bytes que
especifican la dirección a la que se debe producir el salto.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 30 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Saltos incondicionales:
Pero existen varios formatos posibles para la instrucciones de salto directo. El primero se denomina SHORT JUMP
(salto corto), y el único dato que incluye la instrucción después del cód. de ope ración es un byte, que representa en
complemento a dos el valor a añadir a IP para seguir la ejecución. 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 repre senta 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 ejecución de una instrucción, veremos que el
desplazamiento se suma a IP después de haber incrementado éste. Por tanto, el des plazamiento se toma desde la
dirección de comienzo de la siguiente instrucción al salto, y no desde la propia instrucción de salto.
El siguiente formato de salto directo es el NEAR JUMP o salto cercano. Este formato, la instrucción incluye dos bytes
que forman la palabra a sumar a IP, también en complemento a dos. Así, el rango de salto está entre -32768 y +32768
bytes (65535 bytes), que efec tivamente permiten un salto a cualquier punto del segmento donde reside la instrucción de
salto (en este formato CS tampoco es al terado 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 denominación se debe a que éste formato de salto,
cambia tan to CS como IP, pudiendo saltar a cualquier punto del megabyte direcciónable (2 elevado a 20). En éste formato
de salto, la ins trucción lleva dos palabras con el desplazamiento y el segmento de la dirección 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
instrucción, sin tener en cuenta el contenido previo de ambos.
Existen dos formatos de instrucciones de indirecto: el primero, denominado NEAR JUMP o salto cercano, lee una
palabra de la direc ción de memoria especificada y carga el registro IP con ésta. Así, se puede saltar a cualquier punto del
segmento donde resida la instrucción de salto. El otro tipo se denomina FAR JUMP o salto lejano, y toma de la dirección
especificada dos palabras, la pri mera 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 direcciónable con un salto indirecto.
JMP: El formato de la instrucción es JMP dirección. Provoca un salto incondicional, por lo que se utiliza para seguir la
ejecución del programa en otro punto, que puede ser espe cificando una etiqueta (salto directo) o
especificando una dirección (salto indirecto). Cuando incluimos instrucciones de salto en el programa,
indicamos la dirección 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
instrucción 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 gene ra un salto corto, en caso contrario, se genera un salto
cercano.
Saltos condicionales:
Para los siguiente saltos, vamos a tener en cuenta signi ficados de palabras inglesas que nos van a ayudar a defi nir el
tipo de salto a realizar:
(Equal=igual, Not=no, Greater=mayor, Less=menor, Abo ve=superior, Be low=inferior, Carry=acarreo, Zero=cero,
Over flow=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 con sidera el signo.
Ejemplo:
CMP ax, bx ; Comparamos AX con BX.
JAE etiqueta ; Bifurca a ETIQUETA si AX> o =BX ; (sin considerar el signo).
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 31 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
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 número 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 desborda miento 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 sig no.
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.
Ejemplo:
CMP ax, bx
JLE etiqueta ; Bifurca a ETIQUETA si AX es < o = BX ; (considerando el signo).
ETIQUETA:
JO:(Salto si desbordamiento). Formato es: JO etiqueta. Salta a la etiqueta si el flag de desbordamiento está a uno
(OF=1 ).
Ejemplo:
ADD ax, bx ; AX=AX+BX
JO etiqueta ; Bifurca a ETIQUETA si hay desbordamiento ; (Overflow).
ETIQUETA:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 32 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
JNO: (Salto si no desbordamiento). El formato es: JNO etiqueta. Salta a la etiqueta si el flag de desbordamiento está a
cero (OF=0).
Ejemplo:
ADD al, bl ; AL=AL+BL
JNO etiqueta ; Bifurca a ETIQUETA si no hay desbordamiento ; (No overflow).
ETIQUETA:
JS: (Salto si signo). El formato es: JS etiqueta. Salta a la etiqueta si el flag de signo está a uno (SF=1).
Ejemplo:
SUB ax, bx ; AX=AX-BX
JS etiqueta ; Bifurca a ETIQUETA si signo, es decir, AX < 0 ; (en este caso, si AX es menor que BX).
ETIQUETA:
JNS: (Salto si no signo / si el signo es positivo). El formato es: JNS etiqueta. Salta a la etiqueta si el flag de signo está a
cero (SF=0).
Ejemplo:
SUB ax, bx ; AX=AX-BX
JNS etiqueta ; Bifurca a ETIQUETA si no signo, es decir, AX > o = que BX ; (en este caso, si AX es mayor o
igual que BX).
ETIQUETA:
JP: (Salto si paridad). Es equivalente a JPE (salto sin paridad par). El formato es: JP etiqueta. Salta a la etiqueta si el flag
de paridad está a uno (PF=1).
Ejemplo:
AND ax, bx ; AX=AX AND BX
JP etiqueta ; Bifurca a ETIQUETA si paridad par, es decir ; si el número de "unos (1)" que hay en AX es par.
ETIQUETA:
JNP: (Salto si no paridad). Es equivalente a JPO (salto sin paridad impar). El formato es: JNP etiqueta. Salta a la etiqueta
si el flag de paridad está a cero PF=0).
Ejemplo:
AND ax, bx ; AX=AX AND BX
JNP etiqueta ; Bifurca a ETIQUETA si paridad impar, es decir ; si el número de "unos (1)" que hay en AX
es impar.
ETIQUETA:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 33 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV AX,00
MOV BX,10
INICIO: INC AX ; Incrementa en una unidad el contenido de AX
DEC BX ; Decrementa en una unidad el contenido de BX
CMP AX,BX ; Compara el contenido de AX con el de BX
JE FIN ; Si los contenidos comparados son iguales salta al FIN SALTO CONDICIONADO
JMP INICIO ; Siempre que llegue a este punto salta al INICIO SALTO INCONDICIONAL
FIN: RET
Saltos ENDP
Codigo ENDS
END Saltos
INTRODUCCIÓN:
LOOP: Esta instrucción permite realizar "bucles" utilizando el registro CX como contador (CX en un contador que
va de crementándose). Un bucle es un conjunto de instrucciones que se ejecutan una serie de veces.
Esta instrucción equivale al par: DEC CX // JNZ etiqueta. El formato es: LOOP etiqueta.
LOOPE: Esta instrucción al igual que LOOP, permite realizar "bucles" utilizando el registro CX como contador (CX
en un contador que va decrementándose) pero además el flag de cero debe estar a uno (ZF=1). Es
equivalente a LOOPZ (Bucle si cero). Esta instrucción equivale al par: JNE FIN // LOOP OTRO. El
formato es: LOOPE etiqueta.
LOOPNE: Esta instrucción al igual que LOOP, permite realizar "bucles" utilizando el registro CX como contador (CX
en un contador que va decrementándose) pero además el flag de cero debe estar a cero (ZF=0). Es
equivalente a LOOP NZ (Bucle si no cero). Esta instrucción equivale al par: JE FIN // LOOP OTRO. El
formato es: LOOPNE etiqueta.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 34 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV BL,00 ;Asegurar que BL tenga cero, para usalo 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í estarían las instrucciones que están 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
instruccionesDeCiclos ENDP
Codigo ENDS
END instruccionesDeCiclos
INTRODUCCIÓN:
Operaciones aritméticas sin signo.
ADD Suma dos operandos, almacenando el resultado en el destino; Señalizadores afectados
AF,CF,OF,PF,SF,ZF.
SUB Resta el contenido del operando fuente al destino, dejando el resultado en el destino; señalizadores
afectados OF,SF,ZF,PF,AF,CF.
MUL Multiplica el contenido del operando fuente por el contenido de AL o AX, según 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. Señalizadores afectados SF,OF,ZF,AF,PF.
DEC Decrementa en una unidad el contenido del operando especificado, pudiendo ser un registro, mitad o una
variable. Señalizadores afectados SF,OF,ZF,AF,PF.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 35 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV AL,Variable1
MOV BL,Variable2
INC AL ; Incrementa en una unidad el contenido de AL
DEC BL ; Decrementa en una unidad el contenido de BL
ADD AL,Variable2 ; Suma el contenido de Variable2 al de AL, dejando el resultado en AL
SUB AL,Variable2
MOV AX, Variable3
MUL Variable2 ; Multiplica el contenido de AX por el contenido de Variable2, dejando el resultado en
AX
RET
AritmeticaBinaria ENDP
Codigo ENDS
END AritmeticaBinaria
PRÁCTICA No. 21
NOMBRE: Aritmética empacada
OBJETIVO:
Que el alumno:
- Podrá apreciar y experimentar con las instrucciones que se pueden efectuar antes o después de las operaciones
aritméticas.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Ajuste a ASCII el contenido de AL después de:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 36 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
AAA La suma, convirtiendo el contenido de AL en un dígito decimal sin empacar, es decir un número entre el 0 y
el 9.
AAS La sustracción, convirtiendo el contenido de AL en un dígito decimal sin empacar, es decir un número entre
el 0 y el 9.
AAM La multiplicación, convirtiendo el contenido de AL en un dígito decimal sin empacar, es decir un número
entre el 0 y el 9.
AAD La división, convirtiendo el contenido de AL en un dígito decimal sin empacar, es decir un número entre el 0
y el 9.
INTRODUCCIÓN:
La estructura de una PILA es similar a un montón de libros api lados: los elementos se van ordenando cada uno detrás
del último en llegar (es decir, los libros se van apilando cada uno encima del anterior), pero al sacarlos de la estructura se
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 37 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
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 operación de introducir un elemento en una pila se le suele dar el nombre de empujar un elemento (PUSH en
inglés). La operación 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 uni dades; 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 dirección 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 continua
ción almacena en la cima de la pila la palabra especif icada en el operando origen asociado a la instrucción.
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 instrucción toma una palabra de la cima de la pila y la sitúen el operando destino asociado a la instrucción,
incrementando, a continuación, 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 instrucción PUSH o POP se ejecuta en un código de programa con el tamaño de registro de 32 bits,
el ensamblador utiliza como valor de transferecencia 4 bytes en lugar de 2 bytes (una palabra), y las
operaciones realiza das con ESP se efectúan sobre unidades de 4 elementos.
PUSHF: Esta instrucción decrementa en 2 unidades el puntero de la pila y a continuación, almacena en la cima de la pila
el registro de indicadores (FLAGS). No tiene ningún operando.
POPF: Esta instrucción almacena en el registro de indicadores (FLAGS) la palabra situada en la cima de la pila aumen
tando en 2 unidades, a continuación, el puntero de la pila. No tiene ningún operando.
PUSHA y POPA: Estas instruciones almacenan y sacan de la pila la información 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 que el
primer registro sea guardado. En el caso de utilizar registros de 32 bits la instrucciones serían: PUSHAD y
POPAD.
Todo lo que entra en la pila, tiene que salir de la pi la, 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
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 38 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Variable1 DB 5
Variable2 DD ?
Variable3 DD 10,20,30,40,50
Datos ENDS
Codigo SEGMENT PARA 'Codigo'
instruccionesParaElStack PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS ;Introduce la dirección del segmento de datos del programa que llama a éste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
RET
instruccionesParaElStack ENDP
Codigo ENDS
END instruccionesParaElStack
INTRODUCCIÓN:
Einstrucciones Lógicas: NEG, NOT, AND, OR, XOR
Datos de Compuerta Datos de
NEG: Esta instrucción calcula el complemento a dos entrada lógica salida
del operando, y lo almacena en el mismo
lugar. Esto es, efectivamente, equivalente a
cambiar de signo el ope rando de la
instrucción.
MOV AX, 4 ; Mover un cuatro al registro AX.
NEG AX ; Se haya el complemento a 2 de AX y se guarda en AX (AX = - 4).
NEG BYTE PTR ES:[BX+SI+2] ; Se haya el complemento a 2 de la posición de memoria (dentro del Segmento
Extra) indicada por el
; de "BX+S I+2"
NOT: Se realiza el NOT lógico del operando bit a bit. El NOT consiste en invertir cada bit del operan do (pasar los 0 a 1
y los 1 a 0; 10100 01011)
Tabla de verdad
E S
0 1 S=E
1 0
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 39 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
AND: Operación "y lógico" a nivel de bit entre los dos operan dos. El resultado se almacena en el destino.
Formato AND destino, fuente.
Permite apagar un bit o asegurarnos que se encuentra apagado en la posición que lo agreguemos en el
operando fuente.
Tabla de verdad
E1 E2 S
0 0 0
0 1 0 S = E1 * E2
1 0 0
1 1 1
OR:Operación "o lógico exclusivo" a nivel entre los dos operan dos. El resultado se almacena en el destino.
Formato OR destino, fuente.
Permite encender un bit o asegurarnos que se encuentra encendido en la posición que lo agreguemos en el
operando fuente.
Tabla de verdad
E1 E2 S
0 0 0
0 1 1
1 0 1
1 1 1
OR AL, AH ; Las mismas operaciones que con AND pero utilizando el OR.
OR [DI], CH
OR CL, [BP+4]
OR BYTE PTR ES:[SI], 1
XOR: Operación "o lógico 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
0 1 1 S = E1 * E2 + E1 * E2
1 0 1
1 1 0
XOR AX, AX ; El XOR entre dos bits con el mismo valor es siempre 0, independientemente del valor previo de
AX (AX=0).
; Las ventajas de hacerlo así son dos: la ejecución de XOR reg, reg es más rápida que la de MOV
reg, o que la de MOV ax,0 , y la codificación de la ; primera ocupa menos bytes que la
;segunda; Esta técnica no puede utilizarse para poner a cero los registros de segmento.
XOR BYTE PTR[55AAh], 4
XOR AL, 00AAh
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 40 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
RET
instruccionesLogicas ENDP
Codigo ENDS
END instruccionesLogicas
INTRODUCCIÓN:
RCL (rotación a la izquierda con acarreo)
Sintaxis: RCL destino, contador
Rotar a la izquierda los bits del operando destino junto con el indicador de acarreo CF el número de bits
especificado en el segundo operando. Si el número 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 AX,1
RCL AL,CL
RCL DI,1
Rotar a la derecha los bits del operando destino junto con el indicador de acarreo CF el número de bits
especificado en el segundo operando. Si el número de bits es uno se puede especificar directamente; en caso contrario su
valor debe cargarse en CL y especificar CL como segundo operando:
RCR BX,CL
RCR BX,1
ROL DX,CL
ROL AH,1
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 42 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Codigo ENDS
END RotacionYDesplazamiento
PRÁCTICA No. 28
NOMBRE: Desplazamiento líneal
OBJETIVO:
Que el alumno:
- Pondrá en práctica y apreciará el efecto de los desplazamientos líneales.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
SAL,SHL,SAR,SHR
SAL/SHL (desplazamiento aritmético a la izquierda) Sintaxis: SAL/SHL destino, contador
Desplaza a la izquierda los bits del operando el número de bits especificado en el segundo operando que debe
ser CL si es mayor
que uno los bits
desplazados.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 43 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
3.- Modularización
3.1 Procedimientos
PRÁCTICA No. 43
NOMBRE: Definición de procedimientos internos
OBJETIVO:
Que el alumno:
- Experimentará definiendo procedimientos internos.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Los procedimientos son secciones de código que se ejecutan desde varios lugares en un programa mediante llamadas
a ellos. Cada vez que se llama a un procedimiento se ejecuta las instrucciones que forman ese procedimiento, y después
se devuelve el control al programa que llamó o programa principal.
Una declaración de procedimiento comienza y termina con el par de directivas PROC y ENDP e incluye bien una opción
NEAR o FAR. Estos atributos informan al ensamblador de que tipo de bifurcación o instrucción de llamada generan
cuando van a esa posición particular .
La instrucción CALL sirve para llamar a procedimiento. Esta guarda dirección instrucción siguiente, transfiere control.
La instrucción CALL hace que la dirección de la siguiente instrucción se almacene en pila; entonces el control del
programa se transfiere al operando parámetro. Cuando se completa el procedimiento llamado, continua la ejecución del
programa que llamo en la instrucción que sigue a la instrucción CALL
Sintaxis: CALL parámetro_ operando.
Señalizadores afectados: Ninguno (excepto cuando se presenta una conmutación de tarea).
CALL Cercana: Esta instrucción tiene 3 bytes de longitud; el primer byte contiene el código y el segundo y tercero
contienen el desplazamiento o distancia. Cuando se ejecuta un CALL cercano, primero salva en la pila la dirección de
desplazamiento de la siguiente instrucción.
Esa dirección está en el apuntador de instrucciones (IP o EIP). ¿por qué salvar IP o EIP en la pila?. El apuntador de
instrucciones siempre apunta a la siguiente instrucción en el programa. Para la instrucción CALL, se salva el contenido de
IP o EIP dentro de la pila, con lo cual el control del programa pasa a la instrucción que sigue al CALL después de que
termina un procedimiento.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 44 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
CALL Lejana: Esta instrucción puede llamar a un procedimiento almacenado en cualquier localidad de la memoria en el
sistema. La instrucción CALL lejana tiene 5 bytes y tiene un código de operación 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 instrucción Call lejana salva el contenido de IP y CS en la pila antes de brincar a la dirección indicada por los bytes 2
a 5 de la instrucción. Esto permite que la Call lejana llame a un procedimiento ubicado en cualquier lugar en la memoria y
que retome desde el procedimiento.
Instrucción Call con operandos registros: Las instrucciones Call, al igual que las JMP pueden contener un operando
registro y un ejemplo es la instrucción Call BX. Esta instrucción salva el contenido de IP dentro de la pila. Después, brinca
a la dirección de desplazamiento de 16 bits almacenada en cualquier registro de 16 bits, excepto los registros de
segmento.
La instrucción Call también puede referenciar apuntadores lejanos si la instrucción aparece como CALL FAR PTR [SI].
Esta instrucción recupera una dirección de 32 bits en la memoria del segmento de datos direcciónada por SI y la utiliza
como dirección para un procedimiento lejano.
Los Procedimientos pueden ser considerados como NEAR (intrasegmento) o FAR (intersegmento). Estos atributos en
un procedimiento ayudan al microprocesador a determinar el tipo de instrucción CALL a generar cuando el procedimiento
es requerido. También deben ser establecido un camino para la vuelta desde el procedimiento. Este camino de
instrucciones 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 Definiciòn de procedimientos 6.2 Paso de 6.3 Instrucción para llamada 6.4 Procedimientos
parámetros internos
PRÁCTICA No. 44
NOMBRE: Definición de procedimientos externos
OBJETIVO:
Que el alumno:
- Experimentará definiendo procedimientos externos.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Los procedimientos externos se ubican en un segmento de códico de programa independiente al principal,
llamándosele a estos biblioteca de procedimientos, los cuales pueden estar organizados, tomando en cuenta sus
capacidades o área de aplicación. 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 operación PUBLIC.
En el programa principal se especificará que se trata de procedimientos externos, mediante la pseudo operación
EXTRN y los llamados a cada procedimiento sera através de la pseudo operación CALL.
La pseudo operación EXTRN identifica símbolos 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,DWORD,QWORD,DQWORD oTBYTE para las variables.
La pseudo operación PUBLIC permite especificar los procedimientos o variables que se ponen a disposición de
otros programas que se enlazarán a éste. Sintaxis PUBLIC Nombre1,Nombre2
Cuando se especifiquen más de uno deberán ser separados por una coma en ambos casos.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 46 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Despliega PROC FAR ;Procedimiento para desplegar una cadena ubicada en la variable cadena
MOV AH,9
LEA DX,Cadena
INT 21H
RET
Despliega ENDP
Codigo ENDS
END
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 47 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
3.2 Macros
PRÁCTICA No. 41
NOMBRE: Definición de macros internas
OBJETIVO:
Que el alumno:
- Experimentará con la definición de macros internas.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Las macros son una forma de subprogramación al igual que los procedimientos, con la diferencia que éstas en
cada punto en donde son llamadas durante el proceso de compilación, se incorpora el código 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 ejecución es más rápida que un procedimiento, pero el código objeto
generado es de mayor tamaño, para llamarlas sólo basta con usar su nombre y de existir parámetros, estos deberán ser
separados por al menos un blanco, cuando son definidas las macros con parámetros, cada uno es separados por una
coma entre ellos, todas las etiquetas usadas dentro de una macro deberán 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 lógica del programa que las llama.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 48 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
WRITE MACRO Msg ;Escribe el contenido de Msg que llega como parámetro
PUSH AX
PUSH DX
MOV AH,9
LEA DX,Msg
INT 21H
POP DX
POP AX
ENDM
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 49 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PRÁCTICA No. 42
NOMBRE: Definición de macros externas
OBJETIVO:
Que el alumno:
- Experimentará con la definición de macros externas.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Se les llama macros externas, debido a que el código 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 compilación para incorporar el código de las macros en el achivo que las
usará: #INCLUDE NoArMa.INC Lo cual significa Nombre Del Archivo de Macros y es opcional la extención 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
compilación.
Para el usuario la compilación, ligado y ejecución; seran idénticas a haber utillizado macros internas o externas;
pero en el momento de la compilación se tardará unas fracciones de tiempo más al usar las macros externas y es
resultado de la búsqueda e incorporación del archivo de macros en el programa que las usará.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 50 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PUSH CX
PUSH DX
MOV AH,6 ;Función Enrolla pantalla activa hacia arriba
MOV AL,0 ;Número de líneas, 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 ;Interrupción de video
POP DX ;Extraer contenido de los registros de la pila
POP CX
POP BX
POP AX
ENDM ;Fin de la macro ClrScr
WRITE MACRO Msg ;Escribe el contenido de Msg que llega como parámetro
PUSH AX
PUSH DX
MOV AH,9
LEA DX,Msg
INT 21H
POP DX
POP AX
ENDM
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 51 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
INTRODUCCIÓN:
Cualquier versión del sistema operativo DOS o Windows, tiene disponible un comando externo llamado
DEBUG.EXE, localizado en WINDOWS\SYSTEM32 y podra ser usado dando doble clic sobre el o dentro de una ventana
del Símbolo 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 fácil de usar aunque también muy limitada, pero muy
práctica y no es sensible al context (No hace diferencia entre MAYÚSCULAS y minúsculas) y todos los números 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
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 52 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
q Salir
g Ejecutar lo anteriormente escrito
a Agregar código o Ensamblar a(Dirección) Agregar a partir de Dirección
Ejecutar el DEBUG dentro de una ventana del Símbolo del Sistema para alterar el contenido del Registro AX
Para alterar el modo de video teclear lo siguiente, sin los comentarios que describen su funcionamiento.
D:\Tasm>debug
-A100 Ensamblar a partir de la posición 100 de memoria
MOV AH,0 Función 0 Iniciar modo de video
MOV AL,0F Seleccionamos el modo de video 640 X 350 gráficos o 0D
INT 10 Ejecutar interrupción 10 hex
INT 20 Termina programa y retornar
-G Ejecutar
PRÁCTICA No. 38
NOMBRE: Manipulación del vídeo con interrupciones de BIOS
OBJETIVO:
Que el alumno:
- Podrá introducir y extraer datos de la memoria de vídeo, haciendo uso de interrupciones .
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
La pantalla es una malla de posiciones direcciónables, en donde puede ser posicionado el cursor o carácter, en la
memoria de vídeo y posteriormente es reflejada en el monitor, normalmente tiene 25 renglones y 80 columnas en modo
texto y en mòdo gráfico 800 columnas y 600 renglones en donde cada posición es un píxel, punto o “dot”. Para hacer
referencia a la esquina superior Izquierda es el renglón cero y columna cero.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 53 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Ordenador con sistema operativo DOS o posterior, con el MACRO y TURBO ASSEMBLER versión 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
ejecución del programa.
2. El maestro explicará la función de las instrucciones 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.
RET
InterrupcionesParaESDeStrings ENDP
Codigo ENDS
END InterrupcionesParaESDeStrings
INTRODUCCIÓN:
************************************ **************************** ************************************************************
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 54 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
TEMA SUBTEMAS
4.1 Definiciòn de interrupciones
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 55 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PRÁCTICA No. 37
NOMBRE: Manipulación del disco con interrupciones de BIOS
OBJETIVO:
Que el alumno:
- Podrá leer y escribir uno o más sectores en el disco.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
La interrupción 17H del BIOS permite leer, escribir, formatear y verificar el estado de los discos. El uso de esta
interrupción puede ocasionar el deterioro de los datos del disco, cuando se especifica la función 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 mayorìa de las funciones de la interrupción 13H alteran la bandera de acarreo, si hubo un éxito o fracaso, regresando
el código de error en el registro AH. El BIOS mantiene en su área de datos información 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 operación sobre el disco regresa un error, este podrá ser restablecido con la función 00H y se podrá reintentar la
operación nuevamente. Si el error persiste se deberá mostrar un mensaje de error en donde se especifique el problema y
la posible solución.
Código Estado Código 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 Cíclico Redundante (CRC)
controlador incorrecta
02H Marca de dirección en disco no encontrada 20H Fallo del controlador (Hardware)
03H Intento de escribir en un disco protegido 40H Fallo en operación de búsqueda (Hardware)
04H Pista/sector no válido 80H Fallo en el dispositivo al responder (Tiempo
excedido, no
05H Fallo en la operación de restablecer Existe disco, puerta abierta)
06H Se retirò el disco flexible desde el ùltimo 0AAH Unidad no preparada
acceso
07H Parámetros de la unidadd erroneos 0BBH Error no definido
08H Acceso directo a memoria (DMA) rebasado 0CCH Fallo al escribir
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 56 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
;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'
ManipulacionDico PROC FAR
ASSUME CS:Codigo, DS:Datos, SS:Pila
PUSH DS ;Introduce la dirección 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,2 ; Función para leer uno o más sectores del disco
MOV AL,1 ; Cantidad de sectores (1...)
MOV CH,0 ; Número de la PISTA, en este caso es la CERO (0...)
MOV CL,1 ; Número de la SECTOR, en este caso es la UNO (1...)
MOV DH,0 ; Número de la CARA, en este caso es la CERO ( 0 ...)
MOV DL,0 ; Número de la UNIDAD, en este caso es la CERO (0 Defecto, 1 A, 2 B, 3 C)
LEA BX,Variable1 ; Dirección donde se dejaran los datos leidos,
; dejando en AH el resultado de la operación y en AL la cantidad de sectores leidos
INT 13H ; interrupción de BIOS para manipular medios de almacenamiento secundarios
(Discos)
RET
ManipulacionDico ENDP
Codigo ENDS
END ManipulacionDico
INTRODUCCIÓN:
El lenguaje de programación Pascal es posible provocar interrupciones, haciendo uso de la librería DOS, en la
cual se encuentran diferentes procedimientos que se pueden consultar desde la ayuda, en esta práctica se usa el intr. y
los registros de 8 y 16 bits; el pascal es ejecutado desde una ventana con el símbolo del sistema.
Declaración: procedimiento Intr(IntNo: Octeto; var Regs: TRegisters); donde: - IntNo es el número de la
interrupción del software (0... 255). - TRegisters es un procedimiento definido en la libreria DOS.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 57 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
TEMA SUBTEMAS
7.1Pascal y ensamblador
PRÁCTICA No. 46
NOMBRE: Código Ensamblador inmerso en un programa en Pascal.
OBJETIVO:
Que el alumno:
- Incorporará código en ensamblador en un programa en Pascal o Delphi.
- Se familiarice con el ambiente de desarrollo en la que codificará, grabará, editará, compilará y ejecutará los
programas que se presentan en el manual.
INTRODUCCIÓN:
El lenguaje de programación Pascal, como tal ya no existe, ha evolucionado a el manejador de base de datos
llamado Delphi de Borland y es en él en donde se crea el ejemplo de programación a bajo nivel con codigo inmerso en
ensamblador, lo cual es parecido a haberlo hecho en Turbo pascal.
Los comentarios en una declaración del asm deben estar en el estilo de Delphi. Un punto y coma no indica que el resto de
la línea es un comentario
En general, las reglas del uso del registro en una declaración del ASM son iguales que las de un procedimiento o de una
función externo. Una declaración del asm debe preservar el EDI, ESI, los registros ESPECIALMENTE, de EBP, y de EBX,
pero puede modificar libremente los registros de EAX, de ECX, y de EDX. En entrada a una declaración del asm, EBP
señala al marco actual del apilado y señala ESPECIALMENTE a la tapa del apilado. A excepción de ESPECIALMENTE y
EBP, una declaración del asm no puede asumir nada sobre contenido del registro en entrada a la declaración
Usted puede escribir procedimientos y funciones completos usando código en línea del lenguaje ensamblador, sin incluir
una declaración del final del comenzar.... Por ejemplo,
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 58 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Los valores ordinales se regresan en AL(8 bits), AX (16 bits), o EAX (32 bits).
Los valores reales son regresados en el ST(0) e el registro de la pila del procesador. (Los valores actuales son
escalados por 10000.)
Apuntador a cadena largas regresado en EAX.
Cadena corta es regresado en un apuntador de localizaciòn temporal @Result.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 59 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
MOV @Result,EAX
END;
END;
FUNCTION LongMul(X, Y: Integer): Longint;
ASM
MOV EAX,X
IMUL Y (* Multiplica el contenido de Y por el de EAX*)
END;
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.
PRÁCTICA No. 47
NOMBRE: Programación a bajo nivel con lenguaje C
OBJETIVO:
Que el alumno:
- El alumno practicará, programando a bajo nivel en el lenguaje de programación 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.
INTRODUCCIÓN:
El lenguaje de programación C permite provocar interrupciones y asì poder tener un control de hardware y software, hasta
la versión 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
botón derecho del ratón, cuando el apuntador del mismo se encuentre sobre el programa ejecutable generado; en la
opciòn de propiedades.
Las interrupciones desde el lenguaje C o Ensamblador no pueden ser provocadas en versiones de Windows 2000 o
posteriores, al estar haciendo estos uso de la memoria protegida, que es permitida manejar desde procesadores 286.
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA SUBTEMAS
7.2 C Ensamblador
regs.h.ah = 6;
int86(0x10,®s,®s); /*Borrado de toda la pantalla haciendo uso de interrupcion diez de BIOS */
getchar();
clrscr(); /*Borrado de la pantalla haciendo uso de la función de C para ello */
getchar();
printf (msg2); /*Impresión con formato haciendo uso de la función de C */
getchar();
}
PRÁCTICA No. 48
NOMBRE: Código Ensamblador inmerso en lenguaje C
OBJETIVO:
Que el alumno:
- Incorporará código 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.
INTRODUCCIÓN:
El lenguaje C es sin duda el más apropiado para la programación de sistemas, pudiendo sustituir al ensamblador
en muchos casos. Sin embargo, hay ocasiones en que es necesario acceder a un nivel más bajo por razones de
operatividad e incluso de necesidad (programas residentes que economicen memoria, algoritmos rápidos para
operaciones críticas, 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
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 61 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
asm{ mov cx,0000 /* Block con código ensamblador para especificar los parámeros del borrado */
mov dx,0x2479 /*Renglon 24 Columna 79 */
mov bh,7 /*Atributo del carácter normal */
mov ah,6 /*Función para borrar hacia arriba */
mov al,0 /*Toda la pantalla */
}
int86(0x10,®s,®s); /*Borrado de pantalla con interrupción de BIOS desde C */
getchar();
asm{ mov ah,9
lea dx,msg2
int 0x21 /*Provocar la interrupción 21 desde ensamblador inmerso en el código C */
}
getchar();
printf (msg2);
getchar();
}
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 62 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PRÁCTICA No. 49
NOMBRE: Programación a bajo nivel con lenguaje Basic
OBJETIVO:
Que el alumno:
- El alumno practicará, programando a bajo nivel en el lenguaje de programación 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.
INTRODUCCIÓN:
El lenguaje BASIC
CORRELACION CON LOS TEMAS Y SUBTEMAS DEL PROGRAMA DE ESTUDIO VIGENTE:
TEMA SUBTEMAS
7.2 Basic Ensamblador
PRÁCTICA No. 1
NOMBRE: Introducción
OBJETIVO:
- Que el alumno ubique los elementos y dispositivos que se encuentran dentro de un gabinete.
INTRODUCCIÓN:
Los elementos que podemos encontrar dentro de un gabinete son los siguientes:
Fuente de poder
AT, ATX; con voltajes de 6, 12 y 3.3.
Estándares derivados de fuentes de alimentación ATX (SFX,TFX,WTX,AMD GES,EPS12V)
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 63 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Modulos de puertos
Los ordenadores personales actuales conservan prácticamente todos los puertos heredados desde que se
diseñó el primer PC de IBM. Por razones de compatibilidad aún se mantienen este tipo de puertos, pero
poco a poco irán apareciendo nuevas máquinas en las que no tengan los típicos conectores serie (DB9),
paralelo(DB25), teclado(DIN), Video, etc... y en su lugar sólo encontraremos puertos USB, RJ45, RJ11 e
Infrarrojo.
Pila
Su función es la de proporcionar la energia para mantener los datos de configuración del equipo.
Bios
AMI,Award, Phoenix, Equipo original.
Ranuras de expansión
EISA, MCA, ISA, PCI, AGP.
PRÁCTICA No. 8
NOMBRE: Manejo de memoria
OBJETIVO:
- Que el alumno haga uso de diferentes tamaños de memoria en un programa.
PRÁCTICA No. 19
NOMBRE: Transferencia de datos
OBJETIVO:
Que el alumno:
- Probará el funcionamiento de las instrucciones que le permitan mover, referenciar e intercambiar datos.
- Aprenda la sintaxis básica de un programa en ENSAMBLADOR y las palabras reservadas.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 64 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
- Se familiarice con el ambiente de desarrollo en la que codificará, grabará, editará, compilará y ejecutará los
programas que se presentan en el manual.
INTRODUCCIÓN:
LDS y LES Cargan el puntero de 4 bytes, localizados en la posición de memoria indicada por el segundo
operando, en un registro de segmento y uno de palabra. La primera palabra del señalizador (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 instrucciones para transferencia de datos
RET
TransferenciaDatos ENDP
Codigo ENDS
END TransferenciaDatos
PRÁCTICA No. 22
NOMBRE: Manipulación de banderas
OBJETIVO:
Que el alumno:
- Apagará y encenderá las banderas.
- Aprenda la sintaxis básica 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.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 65 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
INTRODUCCIÓN:
CLC borra el señalizador de arrastre.
La operación CLC pone el señalizador de arrastre a 0 . No están afectados ningún registro ni señalizador.
Sintaxis: CLC (no operando)
Señalizadores afectados: CF = 0
Señalizadores no definidos: Ninguno
CLD borra el señalizador de dirección.
CLD borra el señalizador de dirección, incrementa SI y DI. Ningún otro registro ni señalizador están
afectados. Después de que se ejecuta CLD, las operaciones de cadena incrementa automáticamente los
registro índice (SI y/o DI).
Sintaxis: CLD ( no operando)
Señalizadores afectados: DF
Señalizadores no definidos: Ninguna
CLI borra señalizador de interrupción (inhabilita interrupciones).
La instrucción CLI borra el señalizador de habilitación de interrupción. No es afectado ningún otro
señalizador.
Sintaxis: CLI ( no operando)
Señalizadores afectados: IF = 0
Señalizadores no defenidos: Ninguno
CMC complementa señalizador de arrastre. Esta instrucción cambia el valor del señalizador de arrastre. Si el
señalizador de arrastre esta a 1, se convierte en 0. Si esta a 0 se convierte en 1.
Sintaxis: CMC
Señalizador afectados: CF
Señalizador no definidos: Ninguno.
LAHF carga en AH los señalidadores. Esta instrucción carga SF, ZF, AF, PF, CF, ciertos bits del registro AH.
AH
SF ZF AF PF CF
Las posiciones de los bits1, 3 y 5 del registro AH están indefinidas.
SAHF almacena el contenido del registro AH en los señalizadores SF, ZF, xx, AF, xx, PF, xx, CF. Los valores del
registro AH se utilizan para cargar los señalizadores aquí listados desde los bits 7, 6, 4, 2 y 0, respectivamente.
Sintaxis: SAHF (no operando)
Señalizadores afectados: Ninguno
Señalizadores no definido: Ninguno
STC pone a 1 señalizador de arrastre.
Sintaxis: STC (no operandos)
Señalizadores afectados: CF = 1
Señalizadores no definidos: Ninguno
STD pone a 1 señalizador de dirección. La instrucción STD pone a 1 el señalizador DF. Esto hace que las
instrucciones de cadena posteriores decremente los registros SI y/o DI.
Sintaxis: STD (no operando)
Señalizadores afectados: Ninguno
Señalizadores no definidos: Ninguno
STI pone a 1 señalizador de habilitación de Interrupción. Esto permite que sean facilitadas las interrupciones
externas enmascarables después de la ejecución de la instrucción siguiente.
Sintaxis: STI (no operando)
Señalizadores afectados: CF = 1
Señalizadores no definidos: Ninguno.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 66 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PRÁCTICA No. 31
NOMBRE: Almacenamiento en memoria de cadenas
OBJETIVO:
Que el alumno:
- Guardará cadenas en memoria.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
STOS : Almacenar una cadena de caracteres.
STOS/ STOSB/ STOSW (80286/80386)
Almacena AL (byte) o AX (palabra) en ES: [DI]
La instrucción STOS transfiere el contenido del registro AL o del AX al byte de memoria o palabra de memoria
señalada por ES:DI. El operando destino debe ser direcciónable desdel registro ES, no se permite anulación 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
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 67 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
dirección de memoria siempre está sujeta a los registros ES:DI. Dependiendo de la bandera de dirección, STOS
incrementa o disminuye el registro DI en 1 para byte, 2 para palabra y 4 para palabra doble.
Un uso práctico de STOS con un prefijo REP es para iniciar el área de datos a cualquier valor específico, tal como
limpiar el área de despliegue a blancos. Puede establecer el número 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 instrucción
STOSW en vez de la instrucción STOSB. Además, también se utiliza el registro AX en vez del registro AL.
RET
DefiniciónDeString ENDP
Codigo ENDS
END DefiniciónDeString
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 68 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
PRÁCTICA No. 32
NOMBRE: Movimiento de cadenas
OBJETIVO:
Que el alumno:
- Hará uso de las instrucciones que le permitan efectuar movimientos a distintos lugares en la memoria.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
MOVS : Mover una cadena de caracteres.
MOVS / MOVSB / MOVSW ( 80286 / 80386)
Descripción : Desplaza byte / palabra DS:[SI] o ES:[DI]
Desplaza byte / palabra DS:[ESI] o ES:[EDI]
Las instrucciones MOV copian el byte o palabra en [SI] al operando destino byte o palabra en ES:[DI]. El operando
destino debe ser direcciónable desdel registro ES. Los segmentos anulados no son posibles para el operando
destino, pero el operando fuente puede utilizar un segmento anulado.
MOVS : Combina con un prefijo REP y una longitud en el CX puede mover cualquier número de caracteres donde
usted no codifica los operandos, la instrucción se parece a esto :
[ETIQUETA: ] REP MOVS [ ES : DI, DS :SI]
Para la cadena receptora, los registros segmento: desplazamiento son ES:DI; para la cadena emisora los registros
Segmento: desplazamiento son DS:SI, como resultado al inicio de un programa .EXE inicia el registro ES junto con
el registro DS, y antes de ejecutar el MOVS, utilice LEA para iniciar los registros DI y SI.
Dependiendo de la bandera de dirección, MOVS incrementa o disminuye los registros DI y SI en 1 para un byte, en
2 para una palabra y en 4 para palabra doble.
SINTAXIS : MOVS cadena destino, cadena_ fuente
MOVSB (transfiere un byte) con prefijo de repetición REP, es ideal para esta tarea como se ilustra en el siguiente
programa :
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 69 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Variable1 DW 5
Variable2 DB "Sistemas e Informatica$"
Variable3 DB "Departamento$"
Datos ENDS
Codigo SEGMENT PARA 'Codigo'
instruccionesParaManipulacion PROC FAR
ASSUME CS:Codigo, DS:Datos, ES:Datos, SS:Pila
PUSH DS ;Introduce la dirección del segmento de datos del programa que llama a éste en la pila
MOV AX,00
PUSH AX
MOV AX, Datos
MOV DS, AX
;===========================
MOV CX, Variable1 ; Num De byte/palabras
LEA DI, Variable2 ; Dirección de Variable2
LEA SI, Variable3 ; Dirección de Variable3
CLD ; borrar dirección
REP MOVS Variable2, Variable3
;===========================
;Empleo de la instrucción MOVSB
LEA DI, Variable2 ; direcciónar Variable2
LEA SI, Variable3 ; direcciónar Variable3
CLD ; borrar dirección
MOV CX,5 ; cargar contador
REP MOVSB ; transferir 5 bytes
;===========================
RET
instruccionesParaManipulacion ENDP
Codigo ENDS
END instruccionesParaManipulacion
PRÁCTICA No. 33
NOMBRE: Comparación entre cadenas
OBJETIVO:
Que el alumno:
- Hará uso de las instrucciones que le permitirán efectuar comparaciones entre cadenas.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
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 (direcciónada por DS:SI) con la que otra localidad de
memoria (direcciónada por ES:SI) dependiendo de la bandera de dirección, CMPS disminuye también los registros
SI y DI en 1 para bytes, 2 para palabras y cuatro para palabras dobles.
Proporciona una comparación alfanumérica, una comparación de acuerdo a los valores ASCII. Considere la
comparación de dos cadenas que contienen JEAN y JOAN. Una comparación de izquierda a derecha.
J : J iguales
E : O diferentes
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 70 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
A : A iguales
N : N iguales
Una comparación de los cuatro bytes termina con una comparación de N con N (iguales).
PRÁCTICA No. 34
NOMBRE: Carga de cadenas
OBJETIVO:
Que el alumno:
- Hará uso de las instrucciones que le permitan tomar la dirección de las cadenas.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 71 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
INTRODUCCIÓN:
LODS : Carga una cadena de caracteres.
Formas de la instrucción LODS.
Simbólica 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
dirección de memoria está sujeta a los registros DS:SI, aunque puede pasar por alto el SI, dependiendo de la
bandera de dirección, la operación también incrementa o disminuye el SI en 1 para byte, en 2 para palabra y en 4
para palabra doble.
Ya que una operación LODS llena el registro ; no existe razón práctica para utilizar con ella el prefijo REP, para
la mayor parte de los propósitos, una sencilla instrucción MOV es adecuada.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 72 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
RET
CargaDeCadenas ENDP
Codigo ENDS
END CargaDeCadenas
PRÁCTICA No. 35
NOMBRE: Interrupciones de E/S de cadenas
OBJETIVO:
Que el alumno:
- Practicará con las interrupciones y sus funciones, que le permitirán leer o escribir cadenas.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
Existen tres tipos de interrupciones; BIOS “Sistema Básico de Entrada/Salida (Basic Imput Otput System)”, S.O.
“Sistema Operativo, comúnmente llamado DOS por “Sistema Operativo de Disco (Disk Operation System)” y las de
Hardware que son las que se provocan entre si los dispositivos electrónicos para llamar la atención entre ellos
“Procesador,Memoria,Teclado,...”. En este manual seran usadas solamente las de BIOS y S.O; siendo ambas provocadas
por la instrucción INT NúmeroInterupción en donde previamente se le asignó a los registros especificados para esa
función, los datos que necesite y a la mitad superior del registro AX la función que debe llevar acabo la interrupción, de
existir una subfunción deberá estar asignada en la parte baja del mismo registro “AH,AL”.
RET
InterrupcionesParaESDeStrings ENDP
Codigo ENDS
END InterrupcionesParaESDeStrings
PRÁCTICA No. 39
NOMBRE: Manipulación del teclado con interrupciones de BIOS
OBJETIVO:
Que el alumno:
- Podrá introducir y extraer datos del teclado y el búfer, haciendo uso de interrupciones.
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
La interrupción 16H permite efectuar operaciones básicas con el teclado, proporcionando diferentes funciones
especificadas en el octeto de AH.
00H Lectura de un carácter de las 83 teclas disponibles; La operación verifica el búfer del teclado en busca de
un carácter. Si ninguno está presente, la operación espera a que el usuario presione alguna tecla, si se encuentra
alguna, lo regresa en AL y su código de rastreo en AH. Si el carácter pulsado es extendido AL contiene 00.
01H Determina si un carácter está presente. Es similar a la anterior, pero con la diferencia de que si un carácter
es ingresado en el búfer del teclado, la operación pone a cero la bandera ZF; si no está presente ningún carácter
la operación pone a uno la bandera ZF y no espera.
02H Regresa el estado actual de la tecla SHIFT. Esta operación 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 búfer del
teclado, sin tener que presionar ninguna tecla, hasta que se llene. Cargue el carácter ASCII en CH y el código de
rastreo en CL.
10H Lectura de un carácter del teclado. La operación es similar a la función 00, pero aceptando caracteres
extendidos, como F11, F12...Verifica el estado del búfer del teclado para determinar si se ha ingresado un
carácter. Si ninguno está presente, la operación espera que el usuario presione una tecla. Si tiene un carácter lo
regresa en AL y su código de rastreo en AH. Si la tecla pulsada es una función extendida, el carácter en AL es
00, para Inicio y F1, F11 Y F12; pero en las teclas duplicadas como Inicio y RePág, regresa E0H.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 74 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
11H Determina si se encuentra un carácter. Es parecida a la función 01H, excepto que reconoce el teclado
ampliado.
12H Regresa el estado actual del Shift. Es similar a la función , excepto que puede regresar el estado del shift
extendido en AL.
Teclas de función extendida y código de rastreo. Una tecla de función extendida como F1 o Inicio solicitan
una acciòn en lugar de enviar un carácter. . Como programador se puede especificar que presionando la tecla
Inicio se coloque el cursor en la esquina superior izquierda
Cada tecla tiene un código de rastreo , empezado Tecla AH AL
con 01 para Esc. Pormedio de èstos códigos un A 1EH 41H
* 09H Arruba 2AH
programa puede determinar el origen de cualquier * 29H Tec. Nùm. 29H
tecleo. Provocando la interrupción 16H con la función Ins 52 Cero o E0 Ampliado
10H y pulsando el carácter, retorna lo siguiente:
PRÁCTICA No. 40
NOMBRE: Manipulación del puerto paralelo con interrupciones de BIOS
OBJETIVO:
Que el alumno:
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 75 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
- Podrá introducir y extraer datos del puerto paralelo, haciendo uso de interrupciones .
- Aprenda la sintaxis básica 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.
INTRODUCCIÓN:
La impresora debe entender la señal enviada desde el procesador, por ejemplo, para saltar una página, avanzar
línea o tabular. El procesador tambièn debe entender las señales enviadas desde la impresora, como si se encuenta
encendida, si tiene papel, si esta en línea. Desafortunadamente los diferentes tipos de impresoras envian señales
diferentes, lo cual hace que el crear la interfaz entre el programa y el ordenador tenga que ser más versátil.
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 76 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
ANEXO No. 1
REPORTE DEL ALUMNO
El maestro definirá los lineamientos mínimos de documentación que deberán contener las actividades relacionadas
con cada práctica. Se sugieren seleccionar de entre los siguientes aspectos los que se consideren convenientes en
función del tamaño y complejidad de la práctica.
1. Portada: Nombre del Instituto y Departamento Académico, número y nombre de la práctica, nombre de la asignatura y
maestro que la imparte, nombre del alumno, carrera y número de control, lugar y fecha de entrega.
2. Introducción. Finalidad de la práctica y síntesis del contenido.
3. Marco teórico. Definiciones , conceptos,...
4. Desarrollo de la práctica.
5. Impresión del código fuente de cada una de los programas que se derivan de las actividades propias de ésta práctica
indicando el nombre y la función general del programa, autor y fecha de elaboración (o última modificación), para
cada módulo se explicará brevemente su función específica, los parámetros de entrada y/o valores de salida.
6. Impresión de los resultados arrojados por la ejecución del programa.
7. Recomendaciones técnicas: especifica los módulos o archivos que componen el programa, las utilerías requeridas, la
estructura y método de acceso a las tablas o archivos de entrada y/o salida.
8. Conclusiones. Algunas prácticas requieren que el alumno realice investigación de temas, elaboración de tablas,
comparación de resultados, mediciones de tiempos, etc. El alumno escribirá para esos casos las conclusiones a las
que llega.
9. Bibliografía. La que el estudiante para planear y elaborar la práctica.
10. Anexos. Tablas, formatos, Dibujos, Diagramas, fotografías,...
11. Todo los programas compilados y ligados; con los nombres especificados en el manual serán entregados en un disco.
1.- Autor(es)
KIP R. IRVINE
Título
LENGUAJE ENSAMBLADOR PARA COMPUTADORAS BASADAS EN INTEL
QUINTA EDICIÓN
Editorial
PEARSON Prentice Hall
2.- Autor(es)
WILLIAN H. MURRAY III, CHRIS H. PAPPAS
Título
PROGRAMACIÓN EN LENGUAJE ENSAMBLADOR 80386/80286
Editorial
Osborne/McGraw-Hill México
3.- Autor(es)
PETER ABEL
Título
LENGUAJE ENSAMBLADOR Y PROGRAMACIÓN PARA PC IBM Y
COMPATIBLES
Editorial
Pearson Educación, México
4.- Autor(es)
PETER NORTON
RICHARD WILTON
Título
THE NEW PETER NORTON PROGRAMMER´S GUIDE TO THE IBM PC & PS/2
Editorial
Microsoft
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 77 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
ANEXO No. 3
GLOSARIO
BIOS Sistema Básico de Entrada y Salida
DOS Sistema Operativo en Disco
CISC Complex Instructions Set Computer, Ordenador con un conjunto de instrucciones complejo
RISC Reduced Instructions Set Computer, Ordenador con un conjunto de instrucciones reducido
ALU Unidad Aritmético-Lógica
CPU Unidad de proceso central
BIU Basic Interface Unit Unidad de Interfaz Básica
Firmware Programación en Firme, es un bloque de instrucciones de programa para propósitos específicos,
grabado en una memoria tipo ROM
ROM Read Only Memory Memoria de solo lectura
ANEXO No. 4
INTERRUPCIONES
Las interrupciones constituyen quizá el mecanismo más importante para la conexión del microcontrolador con el
mundo exterior, sincronizando la ejecución 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 instrucción 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 lógicas son invocadas por el procesador como
consecuencia de un resultado inusual del programa, tal como un intento de división por cero.
Hardware: Las interrupciones de hardware son invocadas por mecanismos periféricos estos fijan sus respectivas
líneas de petición de interrupción (IRQ). Cada vez que una tecla es presionada, por ejemplo, el teclado genera una
interrupción. Las interrupciones de hardware son vectoreadas a rutinas de servicio de interrupción (ISRs) estas
generalmente residen en el BIOS.
Software: Las interrupciones de software son invocadas a través de la instrucción INT del 8086. La mayoría de
las interrupciones de software son vectorizadas a (DSRs) localizado en el BIOS, o en programas de aplicación.
Nota: Los usuarios de Linux pueden consultar las interrupciones utilizadas en el sistema en el fichero /proc/interrupts
mediante el comando cat /proc/interrupts. También mediante la utilidad dmesg en la forma dmesg | grep -i irq
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 78 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 79 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 80 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 81 de 82
InstitutoTecnológico No.38
Departamento de Sistemas y Computación
Ingeniería en Sistemas Computacionales
Lenguajes de Interfaz SCC-1014 2-2-4
http://techapple.net/2013/01/tasm-windows-7-windows-8-full-screen-64bit-version-single-installer/
http://yasm.tortall.net/
http://www.nasm.us/
http://mingw-w64.org/doku.php
Cd. Victoria Tamaulipas, México Agosto del 2005 Modificado Agosto 19 2013 José Regino Infante Ventura Página 82 de 82