49
PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

Embed Size (px)

Citation preview

Page 1: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 1© Jaime Alberto Parra Plaza

CLASE 9

INSTRUCCIONES ARITMÉTICAS.

GENERACIÓN DE EXPRESIONES

Page 2: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 2© Jaime Alberto Parra Plaza

La instrucción básica en programación es la asignación mediante la cual se ordena a una variable tomar determinado valor. Físicamente esto corresponde a escribir en una posmem el valor indicado.

En forma general, el valor se obtiene al evaluar una expresión. Un ejemplo sería:

z = a * b / ( sin(c) + 1/d )

Page 3: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 3© Jaime Alberto Parra Plaza

EXPRESIONES:Una expresión se construye realizando

operaciones entre variables y constantes.

Las operaciones son del tipo: operador aritmético, evaluación de función, búsqueda en tabla, etc.

Una expresión siempre produce como resultado una constante que se obtiene cambiando cada variable por su valor actual y evaluando el conjunto.

Page 4: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 4© Jaime Alberto Parra Plaza

Un microprocesador convencional sólo viene dotado para realizar operaciones aritméticas.

Para el caso del 8086, los operandos sólo pueden ser de tipo carácter o de tipo entero, esto significa que si se desea realizar operaciones sobre números reales o funciones como raíz cuadrada o tangente, debe crearse una función específica para hacer tal labor.

Page 5: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 5© Jaime Alberto Parra Plaza

INSTRUCCIONES ARITMÉTICAS:

a. Suma:

ADD, ADC, INC, AAA, DAA

b. Resta:

SUB, SBB, DEC, NEG, CMP, AAS, DAS

c. Multiplicación:

MUL, IMUL, AAM

d. División:

DIV, IDIV, AAD, CBW, CWD

Page 6: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 6© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE SUMA (ADD):

Sintaxis:ADD destino, origen

Propósito:Suma destino y origen y guarda el resultado en destino.

Ejemplos: ADD AX, BX ADD AX, var16 ADD BYTE PTR [SI], cte8 ADD WORD PTR [BX],

cte16 ADD CL, CH

Page 7: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 7© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE INCREMENTO (INC):

Sintaxis:INC destino

Propósito:Destino se incrementa en 1.

Ejemplos: INC DHINC var16INC [BX][DI]

Page 8: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 8© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE RESTA (SUB):

Sintaxis:SUB destino, origen

Propósito:Resta de destino a origen y guarda el resultado en destino.

Ejemplos: SUB AL, cte8 SUB WORD PTR [DI], cte16

SUB BYTE PTR var8[BX], cte8 SUB CX, BX

Page 9: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 9© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE DECREMENTO (DEC):

Sintaxis:DEC destino

Propósito:Destino se decrementa en 1.

Ejemplos: DEC ALDEC var16DEC var8[SI]

Page 10: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 10© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE MULTIPLICACIÓN SIN SIGNO (MUL):

Sintaxis:MUL operando

Propósito:Multiplica el operando con el acumulador y guarda el resultado en el acumulador.

Ejemplos: MUL var8MUL CXMUL var16MUL var8[SI][BI]

Page 11: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 11© Jaime Alberto Parra Plaza

El nombre acumulador se aplica a tres entidades: AL, AX y la pareja DX,AX. Se sobreentiende cual es a partir del tamaño de los operandos implicados.

AL es el acumulador de 8 bits (Acc8), AX lo es para operaciones de 16 bits (Acc16) y DX,AX lo es para 32 bits (Acc32). De aquí surge que la multiplicación tenga dos casos:

Page 12: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 12© Jaime Alberto Parra Plaza

Caso a: Multiplicación sobre bytes:

MUL oper8

Acc16 AL * oper8

Caso b: Multiplicación sobre words:

MUL oper16

Acc32 AX*oper16

Page 13: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 13© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE MULTIPLICACIÓN CON SIGNO (IMUL):

Igual a MUL, pero los operandos se asumen signados.

Page 14: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 14© Jaime Alberto Parra Plaza

Ejemplo de multiplicación sin signo:

MUL BL

AH AL BL

antes ??H 45H 82H

después

Page 15: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 15© Jaime Alberto Parra Plaza

Ejemplo de multiplicación sin signo:

MUL BL

AH AL BL

antes ??H 45H 82H

después 23H 0AH 82H

Page 16: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 16© Jaime Alberto Parra Plaza

Ejemplo de multiplicación con signo:

IMUL BL

AH AL BL

antes ??H 45H 82H

después

Page 17: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 17© Jaime Alberto Parra Plaza

Ejemplo de multiplicación con signo:

IMUL BL

AH AL BL

antes ??H 45H 82H

después DEH 0AH 82H

Page 18: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 18© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE DIVISIÓN SIN SIGNO (DIV):

Sintaxis:DIV operando

Propósito:Divide el acumulador entre el operando y guarda el resultado en el acumulador.

Ejemplos: DIV var8DIV CXDIV var16DIV var8[SI][BI]

Page 19: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 19© Jaime Alberto Parra Plaza

Caso a: División word/byte:

DIV oper8

AL Acc16 / oper8

AH Acc16 % oper8

Caso b: División double/word:

DIV oper16

AX Acc32 / oper16

DX Acc32 % oper16

Page 20: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 20© Jaime Alberto Parra Plaza

INSTRUCCIÓN DE DIVISIÓNCON SIGNO (IDIV):

Igual a DIV, pero los operandos se asumen signados.

Page 21: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 21© Jaime Alberto Parra Plaza

Ejemplo de división sin signo:

DIV BL

AH AL BL

antes 12H 45H 82H

después

Page 22: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 22© Jaime Alberto Parra Plaza

Ejemplo de división sin signo:

DIV BL

AH AL BL

antes 12H 45H 82H

después 7FH 23H 82H

Page 23: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 23© Jaime Alberto Parra Plaza

Ejemplo de división con signo:

IDIV BL

AH AL BL

antes 12H 45H 82H

después

Page 24: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 24© Jaime Alberto Parra Plaza

Ejemplo de división con signo:

IDIV BL

AH AL BL

antes 12H 45H 82H

después 0FH DBH 82H

Page 25: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 25© Jaime Alberto Parra Plaza

EXPRESIONES ARITMÉTICAS:

Una expresión aritmética consta de constantes y variables operadas mediante sumas, restas, multiplicaciones y divisiones, tal como la siguiente:

a + b * (5 - c/2) + (7 - x) / (y + 4)

Page 26: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 26© Jaime Alberto Parra Plaza

Las expresiones son útiles en un lenguaje de programación para realizar asignaciones y para realizar condiciones que permiten tomar decisiones.

Ejemplo:

z = a + 5*x; /* expresión de asignación */

if (b + c > d*3 - 9) /* expresión condicional */

Page 27: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 27© Jaime Alberto Parra Plaza

La clave para poder implementar una expresión en ensamblador es entender que el microprocesador sólo puede manejar una variable al tiempo. En consecuencia, una expresión que contenga N variables requerirá, como mínimo, de N instrucciones del microprocesador para llevarla a cabo.

Page 28: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 28© Jaime Alberto Parra Plaza

EJEMPLO 1: int x, y, z;z = x + y;

Aquí se tienen 3 variables, o sea que se requerirán 3 o más instrucciones. El orden de tareas es:

• Primero hacer la suma

• Luego la asignación

Page 29: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 29© Jaime Alberto Parra Plaza

• Suma:

Como son dos variables, se debe guardar una en un registro y después hacer la suma con la otra. La suma debe hacerse de forma que el destino sea un registro para que no se altere el valor original de las variables:

MOV CX, xADD CX, y

Page 30: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 30© Jaime Alberto Parra Plaza

• Asignación:

Puesto que el resultado final de la expresión siempre debe quedar en un registro, el paso último es transferir dicho valor a la variable que guardará el resultado:

MOV z, CX

Page 31: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 31© Jaime Alberto Parra Plaza

USO DE REGISTROS PARA EVALUAR EXPRESIONES:

Para evaluar una expresión es casi imperativo el uso de registros, por la limitación ya establecida de una sola variable en cualquier instrucción.

Es conveniente prestar atención a las siguientes recomendaciones:

Page 32: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 32© Jaime Alberto Parra Plaza

• La anchura del registro debe corresponderse con el tipo de la variable con que se relaciona.

En particular, se tienen registros de 8 y de 16 bits, válidos para interactuar con caracteres o enteros. Variables de más tamaño requieren conjuntos de registros.

Page 33: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 33© Jaime Alberto Parra Plaza

• Cuando las variables en juego son punteros o variables compuestas (arreglos, matrices, cadenas, estructuras, etc.) la indexación debe hacerse con los registros capacitados para tal fin:

BX, SI, DI y BP

Page 34: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 34© Jaime Alberto Parra Plaza

• Algunas operaciones sólo admiten el uso de registros específicos, así que debe tenerse en cuenta esto antes de asignar tareas a los diferentes registros.

