2.9 Instrucciones Aritmeticas RESUMEN

12
INSTITUTO TECNOLÓGICO DE ACAPULCO Ingeniería en sistemas computacionales Materia: Lenguaje de Interfaz RESUMEN: Tema: 2.9 Instrucciones aritméticas. Profesor: Ing. Dagoberto Urzúa Osorio Alumna: Tania Díaz Navarrete #c: 12320712 Hora: 11:00 am– 14:00 p.m. Aula: 604

description

Aquí de adjunta un trabajo en que se muestran un ejemplo y breve explicación de las instrucciones aritméticas básicas en lenguaje ensamblador.

Transcript of 2.9 Instrucciones Aritmeticas RESUMEN

INSTITUTO TECNOLGICODE ACAPULCO

Ingeniera en sistemas computacionalesMateria: Lenguaje de InterfazRESUMEN: Tema: 2.9 Instrucciones aritmticas.Profesor: Ing. Dagoberto Urza OsorioAlumna: Tania Daz Navarrete #c: 12320712Hora: 11:00 am 14:00 p.m.Aula: 604

RESUMEN: Tema: 2.9 Instrucciones aritmticas.De acuerdo a (PETER, 1996)instrucciones aritmeticas

SUMAADD

RESTASUB

MULTIPLICACIONMUL/IMUL

DIVISIONDV/IDIV

SUMA Y RESTALa instruccin ADD y SUB realizan sumas y restas sencillas de datos binarios. Los nmeros binarios negativos estn representados en la forma de complemento a os: Invierta todos los bits del nmero, positivo y sume 1. Los formatos generales para las instrucciones ADD y SUB son:

Como con otras instrucciones, no existen operaciones directas de memoria a memoria. El ejemplo siguiente utiliza el registro AX para sumar WORDA a WORDB:

La figura proporciona ejemplos de ADDA y SUB para el procesamiento de valores en un byte y en una palabra. El procedimiento B10ADD utiliza ADD para procesar bytes y el procedimiento C10SUB utiliza SUB para procesar palabras.DESBORDAMIENTOS.Hay que estar alerta de los desbordamientos en las operaciones aritmticas. Ya que un byte solo permite el uso de un bit de signo y siete bits de datos (desde -128 hasta +127), una operacin aritmtica puede exceder con facilidad la capacidad de un registro de un byte. Y una suma en el registro AL que exceda su capacidad puede provocar resultados inesperados. Por ejemplos, suponga que el AL contiene 60H, entonces la instruccin ADD AL, 20H genera una suma de 80H en el AL. Como hemos usado dos nmeros positivos, esperamos que la suma sea positiva, pero la operacin pone en uno la bandera de desbordamiento y la bandera de signo en negativa. La razn? El valor 80H, o 10000000 binario, es un nmero negativo; en lugar de +128 la suma es -128. El problema es que el registro AL es muy pequeo para la suma, que debe estar en el registro AX completo, como se muestra a continuacin:

Extension de un numero en un regsitroLa mejor instruccin para este propsito es SBW (Convierte byte en palabra), que de forma automtica enva el bit del signo del AL (0 o 1) al AH. Observe que el CBW est registrado para el uso del AX.En el ejemplo siguiente, CBW extiende el signo (0) en el AL al AH, que genera 0060H en el AX. Despus, el cdigo suma 20H al AX (en lugar del al)y genera el resultado correcto en el AX:0080H, o +128:

El resultado numrico en el segundo ejemplo es el mismo, pero la operacin en el AX no lo trata como desbordamiento o negativo. Aun as, aunque una palabra completa en el AX permite un bit de signo y 15 bits de datos el AX est limitado a nmeros desde -32,768 hasta +32,767.

ARITMETICA CON PALABRAS MLTIPLES.Los valores nmericos grandes pueden exceder la capacidad de una palabras, y en realidad se necesita la capacidad de palabras mltiples. Un requisito en aritmtica de palabras mltiples es el byte y palabra en secuencia inversa. El ensamblador convierte de manera automtica el contenido de las palabras numricas definidas en secuencia inversa de bytes, as que, por ejemplo, una definicin de 0134H se convierte en 3401H. Pero en los valores en palabras dobles, es responsabilidad del programador definir el par relacionado de palabras en secuencia inversa de palabras, digamos que un par de palabra doble es como este:

Entonces se tiene que definir las palabras con orden inverso.

Entonces el ensamblador convierte estas definiciones en secuencia inversa de bytes, adecuada para aritmtica con palabras dobles:

Examinemos dos maneras de realizar aritmtica de palabra mltiples. La primera es sencilla y especfica, mientras que la segunda es ms elaborada y general. El procedimiento D10DWD ilustra la suma de un par de palabras (WORD1A y WORD1B) a un segundo par (WORD2A y WORD2B) y almacena la suma en un tercer par (WORDA3 y WORD3B). En efecto, la operacin es para sumar los nmeros, tal como los siguientes:

A causa de la secuencia inversa de bytes en memoria, el programa define los nmeros con las palabras al revs: BC62 y 553A 0012, respectivamente. Entonces el ensamblador almacena en la memoria valores de palabras dobles en la secuencia inversa de bytes correcta:

El primer procedimiento suma WORD2A a WORD1A en el AX (en realidad son las partes de bajo orden) y almacena la suma en WORD3A. A continuacion WORD2B a WORD1B (las partes superior) en el AX, junto con el acarreo de la suma anterior, Despues almacena la suma en WORD3B.

MULTIPLICACION:Para la multiplicacin se utiliza la instruccin MUL, que maneja datos sin signo y la instruccin IMUL (multiplicacin entera) maneja datos con signo. Ambas instrucciones afetan banderas de acarreo y de desbordamiento. El formato general para MUL e IMUL es:

[Etiqueta:]MUL/IMULREGISTRO/MEMORIA

Las operaciones de multiplicacin bsicas son byte por byte, palabra por palabra, palabra doble por palabra doble.Byte por byte.Para multiplicar dos nmeros de un byte, el multiplicando est 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 de DL. El producto generado est en el registro AX. La operacin ignora y borra cualquier informacin que pueda estar en el AH.

Palabra por palabra.Par amultiplicar dos numeor de una palabra, el multiplicando esta en el registro AX y el multiplicando es una palabra en emmoria o en otor registro. Para la instruccin MUL DX, la operacin multiplica el contenido del AX por el contenido del DX. El producto generado es una palabra doble que necesita dos registros: la parte de orden alto (mas a la izquierda) en el DX y la parte de orden bajo (mas a la derecha) en el AX. La operacin iganora cualquier informacion que pueda estar en el DX.

Palabra doble por palabra doble.Para multiplicar dos numeros 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 ingnora y boraa cualquier informacion que ya este en el EDX.

Multiplicacion sin signo: MULEl objetivo de la instruccin MUL es multiplicar datos son signo, en la figura se dan tres ejemplos del uso de MUL: byte por byte, palabra por palabra y palabra doble por palabra doble. El primer ejemplo multiplica 80H (128) por 40H (64). El producto en el AX es 2000H (8,192). El segundo ejemplo genera 1000 0000H en los registros DX:AX.El tercer ejemplo multiplica una palabra byte por byte y necesita extender BYTE1 a una palabra. Ya que los nmeros se suponen son signo, el ejemplo supone que los bits en el registro AH son cero, AL podra ser 1, y la propagacin de bits uno en el AH generara en un numero sin signo matos, el producto en el DX: AX es 0040 0000H.Multiplicacion con signo: IMULEl objetivo de la instruccin IMPUL(multiplicacin entera) es multiplicar datos con signo. En la figura se muestran ejemplos de multiplicaciones con esta instruccin.

DIVISIONPara la divisin, se usa la instruccin DIV (dividir) maneja datos sin signo y la IDIV (divisin entera) maneja datos con signo. El formato general es:

Las operaciones de divisin bsicas son palabra entre byte, palabra doble entre palabra doble.PALABRA ENTRE BYTE.Aqu el dividendo est en el AX y el divisor es un byte en memoria o en otro registro.

PALABRA DOBLE ENTRE PALABRA DOBLE.Para esta operacin, el dividendo est en el par DX:AX y el divisor es una palabra en memoria en otro registro.

Bibliografa:Lenguaje ensamblador Abel PeterCaptulo 13: Procesamiento de datos binarios.Pgina: 234-248