Help
Home Just In Communities Forums Beta Readers Search
B s . A A A   full 3/4 1/2   E E   Light Dark
Anime/Manga » Tsubasa Chronicle » Siempre te amaré
Pami Li
Author of 153 Stories
Rated: K - Spanish - Romance - Reviews: 17 - Published: 11-07-05 - Complete - id:2651011

El lenguaje ensamblador es la primera abstracción del lenguaje de máquina, consistente en asociar a los códigos de operación en palabras clave que faciliten su uso por parte del programador.

—Ayuda a conocer a detalle cómo trabaja un microprocesador.

—El ensamblador brinda la oportunidad de conocer más a fondo la operación de su computadora. Esto le permite implementar software o hardware de una manera más consciente (comprendiendo cómo y por qué lo hace).

—Se conserva el control total de lo que deberá hacer su computadora, siempre y cuando ésta sea físicamente capaz de hacerlo.

—Los programas en ensamblador son más rápidos, más compactos y tienen mayor capacidad que los creados en otros lenguajes.

—El programador puede optimizar al máximo sus programas (tanto en tamaño como en velocidad de ejecución). En el caso de otros lenguajes de programación ya existe código que se genera de manera predefinida, haciendo muy difícil su optimización.

—Desarrolla habilidades de programación avanzadas.

—Una instrucción mal interpretada o un error de lógica en el programa puede causar un caos, a tal grado que será necesario apagar y encender de nuevo la computadora.

—La insuficiencia de conocimientos sobre el funcionamiento interno de la computadora puede causar efectos impredecibles.

—Es necesario ajustarse a una convención respecto al uso de interrupciones.

—Se debe tener presente que un programa se puede volverse más complejo conforme se le agregan rutinas o funciones adicionales.

—Sistemas Embebidos

—Tiempo Real

—Transporte

—Entretenimiento

—DSP (Procesador Digital de Señal)

—Procesamiento de señales, voz e imágenes.

El microprocesador realiza tres tareas principales para el sistema de cómputo:

Transferencia de datos entre él mismo y la memoria o dispositivos de Entrada/Salida.

Operaciones Lógicas y Aritméticas.

Control de flujo del programa por medio de decisiones simples.

—La BU (Bus Unit – Unidad de Bus-) recupera de la memoria las instrucciones y, en el caso de las actuales Pentium y compatibles., las va almacenando en una cola, de tal manera que se encuentren ya en el microprocesador con antelación para acelerar la ejecución.

Los dos bloques que aparecen a la izquierda, en el interior del microprocesador, forman la Unidad de Ejecución, compuesta de la CU (Control Unit –Unidad de Control -) y la ALU (Arithmetic Logic Unit –Unidad Lógica Aritmética-) Observe que estas unidades comparten el acceso a los registros.

Las instrucciones pasan de la IU a la CU, encargada de ejecutarlas sirviéndose para ello de los datos alojados en los registros y apoyándose en la ALU. En consecuencia, se modificarán esos registros, por ejemplo el de indicadores y si es necesario se enviará de vuelta a la memoria el dato que corresponda. Para ello la CU se comunica con la BU.

Acumulador: Inst aritméticas, ajuste de formado, E/S.
Base: Almacenamiento de direcciones de desplazamiento en estructuras de datos.

Contador: Variables de lazo y contadores.
Datos: Operaciones aritméticas
Ap pila: Direcciona la pila
Ap base: Ap auxiliar pila, transferencia de datos a memoria
In fuente y destino: Instrucciones cadena

Registros de control.

Están representados por CR0, CR1, CR2, CR3 con una tamaño de 32 bits en modo protegido y de 64 en modo largo, siendo su finalidad modificar o informar sobre distintos aspectos del funcionamiento del microprocesador. Una aplicación raramente tendrá la necesidad de acceder a estos registros, por lo que no se tratará con mayor profundidad.

RegistroBandera.

