Departamento de Sistemas e Informática1).pdf · puede codificar el grueso de un proyecto en un...

23
Programación en Assembler - Clase 1 Digital II Departamento de Sistemas e Informática

Transcript of Departamento de Sistemas e Informática1).pdf · puede codificar el grueso de un proyecto en un...

Programación en Assembler - Clase 1

Digital II

Departamento de Sistemas e Informática

12/10/2011 Clase1 – Introducción al Assembler – Digital II 2

Presentación de Docentes y Material

Docentes:

Ing. Andrés Capalbo

Ing. Diego Alegrechi

Ing. Esteban Almirón

Material de Cátedra – Assembler (disponible en www.dsi.fceia.unr.edu.ar)

1. Escribiendo problemas en Assembler – Giandoménico

2. Conceptos básicos sobre la programación en Assembler – Ferradal

3. Guía de referencia rápida 80186 (Disponible en 2do Parcial)

4. Introducción al emu8086 (material para el TP2)

5. Documentación DVIO y emu8086 (material para el TP2)

6. Guía de problemas TP2 (material para el TP2)

7. Documentación del emu8086

12/10/2011 Clase1 – Introducción al Assembler – Digital II 3

Entorno de programación (emu8086)

Emu 8086 Microsoft Assembler (MASM 6.11)

Entorno educativo Entorno para producción y educativo.

Basado en Windows Basado en DOS

En forma nativa admite dispositivos virtuales.

No admite dispositivos virtuales en forma nativa

Set de instrucciones de 8086 Set de instrucciones del 8086, 80186/286/386/486

Directivas propias adicionales Directivas comunes con TASAM (Borland Turbo Assembler)

Emula interrupciones por Hw y Sw No permite emular interrupciones

Herramientas adicionales para el debug

Traductores de lenguaje

Traductores de lenguaje

Cuando escribimos código en un lenguaje de programación (cualquiera), se requiere de un Traductor de lenguaje para que este código pueda ser entendido por una computadora.

Tradicionalmente los traductores se dividen es dos clases: Intérpretes (Ej: Basic, Bash, Pyton, JavaScript) que traducen cada

sentencia del código fuente (escrito en el lenguaje de programación) en instrucciones en código máquina que son ejecutadas inmediatamente.

Compiladores (Ej: C, C++, Pascal), que traducen todo el código fuente directamente en instrucciones máquina para una determinada plataforma, denominado código objeto.

Los programas generados por un compilador tienden a requerir mucho menos espacio para su ejecución y se ejecutan mucho más rápidamente que los interpretados.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 4

Compiladores

Tipos de lenguajes compilados

de Alto Nivel: (C, Pascal) cada sentencia puede generar muchas instrucciones en lenguaje de máquina. Utiliza un compilador para traducir el código fuente a lenguaje de máquina (técnicamente, código objeto).

de Bajo Nivel: (Assembler) codifican instrucciones simbólicas, cada una de las cuales genera una instrucción en lenguaje de máquina. Utiliza un ensamblador para realizar la traducción al lenguaje de máquina.

Programación en Assembler Ventajas:

– Más control sobre el manejo particular de los requerimientos de hardware (flexibilidad).

– Genera módulos ejecutables más pequeños y compactos (eficiencia).

