Vous êtes sur la page 1sur 23

Departamento de Sistemas e Informtica

Programacin en Assembler - Clase 1 Digital II

Presentacin de Docentes y Material


Docentes: Ing. Andrs Capalbo Ing. Diego Alegrechi Ing. Esteban Almirn Material de Ctedra Assembler (disponible en www.dsi.fceia.unr.edu.ar)

1. Escribiendo problemas en Assembler Giandomnico 2. Conceptos bsicos sobre la programacin en Assembler Ferradal 3. Gua de referencia rpida 80186 (Disponible en 2do Parcial) 4. Introduccin al emu8086 (material para el TP2) 5. Documentacin DVIO y emu8086 (material para el TP2) 6. Gua de problemas TP2 (material para el TP2) 7. Documentacin del emu8086
20/10/2010 Clase1 Introduccin al Assembler Digital II 2

Entorno de programacin (emu8086)

Emu 8086 Entorno educativo Basado en Windows En forma nativa admite dispositivos virtuales. Set de instrucciones de 8086

Microsoft Assembler (MASM 6.11) Entorno para produccin y educativo. Basado en DOS No admite dispositivos virtuales en forma nativa Set de instrucciones del 8086, 80186/286/386/486

Directivas propias adicionales


Emula interrupciones por Hw y Sw Herramientas adicionales para el debug

Directivas comunes con TASAM (Borland Turbo Assembler)


No permite emular interrupciones

20/10/2010

Clase1 Introduccin al Assembler Digital II

Traductores de lenguaje
Traductores de lenguaje
Cuando escribimos cdigo en un lenguaje de programacin (cualquiera), se requiere de un Traductor de lenguaje para que este cdigo pueda ser entendido por una computadora.

Tradicionalmente los traductores se dividen es dos clases:


Intrpretes (Ej: Basic, Bash, Pyton, JavaScript) que traducen cada sentencia del cdigo fuente (escrito en el lenguaje de programacin) en instrucciones en cdigo mquina que son ejecutadas inmediatamente. Compiladores (Ej: C, C++, Pascal), que traducen todo el cdigo fuente directamente en instrucciones mquina para una determinada plataforma, denominado cdigo objeto. Los programas generados por un compilador tienden a requerir mucho menos espacio para su ejecucin y se ejecutan mucho ms rpidamente que los interpretados.
20/10/2010 Clase1 Introduccin al Assembler Digital II 4

Compiladores
Tipos de lenguajes compilados
de Alto Nivel: (C, Pascal) cada sentencia puede generar muchas instrucciones en lenguaje de mquina. Utiliza un compilador para traducir el cdigo fuente a lenguaje de mquina (tcnicamente, cdigo objeto). de Bajo Nivel: (Assembler) codifican instrucciones simblicas, cada una de las cuales genera una instruccin en lenguaje de mquina. Utiliza un ensamblador para realizar la traduccin al lenguaje de mquina.

Programacin en Assembler
Ventajas:
Ms control sobre el manejo particular de los requerimientos de hardware (flexibilidad). Genera mdulos ejecutables ms pequeos y compactos (eficiencia). Con mayor probabilidad tiene una ejecucin ms rpida (velocidad).

Desventajas:
Se requiere conocimientos acerca del Hardware (arquitectura) de la computadora, su conjunto de instrucciones y sus reglas de uso Falta de portabilidad Mayor tiempo de programacin y programas fuente ms grandes.
20/10/2010 Clase1 Introduccin al Assembler Digital II 5

Compiladores (cont.)
Una prctica comn es combinar los beneficios de ambos niveles de programacin, se puede codificar el grueso de un proyecto en un lenguaje de alto nivel y los mdulos crticos (aquellos que provocan notables retardos) en lenguaje Assembler.
Archivo Fuente 1 (.ASM)

Ensamblador

Archivo Objeto 1 (.OBJ)

Archivo Fuente 2 (.C)

Compilador

Archivo objeto 2 (.OBJ)

Linker

Archivo Ejecutable (.EXE o .COM)

Archivo Objeto 3 (.OBJ)

El Proceso de Construccin de un archivo ejecutable


1. Ensamblar (Assembling): consiste en la traduccin del cdigo fuente en cdigo objeto y la
generacin de un archivo intermedio .OBJ (objeto), o mdulo. El ensamblador crea un encabezado al principiop del mdulo .OBJ generado; parte del encabezado tiene informacin acerca de direcciones incompletas. El mdulo .OBJ an no est en forma ejecutable.

2.

Enlazar (Linking): implica convertir el mdulo .OBJ en un mdulo de cdigo de mquina .EXE
(ejecutable). Una de las tareas del enlazador es combinar los programas ensamblados en forma separada en un mdulo ejecutable.
Clase1 Introduccin al Assembler Digital II

20/10/2010

Arquitectura del 8086


Unidad de Ejecucin (EU)
Registros de uso general: A, B, C, D, SP, BP, SI, DI todos de 16 Bits. FLAGS: es un registro de 16 bits, cada uno de los cuales representa una determinada condicin. 4 registros de segmentos CS, DS, SS, ES (de 16 bits). 1 registro de contador de programa (instruccin pointer). 1 unidad de suma para el clculo de direcciones. 1 cola de pre-carga de instrucciones.

Unidad de Interface con el Bus (BIU)


20/10/2010

Clase1 Introduccin al Assembler Digital II

El registro de FLAGS

(Processor Status Word)

AF: carry o borrow entre los 4 bits menos significativos. CF: carry o borrow desde el bit ms significativo. OF: cuando se produce overflow cuando se exceda la capacidad de representacin. SF: bit de signo (0=positivo y 1=negativo) PF: paridad del resultado (1=paridad impar, 0=paridad par). ZF: resultado cero DF: utilizado cuando se opera con strings IF: interrupcin presente TF: modalidad especial de trabajo del CPU (single-step en debugging)
20/10/2010 Clase1 Introduccin al Assembler Digital II 8

Sintaxis de una instruccin de ASS


El formato de una sentencia de instruccin es el siguiente:

Corchetes: indican que lo especificado entre ellos es opcional. Campo de etiqueta: Es el nombre simblico de la primera posicin de una instruccin, puntero o dato; permite identificarla unvocamente. Campo de nombre: Contiene el mnemnico de la instruccin (sigla que representa el cdigo de la instruccin). Campo de operandos: Indica cuales son los datos implicados en la operacin. Campo de comentarios: Cuando en una lnea hay un punto y coma (;) todo lo que sigue en la lnea es un comentario. Existen tres tipos de sentencias: Instrucciones: se aplican en tiempo de ejecucin. Directivas: slo son utilizadas durante el ensamblaje, condicionando la forma de actuar del ensamblador, sin generar cdigo de mquina. Pseudocdigo: generan cdigo de mquina no ejecutable, slo reservan un espacio de memoria.
20/10/2010 Clase1 Introduccin al Assembler Digital II 9

Instrucciones de movimiento de datos

MOV (transferencia) Sintaxis: MOV destino, origen


Flags: OF DF IF TF SF ZF AF PF CF - NO MODIFICA X MODIFICA ? INDEFINIDO

Transfiere datos de longitud byte o word del operando origen al operando destino. Los operandos origen y destino pueden ser: registros (8 o 16 bits) posiciones de memoria inmediato (constante 0-FFFFh); slo operando origen. Restricciones: Ambos operandos de igual dimensin. No se permite que ambos operandos sean posiciones de memoria.
20/10/2010 Clase1 Introduccin al Assembler Digital II 10

Instrucciones aritmticas

ADD (suma) y SUB (resta) Sintaxis: ADD (SUB) destino, origen


Flags: OF x DF IF TF SF x ZF x AF x PF x CF x
- NO MODIFICA X MODIFICA ? INDEFINIDO

Realiza la operacin destino +/- origen, almacenando el resultado en el operando destino. Los operandos origen y destino pueden ser: registros (8 o 16 bits) posiciones de memoria inmediato (constante 0-FFFFh); slo operando origen. Restricciones: Ambos operandos de igual dimensin. No se permite que ambos operandos sean posiciones de memoria.
20/10/2010 Clase1 Introduccin al Assembler Digital II 11

Instrucciones aritmticas (cont.)

INC (incrementar) y DEC (decrementar) Sintaxis: INC (DEC) destino


Flags: OF x DF IF TF SF x ZF x AF x PF x CF - NO MODIFICA X MODIFICA ? INDEFINIDO

Suma (resta) una unidad del operando destino, tratndolo como un nmero binario sin signo. El operando puede ser byte o palabra. Obsrvese que estas instrucciones no modifican el bit de acarreo (CF) y no es posible detectar un desbordamiento por estos procedimientos (utilcese ZF). Ejemplo: INC ax ESTADO INICIAL: ax=22h(34d) ESTADO POSTERIOR: ax=23h(35d)
20/10/2010 Clase1 Introduccin al Assembler Digital II 12

Instrucciones aritmticas (cont.)

NEG (negacin) Sintaxis: NEG destino


Flags: OF x DF IF TF SF x ZF x AF x PF x CF - NO MODIFICA X MODIFICA ? INDEFINIDO

Calcula el valor negativo en complemento a dos del operando y devuelve el resultado en el mismo operando. Ejemplo: NEG al

ESTADO INICIAL: al=00100010b(34d)

ESTADO POSTERIOR: al=11011110b

20/10/2010

Clase1 Introduccin al Assembler Digital II

13

Instrucciones lgicas

NOT (no lgico) Sintaxis: NOT destino


Flags: OF DF IF TF SF ZF AF PF CF - NO MODIFICA X MODIFICA ? INDEFINIDO

Realiza el complemento a uno del operando destino, invirtiendo cada uno de sus bits. Los flags no resultan afectados. Ejemplo: NOT al

ESTADO INICIAL: al=00100010b

ESTADO POSTERIOR: al=11011101b

20/10/2010

Clase1 Introduccin al Assembler Digital II

14

Instrucciones lgicas (cont.)

AND (y lgico) OR (O lgico) XOR (O exclusivo) Sintaxis: AND(OR)(XOR) destino, origen


Flags: OF 0 DF IF TF SF x ZF x AF ? PF x CF 0
- NO MODIFICA X MODIFICA ? INDEFINIDO

Realiza una operacin de and(or)(or-EXCLUSIVA) lgico entre el operando origen y destino quedando el resultado en el destino. Admite operandos byte o palabra, pero ambos del mismo tipo. Ejemplo: AND al,bl

ESTADO INICIAL: al=10111101b, bl=10001010b (mscara) ESTADO POSTERIOR: al=10001000b, bl=10001010b

20/10/2010

Clase1 Introduccin al Assembler Digital II

15

Instrucciones lgicas (cont.)

SAL/SHL (desplazamiento aritmtico a la izquierda) Sintaxis: SAL/SHL destino, contador


Desplaza a la izquierda los bits del operando el nmero de bits especificado en el segundo operando. Los bits que ingresan por la derecha son ceros. Mientras el OF est en cero el signo se mantiene. El segundo operando que debe ser CL o un inmediato (constante de 8 bits).

SHR (desplazamiento lgico a la derecha) Sintaxis: SHR destino, contador


Desplaza a la derecha los bits del operando destino el nmero de los bits especificados en el segundo operando. Los bits de la izquierda se llenan con cero. El nmero de bits a desplazar se puede especificar directamente a travs de un inmediato o mediante CL.
20/10/2010 Clase1 Introduccin al Assembler Digital II 16

Instrucciones lgicas (cont.)

SAR (desplazamiento aritmtico a la derecha) Sintaxis: SAR destino, contador


Desplaza a la derecha los bits del operando destino el nmero de bits especificado en el segundo operando. Los bits de la izquierda se rellenan con el bit de signo del primer operando. El nmero de bits a desplazar se puede especificar directamente a travs de un inmediato o mediante CL.