En particular, se tiene que el acumulador es el registro requerido para multiplicación y división.

Page 35: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 35© Jaime Alberto Parra Plaza

• La evaluación de una expresión debe hacerse siguiendo el orden de precedencia típico para las operaciones matemáticas:

• Paréntesis• Función• Incremento/Decremento• Multiplicación/División• Suma/Resta

Si existen varias operaciones de la misma precedencia, se evaluarán de izquierda a derecha.

Page 36: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 36© Jaime Alberto Parra Plaza

• El resultado de una expresión debe ajustarse al tamaño de la variable destino, lo cual puede implicar el truncamiento del resultado, con pérdida de información. Esto no debe preocupar al momento de realizar la expresión, pues es tarea del programa (y obviamente del programador) evaluar posteriormente si el valor es correcto.

Page 37: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 37© Jaime Alberto Parra Plaza

• Por más compleja que sea una expresión, la cantidad de registros es suficiente para poder almacenar los resultados parciales, así que sólo en caso extremo se debe recurrir a la pila para tal efecto.

Page 38: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 38© Jaime Alberto Parra Plaza

EJEMPLO 2:char a[10], b[7][7], d;int w, x, y;

d = x * (a[5] - 4/(y-b[3][w]));

Como existen varios paréntesis, el contenido de cada uno se considera como una expresión en si mismo. Se empieza siempre evaluando el paréntesis más interno.

Page 39: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 39© Jaime Alberto Parra Plaza

Primer paréntesis:y - b[3][w]

Como b es una variable compuesta, se usa el direccionamiento basado-indexado. En BX se ubica el valor de la fila (3), afectado por el total de columnas. La w se coloca en SI o en DI. Puesto que este resultado debe usarse como operando más adelante, el registro donde se guarda queda inhabilitado para el resto de la expresión.

Page 40: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 40© Jaime Alberto Parra Plaza

MOV CL, BYTE PTR yMOV BX, 21MOV SI, wSUB CL, b[BX][SI]

El resultado se guarda en CL. Como y es una variable entera, se fuerza su cambio a char con el qualificador byte ptr.

Page 41: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 41© Jaime Alberto Parra Plaza

División: 4 / {resultado anterior}

Por ser una división, el dividendo debe ubicarse en el acumulador. Como se espera un resultado tipo byte, la división es de la forma word/byte.

Page 42: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 42© Jaime Alberto Parra Plaza

MOV AX, 4IDIV CL

Como las variables son signadas, se escoge la orden de división correspondiente; el resultado queda en AL. Puesto que la siguiente operación no es producto ni división no es necesario transferir este resultado a otro registro.

Page 43: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 43© Jaime Alberto Parra Plaza

Resta: a[5] - {resultado anterior}

a es una variable arreglo, pero el índice es una constante, así que no se requiere direccionamiento por registros.

Page 44: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 44© Jaime Alberto Parra Plaza

MOV CL, a[5]SUB CL, AL

CL ya había sido usado para albergar el primer paréntesis. A pesar de que existen otros registros vacíos se volvió a usar CL para indicar el método usual, que consiste en acostumbrarse a usar la menor cantidad posible de registros.

Page 45: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 45© Jaime Alberto Parra Plaza

Multiplicación: x * {resultado anterior}

Por ser un producto, necesariamente debe colocarse uno de los operandos en el acumulador. Se ubicará a x dado que el otro operando ya está en CL.

Page 46: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 46© Jaime Alberto Parra Plaza

MOV AL, BYTE PTR xIMUL CL

De nuevo se usa un casting para acondicionar los operandos al tamaño requerido.El resultado final está ahora en AL (a pesar de que el resultado del producto se ubica en AX).

Page 47: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 47© Jaime Alberto Parra Plaza

Asignación final: d = {resultado anterior}

Simplemente se transfiere el valor obtenido a la variable destino:

MOV d, AL

Page 48: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 48© Jaime Alberto Parra Plaza

PREGUNTA:

• ¿Qué ajustes deben realizarse para poder dividir números de igual longitud (es decir, byte/byte o word/word), para números con y sin signo?.

• ¿Qué mecanismo puede emplearse para dividir números de longitud mayor a 32 bits?

Page 49: PBN - 09 - 1 © Jaime Alberto Parra Plaza CLASE 9 INSTRUCCIONES ARITMÉTICAS. GENERACIÓN DE EXPRESIONES

PBN - 09 - 49© Jaime Alberto Parra Plaza

< FIN DE LA CLASE 9 >