– Con mayor probabilidad tiene una ejecución más rápida (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 programación y programas fuente más grandes.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 5

Compiladores (cont.)

Una práctica común es combinar los beneficios de ambos niveles de programación, se puede codificar el grueso de un proyecto en un lenguaje de alto nivel y los módulos

críticos (aquellos que provocan notables retardos) en lenguaje Assembler.

El Proceso de Construcción de un archivo ejecutable

1. Ensamblar (Assembling): consiste en la traducción del código fuente en código objeto y la generación de un archivo intermedio .OBJ (objeto), o módulo. El ensamblador crea un encabezado al principiop del módulo .OBJ generado; parte del encabezado tiene información acerca de direcciones incompletas. El módulo .OBJ aún no está en forma ejecutable.

2. Enlazar (Linking): implica convertir el módulo .OBJ en un módulo de código de máquina .EXE (ejecutable). Una de las tareas del enlazador es combinar los programas ensamblados en forma separada en un módulo ejecutable.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 6

Archivo Fuente 1 (.ASM)

Archivo Fuente 2 (.C)

Ensamblador

Compilador

Archivo Objeto 1 (.OBJ)

Archivo objeto 2 (.OBJ)

Archivo Objeto 3 (.OBJ)

Linker Archivo Ejecutable

(.EXE o .COM)

12/10/2011 Clase1 – Introducción al Assembler – Digital II 7

Arquitectura del 8086

Unidad de Ejecución (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 condición.

Unidad de Interface con el Bus (BIU)

4 registros de segmentos CS, DS, SS, ES (de 16 bits).

1 registro de contador de programa (instrucción pointer).

1 unidad de suma para el cálculo de direcciones.

1 cola de pre-carga de instrucciones.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 8

El registro de FLAGS (Processor Status Word)

AF: carry o borrow entre los 4 bits menos significativos.

CF: carry o borrow desde el bit más significativo.

OF: cuando se produce overflow cuando se exceda la capacidad de representación.

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: interrupción presente

TF: modalidad especial de trabajo del CPU (single-step en debugging)

12/10/2011 Clase1 – Introducción al Assembler – Digital II 9

Sintaxis de una instrucción de ASS

El formato de una sentencia de instrucción es el siguiente:

Corchetes: indican que lo especificado entre ellos es opcional.

Campo de etiqueta: Es el nombre simbólico de la primera posición de una instrucción, puntero o dato; permite identificarla unívocamente.

Campo de nombre: Contiene el mnemónico de la instrucción (sigla que representa el código de la instrucción).

Campo de operandos: Indica cuales son los datos implicados en la operación.

Campo de comentarios: Cuando en una línea hay un punto y coma (;) todo lo que sigue en la línea es un comentario.

Existen tres tipos de sentencias:

Instrucciones: se aplican en tiempo de ejecución.

Directivas: sólo son utilizadas durante el ensamblaje, condicionando la forma de actuar del ensamblador, sin generar código de máquina.

Pseudocódigo: generan código de máquina no ejecutable, sólo reservan un espacio de memoria.

Instrucciones de movimiento de datos

MOV (transferencia)

Sintaxis: MOV destino, origen

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); sólo operando origen.

Restricciones:

Ambos operandos de igual dimensión.

No se permite que ambos operandos sean posiciones de memoria.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 10

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

- - - - - - - - -

Instrucciones aritméticas

ADD (suma) y SUB (resta)

Sintaxis: ADD (SUB) destino, origen

Realiza la operación 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); sólo operando origen.

Restricciones:

Ambos operandos de igual dimensión.

No se permite que ambos operandos sean posiciones de memoria.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 11

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

x - - - x x x x x

Instrucciones aritméticas (cont.)

INC (incrementar) y DEC (decrementar)

Sintaxis: INC (DEC) destino

Suma (resta) una unidad del operando destino, tratándolo como un número binario sin signo.

El operando puede ser byte o palabra.

Obsérvese que estas instrucciones no modifican el bit de acarreo (CF) y no es posible detectar un desbordamiento por estos procedimientos (utilícese ZF).

Ejemplo: INC ax

ESTADO INICIAL: ax=22h(34d)

ESTADO POSTERIOR: ax=23h(35d)

12/10/2011 Clase1 – Introducción al Assembler – Digital II 12

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

x - - - x x x x -

Instrucciones aritméticas (cont.)

NEG (negación)

Sintaxis: NEG destino

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

12/10/2011 Clase1 – Introducción al Assembler – Digital II 13

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

x - - - x x x x -

Instrucciones lógicas

NOT (no lógico)

Sintaxis: NOT destino

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

12/10/2011 Clase1 – Introducción al Assembler – Digital II 14

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

- - - - - - - - -

Instrucciones lógicas (cont.)

AND (y lógico) OR (O lógico) XOR (O exclusivo)

Sintaxis: AND(OR)(XOR) destino, origen

