Professional Documents
Culture Documents
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
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
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
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
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
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:
MULTIPLICANDO AL AX EAX
En los ejemplos siguientes, los multiplicadores estn definidos en memoria: BYTE1 DB WORD1 DW DWORD1 DD ? ? ?
10
MULTIPLIANDO AL AX EAX
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.
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
COCIENTE AL Ax EAX
RESIDUO AH DX EDX
Lenguaje Ensamblador y Programacin para PC IBM y compatibles / Peter Abel / Ed.Pearson / Tercera Edicion/ Mxico 1996
13
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);
14
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