Expo Aritmetica

September 1, 2017 | Author: Karen C. Espinosa de los Monteros | Category: Division (Mathematics), Bit, Assembly Language, Multiplication, Subtraction
Share Embed Donate


Short Description

Download Expo Aritmetica...

Description

INSTITUTO TECNOLOGICO DE MORELIA “José Ma. Morelos y Pavón”

INSTRUCCIONES ARITMETICAS

RESUMEN BREVE Las instrucciones más comunes, utilizadas para las operaciones algebraicas son: para sumar add, para restar sub, para multiplicar mul y para dividir div. Un operando que contiene cualquier lenguaje de programación es la suma. En ensamblador la sintaxis para esta es: ADD dest, origen. Existen varios formatos para esta instrucción, así como, otras instrucciones que la afectan tales como NEG (invierte el signo de un número).La instrucción ADD afecta a las banderas de: Acarreo, Desbordamiento, Cero, Signo, Paridad, Acarreo Auxiliar. También conoceremos sobre la resta que es muy parecida a la suma aunque para tomar el signo negativo se toma el complemento A dos, y al igual que la suma afecta a ciertas banderas. Otro operando es la multiplicación. Existen dos tipos de multiplicaciones que entiende el procesador: 1.- Los que comienzan con una “I” operan con números con signo (si queremos usar números negativos) 2.- Los que no, con números sin signo. En ensamblador la sintaxis para esta es: MUL fuente y IMUL fuente respectivamente. La instrucción MUL (IMUL) afecta a las banderas de: Acarreo, Desbordamiento. Tipos de multiplicación: byte por byte, palabra por palabra y palabra doble por palabra doble. Y para finalizar pero no menos importante la división que al igual que con la suma puede ser con signo o sin el. Y que hay diferentes maneras de dividir : palabra por byte, doble palabra por palabra y cuádruple palabra por doble palabra

ALUMNOS: YURITZI GIL ALTAMIRANO

No. DE CONTROL: 08120079

BRISEIDA ATZIRI ZARAGOZA SALAS

No. DE CONTROL: 08120125

LUNES 20 DE SEPTIEMBRE DE 2010

1

INDICE INTRODUCCION………………………………………………………………..3 Instrucciones Aritméticas………………………………………………………...4  Suma y Resta ……………………………………………………………..4  Instrucción ADD………………………………………………….4  Formato de Instrucciones………………………………...5  Operando NEG…………………………………………...5  Operando INC………………………………………….....6  Instrucción SUB…………………………………………………..6  Formato de Instrucciones.………………………………..7  Banderas afectadas por la suma y la resta………………………8  Multiplicación y División…………………………………………………8  Instrucción MUL……………………………………….…………8  Formato de Instrucciones……………………….………...9  Banderas afectadas por la suma……………….…………9  Operaciones básicas de la multiplicación……..………….9  Instrucción DIV…………………………………………………..11  Formato de Instrucciones………………………………..11  Operaciones de división básicas…………………………11  Tamaño del campo……………………………………….13  Suma y Multiplicación con punto decimal………………..…………….14  Generalidades……………………………………….……………14  Sintaxis……………………………………………………………14  Ejemplos Generales………………………….…………………………...14  Conclusiones………………………………………………………..…….16  Referencias……………………………………………………………….17

2

INTRODUCCION En este reporte podremos aprender sobre el manejo de las operaciones aritméticas como lo son la suma, resta, multiplicación y división. La manera en que la computadora las realiza y el formato que tienen que tener dependiendo del tipo de datos o acción que se desea realizar. Así como también podremos observar que no es lo mismo tomar un dato con signo negativo o positivo, ya que esto cambia la instrucción y manera de realizar las operaciones. También podremos observar varios ejemplos de cada una de estas operaciones para poder tener en claro este tema.

3

INSTRUCCIONES ARITMETICAS Estas se usan para realizar operaciones aritméticas sobre los operandos. Las instrucciones más comunes, utilizadas para las operaciones algebraicas son: para sumar add, para restar sub, para multiplicar mul y para dividir div. Otras no tan utilizadas pero igual de importantes: ADC, IDIV, IMUL, SBB.1

SUMA Y RESTA Instrucción ADD Se trata de un operando que contiene cualquier lenguaje de programación: la suma. Tiene dos operandos, uno de destino y otro fuente, que son del mismo tamaño. Para la suma, se suman los dos operandos y se almacena en el primero (destino). La sintaxis es: ADD dest, origen----------------------suma un operando de origen con uno de destino del mismo tamaño. Por lo tanto: origen: permanece sin cambio en la operación. dest: la suma se almacena en el operando destino; 

