2.9 Instrucciones Aritmeticas RESUMEN

October 18, 2017 | Author: Tanni Diaz | Category: Division (Mathematics), Bit, Assembly Language, Multiplication, Numbers
Share Embed Donate


Short Description

Descripción: Aquí de adjunta un trabajo en que se muestran un ejemplo y breve explicación de las instrucciones aritmétic...

Description

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

RESUMEN: Tema: 2.9 Instrucciones aritméticas. DE ACUERDO A (PETER, 1996) INSTRUCCIONES ARITMETICAS SUMA RESTA

ADD SUB

MULTIPLICACION DIVISION

MUL/IMUL DV/IDIV

SUMA Y RESTA La instrucción ADD y SUB realizan sumas y restas sencillas de datos binarios. Los números binarios negativos están representados en la forma de complemento a os: Invierta todos los bits del número, 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 aritméticas. Ya que un byte solo permite el uso de un bit de signo y siete bits de datos (desde -128 hasta +127), una operación aritmética 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 instrucción ADD AL, 20H genera una suma de 80H en el AL. Como hemos usado dos números positivos, esperamos que la suma sea positiva, pero la operación pone en uno la bandera de desbordamiento y la bandera de signo en negativa. ¿La razón? El valor 80H, o 10000000 binario, es un número negativo; en lugar de +128 la suma es -128. El problema es que el registro AL es muy pequeño para la suma, que debe estar en el registro AX completo, como se muestra a continuación:

Extension de un numero en un regsitro La mejor instrucción para este propósito es SBW (Convierte byte en palabra), que de forma automática envía 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. Después, el código suma 20H al AX (en lugar del al)y genera el resultado correcto en el AX:0080H, o +128:

El resultado numérico en el segundo ejemplo es el mismo, pero la operación 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 números desde -32,768 hasta +32,767.

ARITMETICA CON PALABRAS MÚLTIPLES. Los valores númericos grandes pueden exceder la capacidad de una palabras, y en realidad se necesita la capacidad de palabras múltiples. Un requisito en aritmética de palabras múltiples es el byte y palabra en secuencia inversa. El ensamblador convierte de manera automática el contenido de las palabras numéricas definidas en secuencia inversa de bytes, as que, por ejemplo, una definición 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 aritmética con palabras dobles:

Examinemos dos maneras de realizar aritmética de palabra múltiples. La primera es sencilla y específica, mientras que la segunda es más 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 operación es para sumar los números, tal como los siguientes:

A causa de la secuencia inversa de bytes en memoria, el programa define los números con las palabras al revés: 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 multiplicación se utiliza la instrucción MUL, que maneja datos sin signo y la instrucción IMUL (multiplicación entera) maneja datos con signo. Ambas instrucciones afetan banderas de acarreo y de desbordamiento. El formato general para MUL e IMUL es: [Etiqueta: ]

MUL/IMU L

REGISTRO/MEM ORIA

Las operaciones de multiplicación básicas son byte por byte, palabra por palabra, palabra doble por palabra doble. Byte por byte. Para multiplicar dos números de un byte, el multiplicando está 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 de DL. El producto generado está en el registro AX. La operación ignora y borra cualquier información 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 instrucción MUL DX, la operación 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 operación 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 operación ingnora y boraa cualquier informacion que ya este en el EDX.

Multiplicacion sin signo: MUL El objetivo de la instrucción 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 números se suponen son signo, el ejemplo supone que los bits en el registro AH son cero, AL podría ser 1, y la propagación de bits uno en el AH generaría en un numero sin signo matos, el producto en el DX: AX es 0040 0000H. Multiplicacion con signo: IMUL El objetivo de la instrucción IMPUL(multiplicación entera) es multiplicar datos con signo. En la figura se muestran ejemplos de multiplicaciones con esta instrucción.

DIVISION Para la división, se usa la instrucción DIV (dividir) maneja datos sin signo y la IDIV (división entera) maneja datos con signo. El formato general es:

Las operaciones de división básicas 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 operación, el dividendo está en el par DX:AX y el divisor es una palabra en memoria en otro registro.

Bibliografía: “Lenguaje ensamblador” Abel Peter Capítulo 13: Procesamiento de datos binarios. Página: 234-248

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF