Instrucciones de Pentium

Slides:



Advertisements
Presentaciones similares
Instrucciones de operación sobre datos
Advertisements

Assembler Set de Instrucciones.
REGISTROS INTERNOS DEL PROCESADOR.
CLASE 7 CONJUNTO DE INSTRUCCIONES. TRANSFERENCIA
TEMA 2 Arquitectura de un Ordenador
INSTTUTO TECNOLOGICO DE APIZACO
No. Lista 31 Teresita Ramírez Uribe HORA: 8:00-9:00AM.
MODOS DE DIRECCIONAMIENTO
N.L 32 ROMERO HERNÁNDEZ GABRIELA VERÓNICA. HORA: 8:00-9:00AM ESQUELETO DE UN PROGRAMA EN ENSAMBLADOR.
Integrantes Carlos Junior Salinas Rivera (ILHUICOATL). Comunidad: coatl (serpiente).
Programación en ensamblador
Introducción al lenguaje ensamblador
SEMANA 9_2.
PROG. EN ENSAMBLADOR Ing. Pablo Cesar Tapia Catacora.
Composición Interna de un Procesador
SEMANA 05_2.
Introducción al NASM The Netwide Assembler MIA J. Rafael Rojano C.

Lenguaje Ensamblador integrantes: Esthela Vianey Vázquez Medina No.30
Evidencia no. 5 modos de direccionamiento Paréntesis para poder resolverla ADD OP-DESTINO, OP.FUENTE OP1 OP2 SUMA= ADD ¿Cómo funciona? Op_Destino=Op_Destino+Op.Fuente.
ISA (Instruction Set Architecture)
MODOS DE DIRECCIONAMIENTO No. Lista 21 7am Rivas chacón Ana cristina
MODOS DE DIRECCIONAMIENTO

Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Arquitectura del 8086/8088 El 8086 Arquitectura de computadoras II
ARQUITECTURA DE LOS MICROPROCESADORES DE 8 BITS
MIPS Intermedio.
Introducción al lenguaje ensamblador
2.2 Registro de Banderas Conjunto de bits que nos dan información sobre el estado del procesador y sobre el resultado de la última operación efectuada.
MODOS DE DIRECCIONAMIENTO

1 SEMANA 04_2. 2 OPERADORES ARITMETICOS OPERADOR: + FORMATO: VALOR1 + VALOR2 FUNCION : SUMA VALOR1 Y VALOR2 EJEMPLO : TABLA_MAS_2 DW TABLA + 2 ; (DESPLAZAMIENTO.
Lenguaje Ensamblador Unidad 2
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13.
Arquitectura del 8086/8088 TEEL 4011
Conceptos Arquitectónicos del computador
Lenguaje de Programación cap. 1 Estructura del Computador.
PBN © Jaime Alberto Parra Plaza CLASE 5 LOS SEGMENTOS.
PBN © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES.
Tema 1: DATOS Y REGISTROS
Unidad I: Registros e Interrupciones Facilitador: Ing. Eduardo Brando.
INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos.
MODOS DE DIRECCIONAMIENTO
A este registro se le conoce también como registro de estado. Consta de 16 bits y únicamente 9 de ellos contiene información, indican el estado de la.
introducción al Lenguaje Ensamblador
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Microprocesador (8086) Universidad Nacional de Ingeniería

TEMA 2. ARQUITECTURA IA-32 Lección 1. Arquitectura de los microprocesadores IA-32 Intel Architecture Software Developer’s Manual Vol 1 caps 2.
Términos algoritmo diseñar algoritmo implementar algoritmo
SEMANA 01_2.
No. 26 8:00 a.m. Lenguaje Ensamblador. Segmento de Pila  Model small  stack  Data  Code  mov  mov ds, ax  push ds  …código del programa.
TEMA : ARQUITECTURA DE COMPUTADORAS
introducción al Lenguaje Ensamblador
Unidad Central de Proceso

Aprende el arte de la ingeniería inversa
COMUNIDAD YAQUI! Sikiri#4 Heeka#7 Ba’am#19.
Informática Ingeniería en Electrónica y Automática Industrial
Curso: Fundamentos de Computación
El microprocesador y su arquitectura
Introducción MSc. Rina Arauz.
Lenguaje ensamblador Conceptos introductorios. Formatos de Instrucción. Modos de Direccionamiento. Conjunto de instrucciones básico. Introducción al Lenguaje.
Arquitectura de PCs Lenguaje ASM Intel Lenguaje de máquina y ASM Toda CPU interpreta su código de máquina propio Instrucciones en código de máquina.
Lenguaje ensamblador Resumen en diapositivas
Arranque desde CD en modo de no emulación Instalación y Configuración de Computadores, Redes y Periféricos.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Clase 7 Assembly - Simulador MSX88.
Estas dos líneas de código permiten al Asm iniciar en Code Segment
Transcripción de la presentación:

Instrucciones de Pentium Diseño de Compiladores I Cursada 2009 Diseño de Compiladores I

Registros del procesador Registros de 32 bits: EAX EBX ECX EDX En una instrucción, se pueden usar 32, 16 u 8 bits. Diseño de Compiladores I

Registros del procesador Registros de 16 bits: AX (16 bits menos significativos de EAX) BX (16 bits menos significativos de EBX) CX (16 bits menos significativos de ECX) DX (16 bits menos significativos de EDX) Diseño de Compiladores I

Registros del procesador Registros de 8 bits: AH (8 bits más significativos de AX) AL (8 bits menos significativos de AX) BH (8 bits más significativos de BX) BL (8 bits menos significativos de BX) CH (8 bits más significativos de CX) CL (8 bits menos significativos de CX) DH (8 bits más significativos de DX) DL (8 bits menos significativos de DX) Diseño de Compiladores I

Registros del Procesador EAX AX AH AL 31 24 23 16 15 8 7 0 Diseño de Compiladores I

Registros de segmentos CS (de codigo) – indica el segmento donde están las instrucciones DS (de datos) – indica el segmento donde están las variables SS (de stack) – indica el segmento donde está el stack ES (de strings o general) – para segmentos definidos por usuario Diseño de Compiladores I

Instrucciones de transferencia de datos (no afectan flags) MOV dest,src Copia el contenido del operando fuente (src) en el destino (dest). Operación: dest  src Las posibilidades son: MOV reg,{reg|mem|inmed} MOV mem,{reg|inmed} MOV {reg16|mem16},{CS|DS|ES|SS} MOV {DS|ES|SS},{reg16|mem16} Diseño de Compiladores I

Instrucciones de transferencia de datos (no afectan flags) PUSH src Pone el valor en el tope del stack. Operación: SP  SP - 2, [SP+1:SP]  src donde src = {reg16|mem16|reg32|mem32|CS|DS|ES|SS}. POP dest Retira el valor del tope del stack poniéndolo en el lugar indicado. Operación: dest  [SP+1:SP], SP  SP + 2 donde dest = {reg16|mem16|reg32|mem32|DS|ES|SS}. Diseño de Compiladores I

Instrucciones de transferencia de datos (no afectan flags) LAHF Copia en el registro AH la imagen de los ocho bits menos significativos del registro de indicadores. Operación: AH  SF:ZF:X:AF:X:PF:X:CF SAHF Almacena en los ocho bits menos significativos del registro de indicadores el valor del registro AH. Operación: SF:ZF:X:AF:X:PF:X:CF  AH Diseño de Compiladores I

Instrucciones de transferencia de datos (no afectan flags) PUSHF Almacena los flags en la pila. Operación: SP  SP - 2, [SP+1:SP]  Flags POPF Pone en los flags el valor que hay en la pila. Operación: Flags  [SP+1:SP], SP  SP + 2 Diseño de Compiladores I

Flags CF - Carry flag. Se setea si una operación arimética genera carry. Indica overflow para aritmética de enteros sin signo. PF - Parity flag. Se setea si el byte menos significativo del resultado contiene un número par de bits 1. ZF - Zero flag. Se setea si el resultado es cero. SF - Sign flag. Se setea igual al bit más significativo del resultado, que es el bit de signo de un entero con signo (0 indica un valor positivo y 1 indica un valor negativo). OF - Overflow flag. Se setea si un entero es demasiado grande para números positivos o demasiado pequeño para números negativos (excluyendo el bit de signo) para entrar en el operando destino. Indica una condición de overflow para aritmética de enteros con signo. Diseño de Compiladores I

Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF) ADD dest,src Operación: dest  dest + src. ADC dest,src Operación: dest  dest + src + CF. donde dest = {reg|mem} y src = {reg|mem|inmed} no pudiendo ambos operandos estar en memoria. Diseño de Compiladores I

Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF) SUB dest,src Operación: dest  dest - src. SBB dest,src Operación: dest  dest - src - CF. donde dest = {reg|mem} y src = {reg|mem|inmed} no pudiendo ambos operandos estar en memoria. Diseño de Compiladores I

Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF) CMP dest,src Operación: dest - src (sólo afecta flags). donde dest = {reg|mem} y src = {reg|mem|inmed} no pudiendo ambos operandos estar en memoria. Diseño de Compiladores I

Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF) MUL dest, src donde dest = {reg} y src = {reg|mem} Operandos de 8 bits - dest debe ser AL Realiza una multiplicación con operandos no signados de 8 por 8 bits. El resultado tendrá 16 bits. Operación: AX  AL * {reg8|mem8}. CF=OF=0 si AH = 0, CF=OF=1 en caso contrario. AF, PF, SF, ZF quedan indefinidos. Operandos de 16 bits - dest debe ser AX Realiza una multiplicación con operandos no signados de 16 por 16 bits. El resultado tendrá 32 bits. Operación: DX:AX  AX * {reg16|mem16}. CF=OF=0 si DX = 0, CF=OF=1 en caso contrario. AF, PF, SF, ZF quedan indefinidos. Operandos de 32 bits - dest debe ser EAX Realiza una multiplicación con operandos no signados de 32 por 32 bits. El resultado tendrá 64 bits. Operación: EDX:EAX  EAX * {reg32|mem32}. CF=OF=0 si EDX = 0, CF=OF=1 en caso contrario. AF, PF, SF, ZF quedan indefinidos. Diseño de Compiladores I

Instrucciones aritméticas (Afectan los flags AF, CF, OF, PF, SF, ZF) IMUL dest, src donde dest = {reg} y src = {reg|mem|inmed} Operandos de 8 bits - dest debe ser AL Realiza una multiplicación con operandos con signo de 8 por 8 bits. El resultado tendrá 16 bits. Operación: AX  AL * {reg8|mem8|inmed} realizando la multiplicación con signo. CF = OF = 0 si el resultado entra en un byte, en caso contrario valdrán 1. AF, PF, SF, ZF quedan indefinidos. Operandos de 16 bits - dest debe ser AX Realiza una multiplicación con operandos con signo de 16 por 16 bits. El resultado tendrá 32 bits. Operación: DX:AX  AX * {reg16|mem16|inmed} realizando la multiplicación con signo. CF = OF = 0 si el resultado entra en dos bytes, en caso contrario valdrán 1. AF, PF, SF, ZF quedan indefinidos. Operandos de 32 bits - dest debe ser EAX Realiza una multiplicación con operandos con signo de 32 por 32 bits. El resultado tendrá 64 bits. Operación: EDX:EAX  EAX * {reg32|mem32|inmed} realizando la multiplicación con signo. CF = OF = 0 si el resultado entra en cuatro bytes, en caso contrario valdrán 1. AF, PF, SF, ZF quedan indefinidos Diseño de Compiladores I

Instrucciones aritméticas DIV oper donde oper = {reg|mem} Operando de 8 bits no signado El dividendo debe estar en AX. El resultado tendrá 8 bits. Cociente en AL. Resto en AH. Operando de 16 bits no signado El dividendo debe estar en DX:AX. El resultado tendrá 16 bits. Cociente en AX. Resto en DX. Operando de 32 bits no signado El dividendo debe estar en EDX:EAX. El resultado tendrá 32 bits. Cociente en EAX. Resto en EDX. Diseño de Compiladores I

Instrucciones aritméticas IDIV oper donde oper = {reg|mem} Operando de 8 bits con signo El dividendo debe estar en AX. El resultado tendrá 8 bits. Cociente en AL. Resto en AH. Operando de 16 bits con signo El dividendo debe estar en DX:AX. El resultado tendrá 16 bits. Cociente en AX. Resto en DX. Operando de 32 bits con signo El dividendo debe estar en EDX:EAX. El resultado tendrá 32 bits. Cociente en EAX. Resto en EDX. Diseño de Compiladores I

Instrucciones aritméticas CBW Extiende el signo de AL en AX. No se afectan los flags. CWD Extiende el signo de AX en DX:AX. No se afectan flags. CWDE Extiende el signo de AX en EAX. No se afectan flags. CDQ Extiende el signo de EAX en EDX:EAX. No se afectan flags. Diseño de Compiladores I

Instrucciones lógicas (Afectan los flags AF, CF, OF, PF, SF, ZF) AND dest,src Operación: dest  dest and src. TEST dest,src Operación: dest and src. Sólo afecta flags. OR dest,src Operación: dest  dest or src. XOR dest,src Operación: dest  dest xor src. Las cuatro instrucciones anteriores ponen CF = OF = 0, AF queda indefinido y PF, SF y ZF dependen del resultado. Diseño de Compiladores I

Instrucciones de transferencia de control (no afectan los flags) JMP label Saltar hacia la dirección label. Diseño de Compiladores I

Saltos condicionales aritméticos (usar después de CMP) Aritmética signada (con números positivos, negativos y cero) JL etiqueta /JNGE etiqueta Saltar a etiqueta si es menor. JLE etiqueta /JNG etiqueta Saltar a etiqueta si es menor o igual. Diseño de Compiladores I

Saltos condicionales aritméticos (usar después de CMP) Aritmética signada (con números positivos, negativos y cero) JE etiqueta Saltar a etiqueta si es igual. JNE etiqueta Saltar a etiqueta si es distinto. Diseño de Compiladores I

Saltos condicionales aritméticos (usar después de CMP) Aritmética signada (con números positivos, negativos y cero) JGE etiqueta /JNL etiqueta Saltar a etiqueta si es mayor o igual. JG etiqueta /JNLE etiqueta Saltar a etiqueta si es mayor. Diseño de Compiladores I

Saltos condicionales aritméticos (usar después de CMP) Aritmética sin signo (con números positivos y cero) JB etiqueta /JNAE etiqueta Saltar a etiqueta si es menor. JBE etiqueta /JNA etiqueta Saltar a etiqueta si es menor o igual. Diseño de Compiladores I

Saltos condicionales aritméticos (usar después de CMP) Aritmética sin signo (con números positivos y cero) JE etiqueta Saltar a etiqueta si es igual. JNE etiqueta Saltar a etiqueta si es distinto. Diseño de Compiladores I

Saltos condicionales aritméticos (usar después de CMP) Aritmética sin signo (con números positivos y cero) JAE etiqueta/JNB etiqueta Saltar a etiqueta si es mayor o igual. JA etiqueta/JNBE etiqueta Saltar a etiqueta si es mayor. Diseño de Compiladores I

Saltos condicionales según el valor de los indicadores: JC label Saltar si hubo arrastre/préstamo (CF = 1). JNC label Saltar si no hubo arrastre/préstamo (CF = 0). Diseño de Compiladores I

Saltos condicionales según el valor de los indicadores: JZ label Saltar si el resultado es cero (ZF = 1). JNZ label Saltar si el resultado no es cero (ZF = 0). Diseño de Compiladores I

Saltos condicionales según el valor de los indicadores: JS label Saltar si el signo es negativo (SF = 1). JNS label Saltar si el signo es positivo (SF = 0). Diseño de Compiladores I

Saltos condicionales según el valor de los indicadores: Aritmética signada (con números positivos, negativos y cero) JO label Saltar si hubo desbordamiento (OF = 1). JNO label Saltar si no hubo desbordamiento (OF = 0). Diseño de Compiladores I

Directivas (Instrucciones para el ensamblador) Definición de datos Ubica memoria para un ítem de datos y opcionalmente asocia un nombre simbólico con esa dirección de memoria y/o genera el valor inicial para ese ítem. [nombre] DB valor_inicial [, valor_inicial...] donde valor_inicial puede ser una cadena o una expresión numérica cuyo resultado esté entre -255 y 255. Define datos de 8 bits (1 byte) Diseño de Compiladores I

Directivas (Instrucciones para el ensamblador) Definición de datos [nombre] DW valor_inicial [, valor_inicial...] Define datos de 16 bits (2 bytes) [nombre] DD valor_inicial [, valor_inicial...] Define datos de 32 bits (4 bytes) Diseño de Compiladores I

Directivas (Instrucciones para el ensamblador) Definición de datos [nombre] DQ valor_inicial [, valor_inicial...] define datos de 64 bits (8 bytes) [nombre] DT valor_inicial [, valor_inicial...] define datos de 80 bits (10 bytes) [nombre] DS nro_de_bytes define datos de nro. de bytes Diseño de Compiladores I

Directivas (Instrucciones para el ensamblador) Definición de datos Si se desea que no haya valor inicial, deberá utilizarse el símbolo ?. Otra forma de expresar el valor inicial es: cuenta DUP (valor_inicial [, valor_inicial...]) donde cuenta es la cantidad de veces que debe repetirse lo que está entre paréntesis. Diseño de Compiladores I

Control del ensamblador END [etiqueta]: Debe ser la última sentencia del código fuente. La etiqueta indica dónde debe comenzar la ejecución del programa. Si el programa se compone de varios módulos, sólo el módulo que contiene la dirección de arranque del programa debe contener la directiva END etiqueta. Los demás módulos deberán terminar con la directiva END (sin etiqueta). Diseño de Compiladores I

Estructura de un programa .MODEL small ; Indica el tamaño de programa .STACK 200h ; Inicializa Stack en dir. indicada .DATA ; Indica zona de datos ; Aquí se definen variables y datos .CODE ; Indica inicio zona de código ; Aquí viene el código START: ; Label que indica inicio del “main” mov ax,@data ; Mueve a ds la dirección del segmento de datos mov ds,ax ; utilizando el reg. ax como intermediario … mov ah,4ch ; DOS: termina el programa mov al,0 ; el código de retorno será 0 int 21h ; termina el programa END START Diseño de Compiladores I

Emisión de Mensajes .MODEL small .DATA Mensaje DB ‘Esto es un mensaje$‘ .CODE START: … mov dx,OFFSET Mensaje mov ah,9 int 21h mov ah,4ch ; DOS: termina el programa mov al,0 ; el código de retorno será 0 int 21h ; termina el programa END START Diseño de Compiladores I

El coprocesador matemático 80X87 Diseño de Compiladores I Cursada 2009 Diseño de Compiladores I

Introducción El coprocesador aritmético 80X87 aumenta el juego de instrucciones del 80X86 mejorando su capacidad de tratamiento de números. Se utiliza como procesador paralelo junto al 80X86 añadiendo 8 registros de punto flotante de 80 bits así como instrucciones adicionales. Diseño de Compiladores I

Registros Los ocho registros se organizan como una pila. Los nombres de los registros son ST(0), ST(1), ST(2), ..., ST(7). El nombre simbólico ST (Stack Top) es equivalente a ST(0). Al poner un número en la pila, ST(0) contendrá el número recién ingresado, ST(1) será el valor anterior de ST(0), ST(2) será el valor anterior de ST(1), y así sucesivamente, con lo que se perderá el valor anterior de ST(7). Diseño de Compiladores I

Juego de instrucciones del 80X87 Diseño de Compiladores I

Instrucciones de transferencia de datos FLD mem Introduce una copia de mem en ST. La fuente debe ser un número real en punto flotante de 4, 8 ó 10 bytes. Este operando se transforma automáticamente al formato real temporal. FLD ST(num) Introduce una copia de ST(num) en ST. FILD mem Introduce una copia de mem en ST. La fuente debe ser un operando de memoria de 2, 4 u 8 bytes, que se interpreta como un número entero y se convierte al formato real temporal. Diseño de Compiladores I

Instrucciones de transferencia de datos FST mem Copia ST a mem sin afectar el puntero de pila. El destino puede ser un operando real de 4, 8 o 10 bytes. FST ST(num) Copia ST al registro especificado. FIST mem Copia ST a mem. El destino debe ser un operando de 2, 4 u 8 bytes y se convierte automáticamente el número en formato temporal real a entero. Diseño de Compiladores I

Instrucciones de transferencia de datos FSTP mem Extrae una copia de ST en mem. El destino puede ser un operando de memoria de 4, 8 ó 10 bytes, donde se carga el número en punto flotante. FSTP ST(num) Extrae ST hacia el registro especificado. FISTP mem Extrae una copia de ST en mem. El destino debe ser un operando de memoria de 2, 4 u 8 bytes y se convierte automáticamente el número en formato temporal real a entero. Diseño de Compiladores I

Instrucciones de transferencia de datos FXCH Intercambia ST(1) y ST. FXCH ST(num) Intercambia ST(num) y ST. Diseño de Compiladores I

Instrucciones de carga de constantes FLDZ Introduce el número cero en ST. FLD1 Introduce el número uno en ST. FLDPI Introduce el valor de pi en ST. Diseño de Compiladores I

Instrucciones aritméticas FADD Hace ST(1) más ST, ajusta el puntero de pila y pone el resultado en ST, por lo que ambos operandos se destruyen. FADD mem Hace ST  ST + [mem]. En mem deberá haber un número real en punto flotante. FIADD mem Hace ST  ST + [mem]. En mem deberá haber un número entero en complemento a dos. Diseño de Compiladores I

Instrucciones aritméticas FADD ST(num), ST Realiza ST(num)  ST(num) + ST. FADD ST, ST(num) Realiza ST  ST + ST(num). FADDP ST(num), ST Realiza ST(num)  ST(num) + ST y retira el valor de ST de la pila, con lo que ambos operandos se destruyen. Diseño de Compiladores I

Instrucciones aritméticas FSUB Hace ST(1) menos ST, ajusta el puntero de pila y pone el resultado en ST, por lo que ambos operandos se destruyen. FSUB mem Hace ST  ST - [mem]. En mem deberá haber un número real en punto flotante. FISUB mem Hace ST  ST - [mem]. En mem deberá haber un número entero en complemento a dos. Diseño de Compiladores I

Instrucciones aritméticas FSUB ST(num), ST Realiza ST(num)  ST(num) - ST. FSUB ST, ST(num) Realiza ST  ST - ST(num). FSUBP ST(num), ST Realiza ST(num)  ST(num) - ST y retira el valor de ST de la pila, con lo que ambos operandos se destruyen. Diseño de Compiladores I

Instrucciones aritméticas FSUBR Hace ST menos ST(1), ajusta el puntero de pila y pone el resultado en ST, por lo que ambos operandos se destruyen. FSUBR mem Hace ST  [mem] - ST. En mem deberá haber un número real en punto flotante. FISUBR mem Hace ST  [mem] - ST. En mem deberá haber un número entero en complemento a dos. Diseño de Compiladores I

Instrucciones aritméticas FSUBR ST(num), ST Realiza ST(num)  ST - ST(num). FSUBR ST, ST(num) Realiza ST  ST(num) - ST. FSUBRP ST(num), ST Realiza ST(num)  ST - ST(num) y retira el valor de ST de la pila, con lo que ambos operandos se destruyen. Diseño de Compiladores I

Instrucciones aritméticas FMUL Multiplicar el valor de ST(1) por ST, ajusta el puntero de pila y pone el resultado en ST, por lo que ambos operandos se destruyen. FMUL mem Hace ST  ST * [mem]. En mem deberá haber un número real en punto flotante. FIMUL mem Hace ST  ST * [mem]. En mem deberá haber un número entero en complemento a dos. Diseño de Compiladores I

Instrucciones aritméticas FMUL ST(num), ST Realiza ST(num)  ST(num) * ST. FMUL ST, ST(num) Realiza ST  ST * ST(num). FMULP ST(num), ST Realiza ST(num)  ST(num) * ST y retira el valor de ST de la pila, con lo que ambos operandos se destruyen. Diseño de Compiladores I

Instrucciones aritméticas FDIV Dividir el valor de ST(1) por ST, ajusta el puntero de pila y pone el resultado en ST, por lo que ambos operandos se destruyen. FDIV mem Hace ST  ST / [mem]. En mem deberá haber un número real en punto flotante. FIDIV mem Hace ST  ST / [mem]. En mem deberá haber un número entero en complemento a dos. Diseño de Compiladores I