EJEMPLO: .data var1 DWORD 10000h var2 DWORD 20000h .code mov eax, var1 add eax, var2

eax = 10000h eax = 30000h

1

Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / México 2008

4

Formato de instrucciones ADD AX, BX; -----------------------------Sumaría AX y BX y lo guardaría en AX. ADD [AX], BX; ---------------------------Suma el contenido de la dirección de AX a BX, y se almacena en la dirección de AX. ADD AX, [BX]; ---------------------------Se suman AX y el contenido de la dirección BX y se almacena, esta suma en AX. ADD AX, 3; -------------------- ----------Lo mismo pero utilizando un valor inmediato en vez de la BX señalada anteriormente.

Otras SINTAXIS: ADC destino, fuente PROPOSITO: Adición con acarreo. Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF este activada, esto es, en caso de que exista acarreo. El resultado se guarda en el operando destino. NOTA: Si el resultado excede lo que puede contener un byte, o la palabra, esto se puede saber mediante los flags.

Operando NEG La instrucción NEG (negación) invierte el signo de un número, convirtiéndolo en su complemento a dos.2 NEG pone el registro o el lugar al que apunta en memoria en negativo, según la aritmética de complemento a dos tal que: NEG AX; o NEG [AX];

2

http://platea.pntic.mec.es/jdelucas/ensamblador.htm

5

Operando INC La instrucción INC (incremento) suma 1 de un solo operando, respectivamente. La sintaxis es: INC reg/men 

EJEMPLO: .data miPalabra WORD 1000h .code inc miPalabra mov bx, miPalabra dec bx

; 1001h ; 1000h

Las banderas Desbordamiento, Signo, Cero, Acarreo auxiliar y Paridad cambian de acuerdo al valor del operando de destino. No afectan ala bandera Acarreo (lo cual es un poco sorprendente).

Instrucción SUB La instrucción SUB resta un operado de origen a un operado de destino. El conjunto de posibles operaciones es el mismo que para la instrucción ADD Sintaxis: SUB destino, origen Ejemplo: La manera de realizar esta resta es utilizando el complemento A dos para los números negativos. Como en el ejemplo siguiente: 4-1= 4+(-1) Para representar el -1 en complemento a dos se representa en 8 bits el número, después se cambian los 1s por 0s y los 0s por 1s, para al final sumarle un 1 y ya es el complemento A dos: 0000001  representación del numero 1 11111110  cambiando ceros por unos y viceversa

6

11111110 +00000001 se le suma un 1 al cambio de ceros y unos --------------11111111  complemento A dos

Esto es la manera en como lo realiza la computadora. Pero ahora mostraremos como seria en lenguaje ensamblador .data var1 DWORD 30000h var2 DWORD 10000h .code mov eax, var1 ; EAX=30000h sub eax, var2 ; EAX=20000h3

Formato de instrucciones FORMATOS SUB reg,inmediato SUB mem,inmediato SUB reg,reg

EJEMPLOS SUB AX,3500 SUB BYTE PTR [SI],35 SUB BX,DX

3

Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / México 2008

7

SUB SUB

mem,reg reg,mem

SUB [BX],AX SUB AH,[BX]4

Banderas afectadas por la suma y la resta Al ejecutar instrucciones aritméticas, a menudo es conveniente saber algo acerca del resultado (es negativo, positivo o cero), (es demasiado grande o demasiado pequeño para caber en el operando de destino), esto nos puede ayudar a detectar errores de cálculo que de otra manera podrían ocasionar un comportamiento errático. Utilizamos los valores de las banderas de estado de la CPU para comprobar el resultado de las operaciones aritméticas. Tales como:      

La Bandera Acarreo. La Bandera Desbordamiento. La Bandera Cero. La Bandera Signo. La Bandera Paridad. La Bandera Acarreo Auxiliar.5

MULTIPLICACION Y DIVISION Instrucción MUL Estas operaciones multiplican al acumulador por el operando indicado. Si el operando es de 8 bits (1 byte), el acumulador es AL. Si el operando es de 16 bits, el acumulador es AX. El resultado se almacena en AX o en el par DX-AX respectivamente, si el operando es de 8 bits o 16 bits. Existen dos tipos de multiplicaciones que entiende el procesador: 1.- Los que comienzan con una “I” operan con números con signo (si queremos usar números negativos). 2.- Los que no, con números sin signo 4

http://club.telepolis.com/mydream/Asm/ASM7.html Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / México 2008 5

8