La base de la operación de un microprocesador, son las banderas de estado, las cuales son modificadas como consecuencia de las operaciones realizadas tanto aritméticas como lógicas. Las banderas nunca cambian por efecto de la transferencia de datos u operaciones de control del programa. La figura 8 muestra la organización interna del registro banderas para diferentes versiones de microprocesadores; observe que los bits banderas son compatibles con las versiones posteriores de los microprocesadores.

CF Acarreo.
PF Paridad.

ZF Cero.
SF Signo.

TF Trampa (una instrucción a la vez).
IF Interrupción.

DF Dirección (Inc/Dec de registros índices).
OF Sobreflujo

IOP Nivel de Privilegio de entrada/salida.
NT Tarea anidada.

RF Reanudar.
VM Modo virtual.

AC Verificación de alineación.

VIF Bandera de interrupción virtual

VIP Interrupción virtual pendiente.

ID Identificación.

Intel:
8086/8088, 80286, 80386, Pentium, Pentium Pro, Pentium II, Pentium Intel Celeron, Pentium III, Pentium IV, Pentium Dual-Core, Intel Core, Core Duo, Core i3, i5, i7

AMD:
AM9080, AM2900, 29000, AM386, K5, Geode, AMD Atlhon, AMD Sempron, Phenom II

Motorola:
MC 6800, 68000, ColdFire, Dragon Ball

Ensambladores cruzados (Pasmo):
Se utilizan en una pc que posee un procesador diferente al que tendrán las computadoras donde van a ejecutarse.
Permite aprovechar el soporte de medios físicos y de programación que ofrecen las máquinas potentes para desarrollar programas que luego los van a ejecutar sistemas especializados.
No se puede probar o depurar el código.

Ens residentes
Permanecen en la memoria principal de la pc y cargan, para su ejecución, al programa objeto producido.
Se puede comprar el programa ahí mismo.
Deben mantenerse en la memoria principal el ensamblador, el programa fuente y el programa obejto.

Macroensambladores:
Bloques y utilizarlas en cualquier parte del programa sólo llamando el bloque.
MASM (Microsoft), TASM (Turbo) y NASM (Netwide).

Microensambladores:
Repertorio fijo de instrucciones, el interprete de las mismas interpreta de igual forma un determinado código de operación. El programa que interpreta se llama microprograma.

Ensamblador de una fase/pasada:
Leen una línea del programa y traducen directamente para producir una instrucción en leng máquina y la ejecuta si se trata de una instrucción en ese leng o una pseudo instrucción.
Obligan a definir los símbolos antes de ser empleados.

Ensamblador de dos fases/pasadas:
Realizan la traducción en dos etapas. Leen el programa fuente y construyen una tabla de símbolos, vuelve a leer el programa fuente y traducen.

RAM:
DRAM, SRAM (SDR SDRAM, DDR, DDR2 Y DD3)

ROM:
ROM, PROM, EPROM, EEPROM, Memoria Flash

Las interrupciones hardware son producidas por varias fuentes, por ejemplo del teclado, cada vez que se presiona una tecla y se suelta se genera una interrupción.

Otras interrupciones son originadas por el reloj, la impresora, el puerto serie, el disco, etcétera.

Una interrupción de tipo hardware es una señal eléctrica producida por un dispositivo físico de la computadora. Esta señal informa a la CPU que el dispositivo requiere su atención. Y el CPU invoque una de las rutinas del BIOS, la cual atenderá la solicitud de interrupción y al terminar regresara el control a la CPU para que esta a su vez continúe con lo que estaba realizando o bien otro proceso.

IRQ 0 (Temporizador del sistema)

IRQ 1 (Teclado / controlador de teclado)

IRQ 2 (Cascada de IRQ 8 a 15)

IRQ 3(Segundo puerto serial COM2)

IRQ 4 (Primer puerto serial COM1)

IRQ 5 (Tarjeta de Sonido)

IRQ 6 (Controlador de Discos flexibles)

IRQ 7 (Primer Puerto paralelo LPT1)

IRQ 8 (Sistema reloj en tiempo real)

IRQ9 (No Tiene uso por defecto)

IRQ 10 (No tiene uso por defecto)

IRQ 11 (No tiene uso por defecto)

IRQ12 (PS/2 mouse.)

IRQ 13 (El La unidad del punto flotante/ coprocesador del el de Matemática).

IRQ 14 (Canal Primario IDE)

IRQ 15 (Canal IDE secundario)

PIC:
Nivel de prioridad

El PIC dispone de 16 niveles de prioridad, numerados del 0 al 15, de forma que los de número más bajo se atienden antes que los de número más alto. La asignación a cada nivel es como sigue:

Nivel Asign. Nivel Asign. Nivel Asign. Nivel Asign.

0 NMI 1 IRQ0 2 IRQ1 3 IRQ8

4 IRQ9 5 IRQ10 6 IRQ11 7 IRQ12

8 IRQ13 9 IRQ14 10 IRQ15 11 IRQ3

12 IRQ4 13 IRQ5 14 IRQ6 15 IRQ7

Las interrupciones de software se dividen en dos categorías:

— Interrupciones del sistema operativo DOS.

— Interrupciones del BIOS.

La diferencia principal entre estas son que las del sistema operativo (DOS) son más fáciles de usar pero, al mismo tiempo, son más lentas. Esto es debido a que estas interrupciones hacen uso del BIOS para lograr su cometido. En cambio, las del BIOS son mucho más rápidas pero tienen la desventaja de que, al no ser parte del hardware, son muy específicas y pueden variar dependiendo incluso de la marca del fabricante del circuito. La elección del tipo de interrupción que el programador quiera implementar en su aplicación dependerá únicamente de las características que le quiera proporcionar a éste: velocidad, utilizando las del BIOS, o portabilidad, usando las del DOS. Cuando la computadora se enciende el BIOS y el DOS establecen la tabla de servicios de interrupción de las localidades de memoria 000H-3FFh. Esta tabla permite el uso de 256 interrupciones (100H), cada una con un desplazamiento.

El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican el estado de los dispositivos del sistema. Los dos módulos del DOS: y , facilitan el uso del BIOS ya que proporcionan muchas de las pruebas adicionales necesarias.

El DOS y los programas usuarios pueden solicitar rutinas del BIOS para la comunicación con los dispositivos conectados al sistema. El método para realizar la interfaz con el BIOS es el de las interrupciones de software. Las operaciones del DOS son, por lo general, más fáciles de usar que sus contrapartes del BIOS y son más independientes de la máquina. Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones del DOS.

UII

EXEC:
Los programas ejecutables en el modo consola son almacenados en disco como archivos .com y .exe
1) Asigna la memoria necesaria para cargar el programa.
2) Construye un bloque de 256 bytes (PSP).
3) Carga el programa arriba del PSP.
4) Actualiza los registros y el STACK.
5) Transfiere el control al inicio del programa, cargando CS:IP

.COM
Es almacenado es almacenado después del PSP.
Cuando un programa .COM inicia su ejecución todos los registros de segmento contienen la misma dirección la dirección de inicio del PSP.
SP=0FFFEh

1) Tamaño máximo de memoria de 64KB.
2) Sólo puede usarse un segmento
3) Todos los registros de segmento son inicializados en el mismo segmento.
4) ORG=100h, para dejar espacio al PSP.
5) Salta los datos con JMP.

.EXE
Puede manejar hasta cuatro tipos de segmentos: STACK, DATA, EXTRA y CODE. Requiere el de CODE y el de STACK.

Estructura simplificada.
Facilitan la tarea y hace que la estructura del programa sea compatible con los lenguajes de alto nivel.

.MODEL SMALL, .CODE

Estructura estándar
STACK, CODE

.MODEL: Directiva que nos permite definir el modelo de memoria utilizado. Le dice al compilador cómo acomodar en memoria las instrucciones y los datos.
SMALL: 64KB
.STACK: le dice al compilador la cantidad de memoria a reservar para la pila. 1KB
.CODE: indica al compilador el inicio del segmento de código
.DATA: datos