20/10/2010

Clase1 Introduccin al Assembler Digital II

17

Instrucciones lgicas (cont.)


TEST (comparacin lgica)
Sintaxis: TEST destino, origen
Flags: OF 0 DF IF TF SF x ZF x AF ? PF x CF 0
- NO MODIFICA X MODIFICA ? INDEFINIDO

Realiza una operacin Y lgica entre los dos operandos pero sin almacenar el resultado. Los flags son afectados con la operacin.

CMP (comparacin) Sintaxis: CMP destino, origen


Flags: OF x DF IF TF SF x ZF x AF ? PF x CF x

Realiza la resta destino-origen sin alterar el contenido de destino ningn resultado. Los operandos quedan inalterados, pero los flags pueden ser consultados mediante instrucciones de salto condicional. Los operandos pueden ser de tipo byte o palabra pero ambos de la misma dimensin.
20/10/2010 Clase1 Introduccin al Assembler Digital II 18

Instrucciones de salto
Salto incondicional: JMP (salto)
Sintaxis: JMP direccin
Transfiere el control incondicionalmente a la direccin indicada en el operando.

No modifica ningn Flag.


Ejemplo:
etiqueta: .... jmp etiqueta

Salto condicional: Jxx (xx condicin)


Sintaxis: Jxx direccin
Transfiere el control a la direccin indicada en el operando direccin, de manera condicionada al resultado de una operacin previa que modifique el valor de los fags, por ej. CMP.
20/10/2010 Clase1 Introduccin al Assembler Digital II 19

Instrucciones de salto (cont.)


Saltos condicionales
Instruccin
JA/JNBE
JAE/JNB JB/JNAE/JC JBE/JNA JCXZ

Descripcin
Salto si mayor (above), si no menor o igual (not below or y ZF=0. equal), si CF=0

Salto si mayor o igual (above or equal), si no menor (not below), si CF=0. Salto si menor (below), si no superior ni igual (not above or equal), si acarreo, si CF=1. Salto si menor o igual (not below or equal), si no mayor (not above), si CF=1 ZF=1. Salto si CX=0.

JE/JZ
JG/JNLE JGE/JNL JL/JNGE
20/10/2010

Salto si igual (equal), si cero (zero), si ZF=1.


Salto si mayor (greater), si no menor ni igual (not less or equal), si ZF=0 y SF=OF. Salto si mayor o igual (greater or equal), si no menor (not less), si SF=OF. Salto si menor (less), si no mayor ni igual (not greater or equal), si SFOF.
Clase1 Introduccin al Assembler Digital II 20

Instrucciones de salto (cont.)


Saltos condicionales
Instruccin
JLE/JNG
JNC JNE/JNZ JNO JNP/JPO JNS

Descripcin
Salto si menor o igual (less or equal), si no mayor (not greater), si ZF=1 y SF=/OF.
Salto si no acarreo, si CF=0. Salto si no igual, si no cero, si ZF=0. Salto si no desbordamiento, si OF=0. Salto si paridad impar, si PF=0. Salto si no signo, si positivo, si SF=0.

JO JP/JPE
JS

Salto si desbordamiento, si OF=1. Salto si paridad par, si PF=1.


Salto si signo, si SF=1.

20/10/2010

Clase1 Introduccin al Assembler Digital II

21

Instruccin de gestin de bucles

LOOP (bucle) Sintaxis: LOOP etiqueta


Flags: OF DF IF TF SF ZF AF PF CF - NO MODIFICA X MODIFICA ? INDEFINIDO

Decrementa el registro contador CX; si CX es cero, ejecuta la siguiente instruccin, en caso contrario transfiere el control a la direccin indicada por etiqueta. El desplazamiento debe estar comprendido entre -128 y +127. Ejemplo: bucle: mov cx,10 ....... ....... loop bucle
Clase1 Introduccin al Assembler Digital II 22

20/10/2010

Gracias!

20/10/2010

Clase1 Introduccin al Assembler Digital II

23

Vous aimerez peut-être aussi