Realiza una operación de and(or)(or-EXCLUSIVA) lógico 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 (máscara)

ESTADO POSTERIOR: al=10001000b, bl=10001010b

12/10/2011 Clase1 – Introducción al Assembler – Digital II 15

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

0 - - - x x ? x 0

Instrucciones lógicas (cont.)

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. 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 lógico a la derecha)

Sintaxis: SHR destino, contador

Desplaza a la derecha los bits del operando destino el número de los bits especificados en el segundo operando. Los bits de la izquierda se llenan con cero. El número de bits a desplazar se puede especificar directamente a través de un inmediato o mediante CL.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 16

Instrucciones lógicas (cont.)

SAR (desplazamiento aritmético a la derecha)

Sintaxis: SAR destino, contador

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

12/10/2011 Clase1 – Introducción al Assembler – Digital II 17

Instrucciones lógicas (cont.)

TEST (comparación lógica)

Sintaxis: TEST destino, origen

Realiza una operación Y lógica entre los dos operandos pero sin almacenar el resultado. Los flags son afectados con la operación.

CMP (comparación)

Sintaxis: CMP destino, origen

Realiza la resta destino-origen sin alterar el contenido de destino ningún 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 dimensión.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 18

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

0 - - - x x ? x 0

Flags: OF DF IF TF SF ZF AF PF CF

x - - - x x ? x x

Instrucciones de salto

Salto incondicional: JMP (salto)

Sintaxis: JMP dirección

Transfiere el control incondicionalmente a la dirección indicada en el operando.

No modifica ningún Flag.

Ejemplo: etiqueta:

.... jmp etiqueta

Salto condicional: Jxx (xx condición)

Sintaxis: Jxx dirección

Transfiere el control a la dirección indicada en el operando dirección, de manera condicionada al resultado de una operación previa que modifique el valor de los fags, por ej. CMP.

12/10/2011 Clase1 – Introducción al Assembler – Digital II 19

Instrucciones de salto (cont.)

Saltos condicionales

12/10/2011 Clase1 – Introducción al Assembler – Digital II 20

Instrucción Descripción

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

JAE/JNB Salto si mayor o igual (above or equal), si no menor (not below), si CF=0.

JB/JNAE/JC Salto si menor (below), si no superior ni igual (not above or equal), si acarreo, si CF=1.

JBE/JNA Salto si menor o igual (not below or equal), si no mayor (not above), si CF=1 ó ZF=1.

JCXZ Salto si CX=0.

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

JG/JNLE Salto si mayor (greater), si no menor ni igual (not less or equal), si ZF=0 y SF=OF.

JGE/JNL Salto si mayor o igual (greater or equal), si no menor (not less), si SF=OF.

JL/JNGE Salto si menor (less), si no mayor ni igual (not greater or equal), si SF≠OF.

Instrucciones de salto (cont.)

Saltos condicionales

12/10/2011 Clase1 – Introducción al Assembler – Digital II 21

Instrucción Descripción

JLE/JNG Salto si menor o igual (less or equal), si no mayor (not greater), si ZF=1 y SF=/OF.

JNC Salto si no acarreo, si CF=0.

JNE/JNZ Salto si no igual, si no cero, si ZF=0.

JNO Salto si no desbordamiento, si OF=0.

JNP/JPO Salto si paridad impar, si PF=0.

JNS Salto si no signo, si positivo, si SF=0.

JO Salto si desbordamiento, si OF=1.

JP/JPE Salto si paridad par, si PF=1.

JS Salto si signo, si SF=1.

Instrucción de gestión de bucles

LOOP (bucle)

Sintaxis: LOOP etiqueta

Decrementa el registro contador CX; si CX es cero, ejecuta la siguiente instrucción, en caso contrario transfiere el control a la dirección indicada por etiqueta. El desplazamiento debe estar comprendido entre -128 y +127.

Ejemplo: mov cx,10 bucle: ....... ....... loop bucle

12/10/2011 Clase1 – Introducción al Assembler – Digital II 22

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

- - - - - - - - -

12/10/2011 Clase1 – Introducción al Assembler – Digital II 23

Gracias!