SlideShare une entreprise Scribd logo
1  sur  82
Instrucciones de Pentium
Diseño de Compiladores I
Cursada 2008
                           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.
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)
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)
Registros del Procesador


                EAX
                           AX
                      AH        AL


   31   24 23   16 15      87        0
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
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}
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}.
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
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
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
Instrucciones de transferencia de
control (no afectan los flags)

   JMP label
    Saltar hacia la dirección label.
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.
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.
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.
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.
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.
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.
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).
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).
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).
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).
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)
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)
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
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.
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).
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
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
El coprocesador matemático 80X87
Diseño de Compiladores I
Cursada 2008
                           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.
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).
Juego de instrucciones
del 80X87
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.
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.
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.
Instrucciones de transferencia
de datos

   FXCH
    Intercambia ST(1) y ST.

   FXCH ST(num)
    Intercambia ST(num) y ST.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Instrucciones aritméticas

   FABS
    Pone el signo de ST a positivo (valor absoluto).


   FCHS
    Cambia el signo de ST.
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.
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.
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.
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.
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.
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.
Conversiones
Diseño de Compiladores I
Cursada 2008
                           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     BX     MOV ECX, 0      EBX
                        MOV CX, BX
                        MOV EBX, ECX
32 a 64 bits     EAX    MOV EDX, 0      EDX : EAX
Para
multiplicación
y división
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
Sin signo – Sobre memoria
Conversión Dato Instrucciones         Resultado
8 a 16 bits     D1   MOV AL, D1
                                           D2   D2+1
                     MOV D2, AL
                     MOV AL, 0        D2 D1 0
                     MOV D2 + 1, AL
16 a 32 bits    D2   MOV AX, D2
                                           D4        D4+2
                     MOV D4, AX
                     MOV AX, 0        D4        D2          0
                     MOV D4 + 2, AX
32 a 64 bits    D4   MOV EAX, D4
                                           D8                   D8+4
                     MOV D4,EAX
                     MOV EAX, 0       D8
                     MOV D8 + 4,
                                                     D4                0
                     EAX
Sin signo – Sobre registros
(con control de overflow)


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


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


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

Conversión     Dato   Instrucciones     Resultado
32 a 16 bits   D4      MOV AX, D4 + 2   D2
                       CMP AX, 0
                       JNE ERROR
                       MOV AX, D4
                       MOV D2, AX
                      ERROR:
                       …
Con signo
(datos enteros)

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

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

Conversión    Dato Instrucciones                 Resultado
16 a 8 bits   AX   CMP AX, 0       NEGATIVO:     AL
                    JL              CMP AH, -1
                   NEGATIVO         JNE
                     CMP AH, 0     ERROR
                     JNE ERROR      CMP AL, 0
                     CMP AL, 0      JG ERROR
                     JL ERROR      ERROR:
                     JMP SIGO       …
                                   SIGO:
                                    …
Datos flotantes
(Registro a Memoria)


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

Conversión     Dato   Instrucciones   Resultado
                      FLD D4
32 a 64 bits   D4                     D8 (64 bits)
                      FST D8
                      FLD D8
64 a 32 bits   D8                     D4 (32 bits)
                      FST D4
                      FLD D4
32 a 80 bits   D4                     D10 (80 bits)
                      FSTP D10

…
Conversiones entre datos
enteros y flotantes
Conversión Dato                        Instrucciones Resultado


                 D2                                 ST(0)
Entero a float                         FILD D2
                 (entero de 16 bits)                (flotante)


                 D4                                 ST(0)
Entero a float                         FILD D4
                 (entero de 32 bits)                (flotante)


                 D8                                 ST(0)
Entero a float                         FILD D8
                 (entero de 64 bits)                (flotante)
Conversiones entre datos
enteros y flotantes
Conversión Dato        Instrucciones Resultado


Float a   ST(0)        FIST D2 o    D2
entero    (flotante)   FISTP D2     (entero de 16 bits)


