You are on page 1of 17

INSTITUTO TECNOLOGICO DE MORELIA Jos Ma.

Morelos y Pavn

INSTRUCCIONES ARITMETICAS

RESUMEN BREVE
Las instrucciones ms 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 programacin es la suma. En ensamblador la sintaxis para esta es: ADD dest, origen. Existen varios formatos para esta instruccin, as como, otras instrucciones que la afectan tales como NEG (invierte el signo de un nmero).La instruccin ADD afecta a las banderas de: Acarreo, Desbordamiento, Cero, Signo, Paridad, Acarreo Auxiliar. Tambin 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 multiplicacin. Existen dos tipos de multiplicaciones que entiende el procesador: 1.- Los que comienzan con una I operan con nmeros con signo (si quere mos usar nmeros negativos) 2.- Los que no, con nmeros sin signo. En ensamblador la sintaxis para esta es: MUL fuente y IMUL fuente respectivamente. La instruccin MUL (IMUL) afecta a las banderas de: Acarreo, Desbordamiento. Tipos de multiplicacin: byte por byte, palabra por palabra y palabra doble por palabra doble. Y para finalizar pero no menos importante la divisin 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 cudruple palabra por doble palabra

ALUMNOS: YURITZI GIL ALTAMIRANO BRISEIDA ATZIRI ZARAGOZA SALAS No. DE CONTROL: 08120079 No. DE CONTROL: 08120125

LUNES 20 DE SEPTIEMBRE DE 2010

INDICE
INTRODUCCION..3 Instrucciones Aritmticas...4 Suma y Resta ..4 Instruccin ADD.4 Formato de Instrucciones...5 Operando NEG...5 Operando INC.....6 Instruccin SUB..6 Formato de Instrucciones...7 Banderas afectadas por la suma y la resta8 Multiplicacin y Divisin8 Instruccin MUL.8 Formato de Instrucciones....9 Banderas afectadas por la suma.9 Operaciones bsicas de la multiplicacin...9 Instruccin DIV..11 Formato de Instrucciones..11 Operaciones de divisin bsicas11 Tamao del campo.13 Suma y Multiplicacin con punto decimal...14 Generalidades.14 Sintaxis14 Ejemplos Generales....14 Conclusiones...16 Referencias.17

INTRODUCCION
En este reporte podremos aprender sobre el manejo de las operaciones aritmticas como lo son la suma, resta, multiplicacin y divisin. La manera en que la computadora las realiza y el formato que tienen que tener dependiendo del tipo de datos o accin que se desea realizar. As como tambin podremos observar que no es lo mismo tomar un dato con signo negativo o positivo, ya que esto cambia la instruccin y manera de realizar las operaciones. Tambin podremos observar varios ejemplos de cada una de estas operaciones para poder tener en claro este tema.

INSTRUCCIONES ARITMETICAS
Estas se usan para realizar operaciones aritmticas sobre los operandos. Las instrucciones ms 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
Instruccin ADD
Se trata de un operando que contiene cualquier lenguaje de programacin: la suma. Tiene dos operandos, uno de destino y otro fuente, que son del mismo tamao. 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 tamao. Por lo tanto: origen: permanece sin cambio en la operacin. 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

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

Formato de instrucciones
ADD AX, BX; -----------------------------Sumara AX y BX y lo guardara en AX. ADD [AX], BX; ---------------------------Suma el contenido de la direccin de AX a BX, y se almacena en la direccin de AX. ADD AX, [BX]; ---------------------------Se suman AX y el contenido de la direccin BX y se almacena, esta suma en AX. ADD AX, 3; -------------------- ----------Lo mismo pero utilizando un valor inmediato en vez de la BX sealada anteriormente.

Otras
SINTAXIS: ADC destino, fuente PROPOSITO: Adicin 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 instruccin NEG (negacin) invierte el signo de un nmero, convirtindolo en su complemento a dos.2 NEG pone el registro o el lugar al que apunta en memoria en negativo, segn la aritmtica de complemento a dos tal que: NEG AX; o NEG [AX];

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

Operando INC
La instruccin 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).

Instruccin SUB
La instruccin SUB resta un operado de origen a un operado de destino. El conjunto de posibles operaciones es el mismo que para la instruccin ADD Sintaxis: SUB destino, origen Ejemplo: La manera de realizar esta resta es utilizando el complemento A dos para los nmeros negativos. Como en el ejemplo siguiente: 4-1= 4+(-1) Para representar el -1 en complemento a dos se representa en 8 bits el nmero, despus 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 representacin del numero 1 11111110 cambiando ceros por unos y viceversa

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

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

SUB SUB

mem,reg reg,mem

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

Banderas afectadas por la suma y la resta


Al ejecutar instrucciones aritmticas, a menudo es conveniente saber algo acerca del resultado (es negativo, positivo o cero), (es demasiado grande o demasiado pequeo para caber en el operando de destino), esto nos puede ayudar a detectar errores de clculo que de otra manera podran ocasionar un comportamiento errtico. Utilizamos los valores de las banderas de estado de la CPU para comprobar el resultado de las operaciones aritmticas. 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
Instruccin 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 nmeros con signo (si queremos usar nmeros negativos). 2.- Los que no, con nmeros sin signo
4 5

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

Formato de instrucciones
SINTAXIS: MUL fuente PROPOSITO: Multiplicacin sin signo. El ensamblador asume que el multiplicando ser del mismo tamao 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 multiplicacin de 8 bits el resultado se almacena en el registro par DX: AX. SINTAXIS: IMUL fuente PROPOSITO: Multiplicacin 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 instruccin MUL.6

Banderas afectadas por la multiplicacin


Las instrucciones MUL y IMUL afectan las banderas de: La Bandera de Acarreo. La Bandera de Desbordamiento.

Operaciones bsicas de la multiplicacin


Las operaciones de multiplicacin bsicas son byte a byte, palabra por palabra y palabras dobles por palabras dobles. BYTE POR BYTE

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

Para multiplicar dos nmeros de un byte, el multiplicando esta en el registro AL y el multiplicador es un byte en memoria o en otro registro. Para la instruccin MUL DL, la operacin multiplica el contenido de AL por el contenido del DL. El producto generado esta en el registro AX. La operacin ignora y borra cualquier informacin que pueda estar en el AH. PALABRA POR PALABRA Para multiplicar dos nmeros de una palabra, el multiplicando esta en el registro AX y el multiplicador es una palabra en memoria o en otro registro. Para la instruccin MUL DX, la operacin 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 operacin ignora y borra cualquier informacin que pueda estar en el DX. PALABRA DOBLE POR PALABRA DOBLE Para multiplicar dos nmeros 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 operacin ignora y borra cualquier informacin que ya este en el EDX. En los ejemplos siguientes, el multiplicador esta en un registro, el cual especifica el tipo de operacin:

INSTRUCCION MUL CL MUL BX MUL EBX

MULTIPLICADOR byte palabra palabra doble

MULTIPLICANDO AL AX EAX

PRODUCTO AX DX:AX EDX:EAX

En los ejemplos siguientes, los multiplicadores estn 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

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

Formato de instrucciones
Instruccin DIV Propsito: Divisin sin signo Sintaxis: DIV fuente El divisor puede ser un byte o palabra y es el operando que se le da a la instruccin. 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. Instruccin IDIV Propsito: Divisin con signo Sintaxis: IDIV fuente Consiste bsicamente en lo mismo que la instruccin DIV, solo que esta ltima realiza la operacin con signo utilizando el complemento A dos. Para sus resultados utiliza los mismos registros que la instruccin DIV.

Operaciones de divisin bsicas


7

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

11

Las operaciones de divisin bsicas con palabra entre byte, palabra doble entre palabra y palabra cudruple 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. Despus de la divisin, el residuo esta en el AH y el cociente esta en el AL. Ya que un cociente de un byte es muy pequeo -si es sin signo, un mximo de +255 (FFH) y con signo +127 (7FH)- esta operacin tiene un uso limitado.

PALABRA DOBLE ENTRE PALABRA Para esta operacin, el dividendo esta en el par DX:AX y el divisor es una palabra en memoria o en otro registro. Despus de la divisin, el residuo esta en el DX y el cociente esta en el AX. El cociente de una palabra permite para datos sin signo un mximo de +32, 767 (FFFFH) y con signo +16, 383 (7FFFH). Tenemos:

PALABRA CUDRUPLE ENTRE PLABRA DOBLE Al dividir una palabra cudruple 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. Despus de la divisin, el residuo esta en el EDX y el cociente en el EAX.

12

Tamaos del campo


El operador DIV o de IDIV hace referencia al divisor, que especifica el tamao del campo. En los ejemplos siguientes de DIV, los divisores estn en un registro, que determina el tipo de operacin:

OPERACION DIV CL DIV CX DIV EBX

DIVISOR byte palabra palabra doble

DIVIDENDO AX DX:AX EDX:EAX

COCIENTE AL Ax EAX

RESIDUO AH DX EDX

En los ejemplos siguientes de DIV, los divisores estn definidos en memoria:

BYTE1 DB WORD1 DW DWORD1 DD ...

? ? ? DIVISOR DIVIDENDO COCIENTE RESIDUO AX DX:AX EDX:EAX AL AX EAX AH DX EDX8

DIV BYTE1 BYTE1 DIV WORD1 WORD1 DIV DWORD1 DWORD1

Lenguaje Ensamblador y Programacin para PC IBM y compatibles / Peter Abel / Ed.Pearson / Tercera Edicion/ Mxico 1996

13

Suma y multiplicacin 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 excepcin de las que comienzan con FNxx comprueban excepciones no enmascaradas antes de ejecutarse. SINTAXIS FADD operando_destino, operando_fuente

La instruccin FADD toma el operando fuente y el operando destino, los suma juntos y almacena en el operando destino. FMUL operando_destino, operando_fuente

LA instruccin 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 aritmticas que involucran la suma, resta y negacin en el lenguaje ensamblador. RESOLVIENDO valR = valX + (valY valZ);

Programacin 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 trmino: -valX mov eax, valX neg eax ; eax = -26

3.- Despus valY se copia a un registro y se resta valZ:


; segundo trmino: (valY valZ) mov ebx, valY sub ebx, valZ ;ebx = -10

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

; -36

10

Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / Mxico 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, multiplicacin y divisin 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 matemtico como podemos llegar a creer, es solo cuestin de darle el uso adecuado a estas operaciones.

16

BIBLIOGRAFA
Lenguaje Ensamblador y Programacin para PC IBM y compatibles / Peter Abel / Ed. Pearson / Tercera Edicin/ Mxico 1996 Programacin en Lenguaje Ensamblador / William H. Murray y Chris H. Pappas / Edit. McGRAW-HILL Lenguaje Ensamblador IBM/360 / Don H. Stabley / Ed. Limusa / Primera Edicin / Mxico 1983 Lenguaje Ensamblador para computadores basadas en Intel / Kip R Irvine/ Ed Pearson / 5ta Edicion / Mxico 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

You might also like