Instrucciones aritméticas FDIV ST(num), ST Realiza ST(num)  ST(num) / ST. FDIV ST, ST(num) Realiza ST  ST / ST(num). FDIVP ST(num), ST Realiza ST(num)  ST(num) / ST y retira el valor de ST de la pila, con lo que ambos operandos se destruyen. Diseño de Compiladores I

Instrucciones aritméticas FDIVR Hace ST dividido ST(1), ajusta el puntero de pila y pone el resultado en ST, por lo que ambos operandos se destruyen. FDIVR mem Hace ST  [mem] / ST. En mem deberá haber un número real en punto flotante. FIDIVR mem Hace ST  [mem] / ST. En mem deberá haber un número entero en complemento a dos. Diseño de Compiladores I

Instrucciones aritméticas FDIVR ST(num), ST Realiza ST(num)  ST / ST(num). FDIVR ST, ST(num) Realiza ST  ST(num) / ST. FDIVRP ST(num), ST Realiza ST(num)  ST / ST(num) y retira el valor de ST de la pila, con lo que ambos operandos se destruyen. Diseño de Compiladores I

Instrucciones aritméticas FABS Pone el signo de ST a positivo (valor absoluto). FCHS Cambia el signo de ST. Diseño de Compiladores I

Control del flujo del programa FCOM Compara ST y ST(1). FCOM ST(num) Compara ST y ST(num). FCOM mem Compara ST y mem. El operando de memoria deberá ser un número real. FICOM mem Compara ST y mem. El operando deberá ser un número entero. Diseño de Compiladores I

Control del flujo del programa FTST Compara ST y cero. FCOMP Compara ST y ST(1) y extrae ST fuera de la pila. FCOMP ST(num) Compara ST y ST(num) y extrae ST fuera de la pila. FCOMP mem Compara ST y mem y extrae ST fuera de la pila. El operando de memoria deberá ser un número real. Diseño de Compiladores I

Control del flujo del programa FICOMP mem Compara ST y mem y extrae ST fuera de la pila. El operando deberá ser un número entero. FCOMPP Compara ST y ST(1) y extrae dos elementos de la pila, perdiéndose ambos operandos. Diseño de Compiladores I

Instrucciones de transferencia de datos de control FLDCW mem2byte Carga la palabra de control desde la memoria. FSTCW mem2byte Almacena la palabra de control en la memoria. FSTSW mem2byte Almacena la palabra de estado en la memoria. Diseño de Compiladores I

Control del Procesador F[N]INIT Inicializa el coprocesador y restaura todas las condiciones iniciales en las palabras de control y de estado. Es una buena idea utilizar esta instrucción al principio y al final del programa. F[N]CLEX Pone a cero los indicadores de excepción y el indicador de ocupado de la palabra de estado. También limpia el indicador de pedido de interrupción del 8087. Diseño de Compiladores I

Control del Procesador FREE ST(num) Marca el registro especificado como vacío. FNOP Copia ST a sí mismo tomando tiempo de procesamiento sin tener ningún efecto en registros o memoria. Diseño de Compiladores I

Diseño de Compiladores I Cursada 2009 Conversiones Diseño de Compiladores I Cursada 2009 Diseño de Compiladores I

Sin signo – Sobre registros Conversión Dato Instrucciones Resultado 8 a 16 bits BL MOV BH, 0 BX 16 a 32 bits MOV ECX, 0 MOV CX, BX MOV EBX, ECX EBX 32 a 64 bits Para multiplicación y división EAX MOV EDX, 0 EDX : EAX Diseño de Compiladores I

Sin signo – Sobre memoria Datos Tamaños D1 DB ? 8 bits D2 DW ? 16 bits D4 DD ? 32 bits D8 DQ ? 64 bits D10 DT ? 80 bits Diseño de Compiladores I

Sin signo – Sobre memoria Conversión Dato Instrucciones Resultado 8 a 16 bits D1 MOV AL, D1 MOV D2, AL MOV AL, 0 MOV D2 + 1, AL D2 16 a 32 bits MOV AX, D2 MOV D4, AX MOV AX, 0 MOV D4 + 2, AX D4 32 a 64 bits MOV EAX, D4 MOV D4,EAX MOV EAX, 0 MOV D8 + 4, EAX D8 D2 D2+1 D1 D4 D4+2 D2 D8 D8+4 D4 Diseño de Compiladores I