Float a   ST(0)        FIST D4 o    D4
entero    (flotante)   FISTP D4     (entero de 32 bits)


Float a   ST(0)        FIST D8 o    D8
entero    (flotante)   FISTP D8     (entero de 64 bits)
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

Contenu connexe

Tendances

Tendances (17)

Fundamentos de programación librería string C++
Fundamentos de programación librería string C++Fundamentos de programación librería string C++
Fundamentos de programación librería string C++
 
BIBLIOTECAS EN PROGRAMACION
BIBLIOTECAS EN PROGRAMACIONBIBLIOTECAS EN PROGRAMACION
BIBLIOTECAS EN PROGRAMACION
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
Intro a ruby
Intro a rubyIntro a ruby
Intro a ruby
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
Clase1 c
Clase1 cClase1 c
Clase1 c
 
Calculadora casio fx_350_es[1][1][1]
Calculadora casio fx_350_es[1][1][1]Calculadora casio fx_350_es[1][1][1]
Calculadora casio fx_350_es[1][1][1]
 
Calculadora casio fx 350 es[1]
Calculadora casio fx 350 es[1]Calculadora casio fx 350 es[1]
Calculadora casio fx 350 es[1]
 
Caja negra
Caja negraCaja negra
Caja negra
 
2 punteros y lenguaje c
2 punteros y lenguaje c2 punteros y lenguaje c
2 punteros y lenguaje c
 
Apuntes generación de codigo intermedio
Apuntes generación de codigo intermedioApuntes generación de codigo intermedio
Apuntes generación de codigo intermedio
 
Funciones biblioteca
Funciones bibliotecaFunciones biblioteca
Funciones biblioteca
 
Prueba1
Prueba1Prueba1
Prueba1
 