Programas con su cuerpo principal dentro de un procedimiento.
1) Declarar el proc como far.
2) No es necesario llamar 4Ch 21h para regresar al DOS, se hace con la instrucción RETF. Esta saca de la pila los últimos 4 bytes los cuales contienen la dirección de llamada de la int 20h, primero sale el offset y luego el segmento.
3) La dirección que se almacena en la pila es la del inicio del PSP (offset 0000h). DS=PSP

Las sentencias no deben de tener más de 128 caracteres, una sentencia puede tener hasta 4 campos: label, mnemónico, operandos, comentarios.

Mnemónico:
a) Directivas: Especifican la manera en que el ensamblador va a generar el código objeto durante el tiempo de ensamble.
b) Instrucciones: Son transformados en tiempo de ensamble en código objeto. En tiempo de ejecución controlan la ejecución del programa.

Operando:
Constan símbolos, constantes, expresiones y registros.
—Símbolos: variables, direcciones, etiquetas, macros, segmentos, proc, registros y estructuras, constantes, expresiones, cadenas.
1) Mayúsculas/minúsculas
2) Dígitos no al principio.
3) 31 caracteres
4) _, ?, inicio o dentro.
5) . al principio.
6) no palabras reservadas.

—Constantes:
Especificar números o cadenas.
1) Enteras. B, h, o, d
2) Binarios empaquetados codificados en decimal. DT
3) Números reales. +|-
4) Cadenas. "" ''

—Comentarios.

MASM

Ofrece módulos objetos reubicables producidos de archivos fuente en ensamblador.
-Cuenta con un conjunto de macro directivas.
-Podemos compilar de manera condicional porciones de un archivo fuente.
-Soporta un rango amplio de operandos para crear expresiones complejas en tiempo de ensamblado.
-Cuenta con una verificación de sintaxis de todos los estatutos del archivo fuernte.

MASM: obj, lst, crf
LINK: exe, map, lib

exe2bin ensa01
Code view:
-n: nombre
-l: carga.
-a:dirección
-d: rago
-p:seguir
-q: terminar
-r: registro
-t: seguir
-o: salida

Desbordamiento: OV NV
Dirección: DN UP
Interrupción: EI DI
Signo: NG PL
Cero: ZR NZ
Arrastre aux: AC NA
Paridad: PE PO
Arrastre: AY NC

F2: observar el valor de los registros.
F8: rastrar el programa paso a paso
F10: saltar proc

DB Byte
DA Ascii
DI Integers
DU No signo int
DW Words
DD Double Words

Tiny
Small
Medium
Compact
Large
Huge

.DATA? No inicializados near
.FARDATA inicializados far

Byte
Word – siguiente palabra (2)
DWord – cada 4 bytes
Para – párrafo (26)
Page – página (256)

Byte -1
Word-2
DWord-4
FWord-6
QWord-8
TByte-10

Tipos de operadores:
1) aritméticos: + - * / MOD + -
2) relacionales: true false || eq, ne (16 bits) , lt, le, gt, ge (17 bits, signo)
3) lógicos a nivel de bit: not, and, or, xor
4) corrimiento: shr, shl
5) especiales: . [] :
6) operadores de tipo: ptr (especifica el tipo de una variable o etiqueta), short (alcance corto), this (valor del offset), high|low, seg, offset, type, lenght, size

En el entorno MS-DOS existen dos tipos diferentes de programas ejecutables desde la línea para comandos: los que tienen la extensión .COM y los que tienen extensión .EXE.

Algunas diferencias importantes entre un programa que es para ejecutarse como .EXE y uno que es para ejecutarse como .COM implica en el tamaño del programa, la segmentación y la inicialización. Sin embargo, ambos tienen algo en común: hacen uso de una estructura en memoria llamada PSP.

Antes de que el pase el control al programa que se pretende ejecutar, se crea un bloque de 256 bytes llamado PSP.

El direccionamiento relativo base mas índice es similar al direccionamiento base mas índice, pero además suma un desplazamiento utilizando un registro base y un registro índice para formar una dirección de memoria.
MOV AX, [BX+SI+100h].

