• No se han encontrado resultados

Departamento de Sistemas e Informática

N/A
N/A
Protected

Academic year: 2021

Share "Departamento de Sistemas e Informática"

Copied!
23
0
0

Texto completo

(1)

Programación en Assembler - Clase 1

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)

(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)

(4)

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

(5)

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

(6)

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.

Archivo Fuente 1 (.ASM) Archivo Fuente 2 (.C) Ensamblador Compilador Archivo Objeto 1 (.OBJ) Archivo objeto 2 (.OBJ) Archivo Objeto 3 (.OBJ)

(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).

(8)

12/10/2011 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

(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.

(10)

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.

- NO MODIFICA X MODIFICA ? INDEFINIDO

(11)

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.

- NO MODIFICA X MODIFICA ? INDEFINIDO

(12)

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)

- NO MODIFICA X MODIFICA ? INDEFINIDO

Flags: OF DF IF TF SF ZF AF PF CF

(13)

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

- NO MODIFICA X MODIFICA ? INDEFINIDO

(14)

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

- NO MODIFICA X MODIFICA ? INDEFINIDO

(15)

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

- NO MODIFICA X MODIFICA ? INDEFINIDO

(16)

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

(17)

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

(18)

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.

(19)

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: J

xx

(

xx

condición)

Sintaxis:

J

xx

dirección

 Transfiere el control a la dirección indicada en el operando

(20)

Instrucciones de salto (cont.)

Saltos condicionales

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.

(21)

Instrucciones de salto (cont.)

Saltos condicionales

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.

(22)

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

(23)

Referencias

Documento similar

“arbitrariamente” que se encontraba incorporado en la definición del dominio en el artículo 669 del Código Civil, todo esto en sentencia C-595 de 1999, en razón de que este

cv.wait espera hasta que reciba una notifiación, entonces hace lock con el mutex y pregunta por la condición (lambda).. Variables

"No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

El rango de valores de una variable float es mucho ma- yor, y si el valor de la variable es mayor que el valor máximo del do- minio de los enteros de 4 bytes, entonces el resultado

Los lenguajes de programación de una computadora en particular se conocen como código de máquinas o lenguaje de máquinas y son los que permiten al programador por medio de un

Para la programación del PIC se ha usado un compilador en C para PICs PCWH CCS versión 4.104, cuya potencia del lenguaje C se aprovecha para compilarlo a lenguaje máquina

Si además la superficie se compone de múltiples parches (situación usual en el diseño naval), la curvatura permite no sólo evaluar la suavidad de los parches individuales

Una vez realizado el análisis de herramientas disponibles para la generación de aplicaciones Android, se han seleccionado 2 de ellas y se ha realizado la misma