Formato de instrucciones SINTAXIS: MUL fuente PROPOSITO: Multiplicación sin signo. El ensamblador asume que el multiplicando será del mismo tamaño que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits. Cuando se realiza una multiplicación de 8 bits el resultado se almacena en el registro par DX: AX. SINTAXIS: IMUL fuente PROPOSITO: Multiplicación de dos enteros con signo. Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican. Los resultados se guardan en los mismos registros que en la instrucción MUL.6

Banderas afectadas por la multiplicación Las instrucciones MUL y IMUL afectan las banderas de:  La Bandera de Acarreo.  La Bandera de Desbordamiento.

Operaciones básicas de la multiplicación Las operaciones de multiplicación básicas son byte a byte, palabra por palabra y palabras dobles por palabras dobles.  BYTE POR BYTE

6

PROGRAMACION EN LENGUAJE ENSAMBLADOR / William H. Murray y Chris H. Pappas / Edit. McGRAWHILL

9

Para multiplicar dos números de un byte, el multiplicando esta en el registro AL y el multiplicador es un byte en memoria o en otro registro. Para la instrucción MUL DL, la operación multiplica el contenido de AL por el contenido del DL. El producto generado esta en el registro AX. La operación ignora y borra cualquier información que pueda estar en el AH.  PALABRA POR PALABRA Para multiplicar dos números de una palabra, el multiplicando esta en el registro AX y el multiplicador es una palabra en memoria o en otro registro. Para la instrucción MUL DX, la operación multiplica el contenido de AX por el contenido de DX. El producto generado es una palabra doble que necesita dos registros: la parte de orden alto (mas ala izquierda) en el DX y la parte de orden bajo (mas ala derecha) en el AX. La operación ignora y borra cualquier información que pueda estar en el DX.  PALABRA DOBLE POR PALABRA DOBLE Para multiplicar dos números de palabras dobles, el multiplicando esta en el registro EAX y el multiplicador es una palabra doble en memoria o en otro registro. El producto es generado en el par EDX- EAX. La operación ignora y borra cualquier información que ya este en el EDX. En los ejemplos siguientes, el multiplicador esta en un registro, el cual especifica el tipo de operación:

INSTRUCCION

MULTIPLICADOR

MUL CL MUL BX MUL EBX

byte palabra palabra doble

MULTIPLICANDO AL AX EAX

PRODUCTO AX DX:AX EDX:EAX

En los ejemplos siguientes, los multiplicadores están definidos en memoria: BYTE1 DB WORD1 DW DWORD1 DD

? ? ?

10

OPERACION MUL BYTE1 MUL WORD1 MUL DWORD1

MULTIPLICADOR BYTE1 WORD1 DWORD1

MULTIPLIANDO AL AX EAX

PRODUCTO AX DX:AX EDX:EAX7