El direccionamiento índice escalado es exclusivo de los microprocesadores 80386 y 80384. En el direccionamiento índice escalado se emplean dos registros de 32 bits (un registro base y un registro índice) para accesar a la memoria. El segundo registro (índice) se multiplica por un factor de escala; este 1X, 2X, 4X u 8X. Un factor de escala 1X esta implícito y no se necesita incluirlo en la instrucción en lenguaje ensamblador MOV AL, [EBX + ECX]

DIRECCIONAMIENTO INMEDIATO

En este modo es el operando el que figura en la instrucción, no su dirección. En otras palabras el campo de operando contiene el mismo, sin transformación alguna, la información sobre la que hay que operar. Este modo es útil para inicializar registros o palabras de memoria con un valor constante.

DIRECCIONAMIENTO DE MEMORIA DIRECTA

Este es el modo de direccionamiento más sencillo. El campo de dirección no necesita transformación alguna para dar la dirección efectiva, es decir la función que transforma el campo de operando en la dirección efectiva es la identidad. Esto significa que el campo de operando es ya la dirección efectiva.

El direccionamiento base más índice es similar al direccionamiento indirecto, porque direcciona en forma indirecta a los datos de la memoria.
MOV DL, [EAX+EBX]

El direccionamiento relativo por registro es similar al direccionamiento base más índice y al direccionamiento por desplazamiento. En el direccionamiento relativo por registro, para direccionar datos en un segmento de memoria se agrega un desplazamiento al contenido de un registro base índice (BP, BX, DI o SI).

Por registro

Indirecto por registro:
MOV EAX, [EBX].

UIII

—Instrucciones de transferencia de datos: mueven info entre registros y posiciones de memoria o puertos de E/S.
—Instrucciones aritméticas: operaciones +, -, * y /
—Instrucciones de manipulación de bits: operaciones de corrimiento, rotación y lógicas, usando posiciones de memoria y registros.
—Instrucciones de transferencia de control: alteran el orden de ejecución de un programa. Saltos y llamadas a proc.
—Instrucciones de control del procesador: activan y desactivan indicadores de estado (flags) y cambian el estado de ejecución del micro.

MOV Mueve datos de 8 y 16 bits entre registros o entre registros y localidades de memoria.

PUSH Mueve datos entre registros, entre localidades de memoria a la PILA.

POP Mueve datos de la PILA a registros y localidades de memoria.

XCHG Esta instrucción intercambia el contenido entre los operandos fuente y destino, tanto bytes como words. Se pueden intercambiar dos registros (excepto los registros de segmento) o un registro y una posición de memoria.

XLAT Esta instrucción busca un valor en una tabla de BYTES y lo carga en el registro AL. La tabla puede tener hasta 256 bytes.

IN Esta instrucción toma el valor contenido en un puerto de E/S.

OUT Esta instrucción envía un valor a un puerto de E/S.

LEA Carga en un registro el offset de un operando de memoria.

LDS Lee una dirección de 32 bits, su parte alta la carga en DS y su parte baja en el registro especificado.

LES Lee una dirección de 32 bits, su parte alta la carga en ES y su parte baja en el registro especificado.

Instrucciones aritméticas:

INC Esta instrucción suma UNO al registro u al operando de memoria, a diferencia de ADD no afecta la bandera de ACARREO.

DEC Esta instrucción resta un UNO de un registro u operando de memoria. NO afecta la bandera de ACARREO.

NEG Esta instrucción remplaza su operando con su complemento a 2.

CMP Esta instrucción es similar a la de SUB solo que el resultado no afecta a ninguno de sus operandos, solo afecta a las banderas. Se usa para decidir si tiene o no lugar un salto.

ADD y ADC Instrucciones de suma y suma con acarreo respectivamente. El formato de ejecución de estas instrucciones es el siguiente: DESTINO DESTINO + FUENTE [+ ACARREO]

AAA y DAA AAA Realiza un ajuste ASCII después de la suma. Por ejemplo si tenemos la instrucción: ADD AL, BL AAA