Sin signo – Sobre registros (con control de overflow) Conversión Dato Instrucciones Resultado 16 a 8 bits AX CMP AH, 0 JNZ ERROR MOV BL, AL ERROR: … BL Diseño de Compiladores I

Sin signo – Sobre registros (con control de overflow) Conversión Dato Instrucciones Resultado 32 a 16 bits EAX MOV EBX, 0 MOV BX, AX CMP EAX, EBX JNE ERROR MOV CX, AX ERROR: … CX Diseño de Compiladores I

Sin signo – Sobre memoria (con control de overflow) Conversión Dato Instrucciones Resultado 16 a 8 bits D2 MOV AL, D2 + 1 CMP AL, 0 JNE ERROR MOV AL, D2 MOV D1, AL ERROR: … D1 Diseño de Compiladores I

Sin signo – Sobre memoria (con control de overflow) Conversión Dato Instrucciones Resultado 32 a 16 bits D4 MOV AX, D4 + 2 CMP AX, 0 JNE ERROR MOV AX, D4 MOV D2, AX ERROR: … D2 Diseño de Compiladores I

Con signo (datos enteros) Conversión Dato Instrucciones Resultado 8 a 16 bits CL MOV AL, CL CBW AX 16 a 32 bits BX MOV AX, BX CWD DX:AX DX MOV AX, DX CWDE EAX 32 a 64 bits EBX MOV EAX, EBX CDQ EDX:EAX Diseño de Compiladores I

Con signo (datos enteros) Conversión Dato Instrucciones Resultado 32 a 64 bits Para multiplicaciones y divisiones ECX MOV EAX, ECX CMP EAX, 0 JL NEGATIVO MOV EDX, 0 JMP SIGO NEGATIVO: MOV EDX, -1 SIGO: … EDX : EAX Diseño de Compiladores I

Con signo (datos enteros con control de overflow) Conversión Dato Instrucciones Resultado 16 a 8 bits AX CMP AX, 0 JL NEGATIVO CMP AH, 0 JNE ERROR CMP AL, 0 JL ERROR JMP SIGO NEGATIVO: CMP AH, -1 JG ERROR ERROR: … SIGO: AL Diseño de Compiladores I

Datos flotantes (Registro a Memoria) Conversión Dato Instrucciones Resultado 80 a 32 bits 64 a 32 bits ST(0) FST D4 o FSTP D4 D4 (32 bits) 80 a 64 bits 32 a 64 bits FST D8 o FSTP D8 D8 (64 bits) 64 a 80 bits 32 a 80 bits FST D10 o FSTP D10 D10 (80 bits) Diseño de Compiladores I

Datos flotantes (Memoria a Memoria) Conversión Dato Instrucciones Resultado 32 a 64 bits D4 FLD D4 FST D8 D8 (64 bits) 64 a 32 bits D8 FLD D8 FST D4 D4 (32 bits) 32 a 80 bits FSTP D10 D10 (80 bits) … Diseño de Compiladores I

Conversiones entre datos enteros y flotantes Conversión Dato Instrucciones Resultado Entero a float D2 (entero de 16 bits) FILD D2 ST(0) (flotante) D4 (entero de 32 bits) FILD D4 D8 (entero de 64 bits) FILD D8 Diseño de Compiladores I

Conversiones entre datos enteros y flotantes Conversión Dato Instrucciones Resultado Float a entero ST(0) (flotante) FIST D2 o FISTP D2 D2 (entero de 16 bits) FIST D4 o FISTP D4 D4 (entero de 32 bits) FIST D8 o FISTP D8 D8 (entero de 64 bits) Diseño de Compiladores I

Conversiones entre datos con y sin signo Origen: con signo – Destino: sin signo Origen positivo, se puede Origen negativo, es error Origen: sin signo – Destino: con signo Se debe testear overflow Primer bit = 0, se puede Primer bit = 1, es overflow Diseño de Compiladores I