Optimizacion
OptimizacionOptimizacion
Optimizacion
 
Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)Instrucciones(raptor, java, c#)
Instrucciones(raptor, java, c#)
 
Introduccion a C++
Introduccion a C++Introduccion a C++
Introduccion a C++
 
COMANDOS
COMANDOSCOMANDOS
COMANDOS
 

En vedette

Guia de my sql workbench 5 2
Guia de my sql workbench 5 2Guia de my sql workbench 5 2
Guia de my sql workbench 5 2Eduardo Perdomo
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejerciciostestgrupocomex
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchJair Ospino Ardila
 
Crear y Eliminar Bases de datos en MySQL Workbench
Crear y Eliminar  Bases de datos en MySQL WorkbenchCrear y Eliminar  Bases de datos en MySQL Workbench
Crear y Eliminar Bases de datos en MySQL WorkbenchJair Ospino Ardila
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your BusinessBarry Feldman
 

En vedette (7)

Guia de my sql workbench 5 2
Guia de my sql workbench 5 2Guia de my sql workbench 5 2
Guia de my sql workbench 5 2
 
Del Modelo Entidad-Relación al Modelo relacional
Del Modelo Entidad-Relación al Modelo relacionalDel Modelo Entidad-Relación al Modelo relacional
Del Modelo Entidad-Relación al Modelo relacional
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbench
 
Crear y Eliminar Bases de datos en MySQL Workbench
Crear y Eliminar  Bases de datos en MySQL WorkbenchCrear y Eliminar  Bases de datos en MySQL Workbench
Crear y Eliminar Bases de datos en MySQL Workbench
 
MySql slides (ppt)
MySql slides (ppt)MySql slides (ppt)
MySql slides (ppt)
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 

Similaire à 18613352 assembler

Intrucciones 16 bits.pdf
Intrucciones 16 bits.pdfIntrucciones 16 bits.pdf
Intrucciones 16 bits.pdfDaginni78
 
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMAMODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMAgbermeo
 
Organizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamientoOrganizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamientoHarold Torres
 
Organizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoOrganizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoJosé Luis Olivares
 
Registros del procesador
Registros del procesadorRegistros del procesador
Registros del procesadorSaya Otonashi
 
Equipo 6 comparaciones
Equipo 6 comparacionesEquipo 6 comparaciones
Equipo 6 comparacionesgabo
 
MSX88 simulador assembly programación arquitectura de software.ppt
MSX88 simulador assembly programación arquitectura de software.pptMSX88 simulador assembly programación arquitectura de software.ppt
MSX88 simulador assembly programación arquitectura de software.pptmatias387621
 
1 Presentación microprocesador 8088.pptx
1 Presentación microprocesador 8088.pptx1 Presentación microprocesador 8088.pptx
1 Presentación microprocesador 8088.pptxGonzaloGutierrez75
 
Comparativa Intel 8086 Motorola 68000
Comparativa Intel 8086   Motorola 68000Comparativa Intel 8086   Motorola 68000
Comparativa Intel 8086 Motorola 68000guest0f5365
 
microprocesadores y microcontroladores
microprocesadores y microcontroladoresmicroprocesadores y microcontroladores
microprocesadores y microcontroladoresnetmedical
 

Similaire à 18613352 assembler (20)

Tabla de instrucciones asembler
Tabla de instrucciones asemblerTabla de instrucciones asembler
Tabla de instrucciones asembler
 
Intrucciones 16 bits.pdf
Intrucciones 16 bits.pdfIntrucciones 16 bits.pdf
Intrucciones 16 bits.pdf
 
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMAMODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
MODOS DE DIRECIONAMIENTO DE LA MEMORIA DE PROGRAMA
 
Organizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamientoOrganizacion de la unidad central de procesamiento
Organizacion de la unidad central de procesamiento
 
Arquitectura De Los Computadore
Arquitectura De Los ComputadoreArquitectura De Los Computadore
Arquitectura De Los Computadore
 
Organizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamientoOrganizacion-de-la-unidad-central-de-procesamiento
Organizacion-de-la-unidad-central-de-procesamiento
 
Registros del procesador
Registros del procesadorRegistros del procesador
Registros del procesador
 
asm_mododir2.pdf
asm_mododir2.pdfasm_mododir2.pdf
asm_mododir2.pdf
 
Equipo 6 comparaciones
Equipo 6 comparacionesEquipo 6 comparaciones
Equipo 6 comparaciones
 
I S A
I S AI S A
I S A
 
Codificacion
CodificacionCodificacion
Codificacion
 
Asm mododir2
Asm mododir2Asm mododir2
Asm mododir2
 
Esamblador8086
Esamblador8086Esamblador8086
Esamblador8086
 
MSX88 simulador assembly programación arquitectura de software.ppt
MSX88 simulador assembly programación arquitectura de software.pptMSX88 simulador assembly programación arquitectura de software.ppt
MSX88 simulador assembly programación arquitectura de software.ppt
 
Matematicos
MatematicosMatematicos
Matematicos
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Manual80x86
Manual80x86Manual80x86
Manual80x86
 
1 Presentación microprocesador 8088.pptx
1 Presentación microprocesador 8088.pptx1 Presentación microprocesador 8088.pptx
1 Presentación microprocesador 8088.pptx
 
Comparativa Intel 8086 Motorola 68000
Comparativa Intel 8086   Motorola 68000Comparativa Intel 8086   Motorola 68000
Comparativa Intel 8086 Motorola 68000
 
microprocesadores y microcontroladores
microprocesadores y microcontroladoresmicroprocesadores y microcontroladores
microprocesadores y microcontroladores
 

Dernier

IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfssuser50d1252
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfDaniel Ángel Corral de la Mata, Ph.D.
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxJUANCARLOSAPARCANARE
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxEribertoPerezRamirez
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALEDUCCUniversidadCatl
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfManuel Molina
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas123yudy
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsxJuanpm27
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxNataliaGonzalez619348
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 

Dernier (20)

IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdfFichas de matemática DE PRIMERO DE SECUNDARIA.pdf
Fichas de matemática DE PRIMERO DE SECUNDARIA.pdf
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdfTema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
Tema 8.- Gestion de la imagen a traves de la comunicacion de crisis.pdf
 
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptxMonitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
Monitoreo a los coordinadores de las IIEE JEC_28.02.2024.vf.pptx
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMALVOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
VOLUMEN 1 COLECCION PRODUCCION BOVINA . SERIE SANIDAD ANIMAL
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdfTarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
Tarea 5_ Foro _Selección de herramientas digitales_Manuel.pdf
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
periodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicasperiodico mural y sus partes y caracteristicas
periodico mural y sus partes y caracteristicas
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
 
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docxSecuencia didáctica.DOÑA CLEMENTINA.2024.docx
Secuencia didáctica.DOÑA CLEMENTINA.2024.docx
 
recursos naturales america cuarto basico
recursos naturales america cuarto basicorecursos naturales america cuarto basico
recursos naturales america cuarto basico
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 

18613352 assembler

  • 1. Instrucciones de Pentium Diseño de Compiladores I Cursada 2008 Diseño de Compiladores I
  • 2. Registros del procesador Registros de 32 bits:  EAX  EBX  ECX  EDX En una instrucción, se pueden usar 32, 16 u 8 bits.
  • 3. 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)
  • 4. 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)
  • 5. Registros del Procesador EAX AX AH AL 31 24 23 16 15 87 0
  • 6. 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
  • 7. 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}
  • 8. 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}.
  • 9. 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
  • 10. 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
  • 11. 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.
  • 12. 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.
  • 13. 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.
  • 14. 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.
  • 15. 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.
  • 16. 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
  • 17. 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.
  • 18. 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.
  • 19. 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.
  • 20. 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.
  • 21. Instrucciones de transferencia de control (no afectan los flags)  JMP label Saltar hacia la dirección label.
  • 22. 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.
  • 23. 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.
  • 24. 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.
  • 25. 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.
  • 26. 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.
  • 27. 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.
  • 28. 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).
  • 29. 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).
  • 30. 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).
  • 31. 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).
  • 32. 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)
  • 33. 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)
  • 34. 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
  • 35. 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.
  • 36. 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).
  • 37. 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
  • 38. 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
  • 39. El coprocesador matemático 80X87 Diseño de Compiladores I Cursada 2008 Diseño de Compiladores I
  • 40. 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.
  • 41. 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).
  • 43. 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.
  • 44. 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.
  • 45. 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.
  • 46. Instrucciones de transferencia de datos  FXCH Intercambia ST(1) y ST.  FXCH ST(num) Intercambia ST(num) y ST.
  • 47. 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.
  • 48. 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.
  • 49. 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.
  • 50. 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.
  • 51. 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.
  • 52. 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.
  • 53. 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.
  • 54. 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.
  • 55. 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.
  • 56. 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.
  • 57. 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.
  • 58. 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.
  • 59. 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.
  • 60. Instrucciones aritméticas  FABS Pone el signo de ST a positivo (valor absoluto).  FCHS Cambia el signo de ST.
  • 61. 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.
  • 62. 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.
  • 63. 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.
  • 64. 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.
  • 65. 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.
  • 66. 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.
  • 67. Conversiones Diseño de Compiladores I Cursada 2008 Diseño de Compiladores I
  • 68. Sin signo – Sobre registros Conversión Dato Instrucciones Resultado 8 a 16 bits BL MOV BH, 0 BX 16 a 32 bits BX MOV ECX, 0 EBX MOV CX, BX MOV EBX, ECX 32 a 64 bits EAX MOV EDX, 0 EDX : EAX Para multiplicación y división
  • 69. 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
  • 70. Sin signo – Sobre memoria Conversión Dato Instrucciones Resultado 8 a 16 bits D1 MOV AL, D1 D2 D2+1 MOV D2, AL MOV AL, 0 D2 D1 0 MOV D2 + 1, AL 16 a 32 bits D2 MOV AX, D2 D4 D4+2 MOV D4, AX MOV AX, 0 D4 D2 0 MOV D4 + 2, AX 32 a 64 bits D4 MOV EAX, D4 D8 D8+4 MOV D4,EAX MOV EAX, 0 D8 MOV D8 + 4, D4 0 EAX
  • 71. Sin signo – Sobre registros (con control de overflow) Conversión Dato Instrucciones Resultado 16 a 8 bits AX CMP AH, 0 BL JNZ ERROR MOV BL, AL ERROR: …
  • 72. Sin signo – Sobre registros (con control de overflow) Conversión Dato Instrucciones Resultado 32 a 16 bits EAX MOV EBX, 0 CX MOV BX, AX CMP EAX, EBX JNE ERROR MOV CX, AX ERROR: …
  • 73. Sin signo – Sobre memoria (con control de overflow) Conversión Dato Instrucciones Resultado 16 a 8 bits D2 MOV AL, D2 + 1 D1 CMP AL, 0 JNE ERROR MOV AL, D2 MOV D1, AL ERROR: …
  • 74. Sin signo – Sobre memoria (con control de overflow) Conversión Dato Instrucciones Resultado 32 a 16 bits D4 MOV AX, D4 + 2 D2 CMP AX, 0 JNE ERROR MOV AX, D4 MOV D2, AX ERROR: …
  • 75. Con signo (datos enteros) Conversión Dato Instrucciones Resultado 8 a 16 bits CL MOV AL, CL AX CBW 16 a 32 bits BX MOV AX, BX DX:AX CWD 16 a 32 bits DX MOV AX, DX EAX CWDE 32 a 64 bits EBX MOV EAX, EBX EDX:EAX CDQ
  • 76. Con signo (datos enteros) Conversión Dato Instrucciones Resultado 32 a 64 bits ECX MOV EAX, ECX EDX : EAX Para CMP EAX, 0 multiplicaciones JL NEGATIVO y divisiones MOV EDX, 0 JMP SIGO NEGATIVO: MOV EDX, -1 SIGO: …
  • 77. Con signo (datos enteros con control de overflow) Conversión Dato Instrucciones Resultado 16 a 8 bits AX CMP AX, 0 NEGATIVO: AL JL CMP AH, -1 NEGATIVO JNE CMP AH, 0 ERROR JNE ERROR CMP AL, 0 CMP AL, 0 JG ERROR JL ERROR ERROR: JMP SIGO … SIGO: …
  • 78. Datos flotantes (Registro a Memoria) Conversión Dato Instrucciones Resultado 80 a 32 bits FST D4 o ST(0) D4 (32 bits) 64 a 32 bits FSTP D4 80 a 64 bits FST D8 o ST(0) D8 (64 bits) 32 a 64 bits FSTP D8 64 a 80 bits FST D10 o ST(0) D10 (80 bits) 32 a 80 bits FSTP D10
  • 79. Datos flotantes (Memoria a Memoria) Conversión Dato Instrucciones Resultado FLD D4 32 a 64 bits D4 D8 (64 bits) FST D8 FLD D8 64 a 32 bits D8 D4 (32 bits) FST D4 FLD D4 32 a 80 bits D4 D10 (80 bits) FSTP D10 …
  • 80. Conversiones entre datos enteros y flotantes Conversión Dato Instrucciones Resultado D2 ST(0) Entero a float FILD D2 (entero de 16 bits) (flotante) D4 ST(0) Entero a float FILD D4 (entero de 32 bits) (flotante) D8 ST(0) Entero a float FILD D8 (entero de 64 bits) (flotante)
  • 81. Conversiones entre datos enteros y flotantes Conversión Dato Instrucciones Resultado Float a ST(0) FIST D2 o D2 entero (flotante) FISTP D2 (entero de 16 bits) Float a ST(0) FIST D4 o D4 entero (flotante) FISTP D4 (entero de 32 bits) Float a ST(0) FIST D8 o D8 entero (flotante) FISTP D8 (entero de 64 bits)
  • 82. 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