Si el número puesto en AL es mayor a nueve, el acarreo se pasa a AH, se afectan las banderas de ACARREO y ACARREO AUXILIAR.

DAA Convierte el valor almacenado en AL en 2 dígitos decimales empaquetados válidos. Por ejemplo: ADD AL, BL DAA

Si el resultado de la suma excede el valor de 99 suma 1 a AH y afecta a la bandera de ACARREO y ACARREO AUXILIAR.

SUB y SBB Son similares a sus homologas de ADD y ADC, pero en este caso el indicador de acarreo (CF) actúa como indicador de acarreo negativo. Realiza la siguiente operación. DESTINO DESTINO - FUENTE [- ACARREO]

AAS y DAS AAS Ajuste ASCII después de la resta. La operación de substracción deberá poner el resultado en AL, si éste es mayor que 9h, AH se decrementa y se afectan las banderas de ACARREO y ACARREO AUXILIAR.

DAS Ajuste decimal después de la resta. El resultado de la substracción se debe encontrar en AL, se usa para números BCD empaquetados.

MUL y IMUL La primera se usa para multiplicación de números sin signo y la segunda para números con signo. En realidad lo que hace IMUL es extender el signo.

8 bits: AH AL AL * OPERANDO || 16 bits: DX AX AX * OPERANDO

AAM Ajuste ASCII después de la multiplicación. Usando con números BCD no empaquetados.

DIV y IDIV La primera se usa para división de números sin signo y la segunda para números con signo. En realidad lo que hace IDIV es extender el signo.

8 bits: AH AL AL / OPERANDO|| 16 bits: DX AX AX / OPERANDO

AAD Ajuste ASCII antes de la división. Esta instrucción se usa para preparar un número BCD no empaquetado para la división. Por ejemplo:

ADD DIV BL ;AH AL AL / BL

Instruccionesdemanipulacióndebits.

1. Lógicas: Los operadores lógicos manejan sólo constantes como operandos y son evaluadas en tiempo de compilación. Las instrucciones lógicas pueden manejar registros y operandos a memoria, son evaluadas en tiempo de ejecución.
AND, OR y XOR. Manejan BYTE y WORD. TEST, afecta banderas.

2. Corrimiento:
SHL, SHR - Lógicos || SAL, SAR - aritméticos

3. Rotación: similares a las de corrimiento, sólo conservan los bits desplazados poniéndolos de nuevo en el operando. Flags: CF y OF Dependiendo de la dirección de la rotación el bit que sale es copiado e la bandera de Acarreo, la bandeja de sobre-flujo solamente se afecta por rotaciones de un bit.
ROL, AND

Instruccionesdetransferenciadecontrol

Alteran el contenido de los registros CS:IP, propicia que el programa continué su ejecución en otra parte del código.

1. Incondicionales: CALL, RET, JMP
2. Condicionales: CMP, JA, JE, JNE, JB, JBE, JAE, JG, JE, JNE, JL, JLE, JGE
3. Bucles: LOOP

Instruccionesdemanejodecadenas

Permiten operar con bloques consecutivos de bytes, words o dwords. Longitud de 64Kb.
MOVSx, CMPSx, SCASx, LODS, STODS, INS y OUTS.

Instruccionesdecontroldelprocesador

Nos permiten regular el funcionamiento del procesador dentro de un programa.

1. Operaciones con las banderas (CF - acarreo, DF-dirección e IF-interrupción).

CLC Limpia la bandera de acarreo.

STC Pone en (1) la bandera de acarreo.

CMC Complementa la bandera de acarreo.

CLD Limpia la bandera de dirección.

STD Pone en (1) la bandera de dirección.

CLI Limpia la bandera de interrupción.

STI Pone en (1) la bandera de interrupción.

2. Operaciones de sincronización externa

Permiten sincronizar el procesador con dispositivos externos. HALT, WAIT, ESC y LOCK

3. Operaciones de no operación.

Incrementa el registro IP.

Review this Story
Share


Return to Top