Instrucción DIV Existen dos tipos de división sin signo y con signo (DIV/IDIV respectivamente. El formato general es: [etiqueta: ] IDIV/DIV {registro/memoria}

Formato de instrucciones Instrucción DIV Propósito: División sin signo Sintaxis: DIV fuente El divisor puede ser un byte o palabra y es el operando que se le da a la instrucción. Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX:AX, tomando como palabra alta DX y como baja AX. Si el divisor fue un byte el cociente se almacena en el registro AL y el residuo en AH, si fue una palabra el cociente se guarda en AX y el residuo en DX. Instrucción IDIV Propósito: División con signo Sintaxis: IDIV fuente Consiste básicamente en lo mismo que la instrucción DIV, solo que esta última realiza la operación con signo utilizando el complemento A dos. Para sus resultados utiliza los mismos registros que la instrucción DIV.

Operaciones de división básicas 7

http://foro.portalhacker.net/index.php/topic,73143.30/wap2.html

11

Las operaciones de división básicas con palabra entre byte, palabra doble entre palabra y palabra cuádruple entre palabra doble.  PALABRA ENTRE BYTE Aquí el dividendo esta en el AX y el divisor es un byte en memoria o en otro registro. Después de la división, el residuo esta en el AH y el cociente esta en el AL. Ya que un cociente de un byte es muy pequeño -si es sin signo, un máximo de +255 (FFH) y con signo +127 (7FH)- esta operación tiene un uso limitado.

 PALABRA DOBLE ENTRE PALABRA Para esta operación, el dividendo esta en el par DX:AX y el divisor es una palabra en memoria o en otro registro. Después de la división, el residuo esta en el DX y el cociente esta en el AX. El cociente de una palabra permite para datos sin signo un máximo de +32, 767 (FFFFH) y con signo +16, 383 (7FFFH). Tenemos:

 PALABRA CUÁDRUPLE ENTRE PLABRA DOBLE Al dividir una palabra cuádruple entre una palabra doble, el dividendo esta en el par EDX:EAX y el divisor está en una palabra doble en memoria o en otro registro. Después de la división, el residuo esta en el EDX y el cociente en el EAX.

12

Tamaños del campo El operador DIV o de IDIV hace referencia al divisor, que especifica el tamaño del campo. En los ejemplos siguientes de DIV, los divisores están en un registro, que determina el tipo de operación:

OPERACION

DIVISOR

DIVIDENDO

DIV CL DIV CX DIV EBX

byte palabra palabra doble

COCIENTE

AX DX:AX EDX:EAX

AL Ax EAX

RESIDUO AH DX EDX

En los ejemplos siguientes de DIV, los divisores están definidos en memoria:

BYTE1 DB WORD1 DW DWORD1 DD ...

? ? ? DIVISOR

DIV BYTE1 BYTE1 DIV WORD1 WORD1 DIV DWORD1 DWORD1

DIVIDENDO COCIENTE RESIDUO AX DX:AX EDX:EAX

AL AX EAX

AH DX EDX8

8

Lenguaje Ensamblador y Programación para PC IBM y compatibles / Peter Abel / Ed.Pearson / Tercera Edicion/ México 1996

13

Suma y multiplicación con punto decimal GENERALIDADES 1.- Todas las instrucciones de punto flotante empiezan con F. 2.- Todas las instrucciones que operan con enteros empiezan FI. 3.- Todas las instrucciones que operan con BCD empiezan con FB. 4.- Todas las instrucciones que extraen un tope de pila terminan con FxxP. 5.- Todas las instrucciones que extraen dos topes de pila terminan como FxxPP. 6.- Todas las instrucciones, a excepción de las que comienzan con FNxx comprueban excepciones no enmascaradas antes de ejecutarse. SINTAXIS 

FADD operando_destino, operando_fuente

La instrucción FADD toma el operando fuente y el operando destino, los suma juntos y almacena en el operando destino. 

FMUL operando_destino, operando_fuente

LA instrucción FMUL multiplica el operando destino por el operando fuente y almacena el resultado en el operando destino.9

Ejemplos generales Armado con las instrucciones ADD, SUB, y NEG, tiene los medios para implementar expresiones aritméticas que involucran la suma, resta y negación en el lenguaje ensamblador. RESOLVIENDO

9

 valR = valX + (valY – valZ);

Programación en Lenguaje Ensamblador / William H. Murray y Chris H. Pappas / Edit. McGRAW-HILL

14

1.- Se utilizan las siguientes variables de 32 bits: valR SDWORD ? valX SDWORD 26 valY SDWORD 30 valZ SDWORD 40

2.- Primero negamos una copia de valX: ; primer término: -valX mov eax, valX neg eax

; eax = -26

3.- Después valY se copia a un registro y se resta valZ: ; segundo término: (valY – valZ) mov ebx, valY sub ebx, valZ

;ebx = -10

4.- Por último, se suman los dos términos (en EAX y EBX): ; se suman los términos y se almacenan: add eax, ebx mov valR, eax

; -36

10

10

Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / México 2008

15

CONCLUSIONES En el desarrollo de el reporte nos dimos cuenta de que las operaciones tan comunes para la vida cotidiana como los son la suma, resta, multiplicación y división la computadora tiene todo un proceso y forma de hacerlo que no tan simple como nosotros las realizamos sino que tiene que ser especificado si es de registros o memoria, y respecto a eso van a ser los tipos de las variables donde van a ser almacenados. No es tan complicado de realizar una vez entendido el manejo de dichos datos. Este tipo de operaciones son de gran importancia y utilidad en muchas cosas no solo en el aspecto matemático como podemos llegar a creer, es solo cuestión de darle el uso adecuado a estas operaciones.

16

BIBLIOGRAFÍA  Lenguaje Ensamblador y Programación para PC IBM y compatibles / Peter Abel / Ed. Pearson / Tercera Edición/ México 1996  Programación en Lenguaje Ensamblador / William H. Murray y Chris H. Pappas / Edit. McGRAW-HILL  Lenguaje Ensamblador IBM/360 / Don H. Stabley / Ed. Limusa / Primera Edición / México 1983  Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / México 2008  http://platea.pntic.mec.es/jdelucas/ensamblador.htm  http://moisesrbb.tripod.com/unidad4.htm#unidad421  http://foro.portalhacker.net/index.php/topic,73143.30.html  http://moisesrbb.tripod.com/unidad4.htm  http://www.mis-algoritmos.com/ejemplos/asm-284.html  http://www.monografias.com/trabajos11/lenen/lenen.shtml

17

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF