Todo lenguaje tiene instrucciones que mueven bits en el
interior de los operandos. Las instrucciones de desplazamiento y rotacin, como se conocen, son en especial tiles para controlar dispositivos de hardware, cifrar datos e implementar grficos de alta velocidad. Instrucciones de desplazamiento y rotacin Intel proporciona un conjunto bastante completo de instrucciones en esta rea (Tabla 7-1), todas las cuales afectan a las banderas Desbordamiento y Acarreo. Desplazamientos lgicos y desplazamientos aritmticos Instruccin SHL Instruccin ROL Instruccin ROR Instrucciones RCL y RCR Desbordamiento con signo Instrucciones SHLD/SHRD Aplicaciones de desplazamiento y rotacin Desplazamiento y varias dobles palabras Multiplicacin Binaria Visualizacin de bits binarios
Una tarea comn de programacin es convertir un
entero binario en cadena ASCII binaria, para poder visualizarla en pantalla. La instruccin SHL es til para esto, ya que copia el bit mas alto de un operando a la bandera Acarreo, cada vez que el operando se desplaza a la izquierda. OPERADORES ARITMTICOS Aritmtica ASCII y con decimales desempaquetados A continuacin se muestra un ejemplo de resultado, en donde el usuario Introdujo los nmeros 3402 y 1256: Escriba el primer numero: 3402 Escriba el segundo nmero: 1256 La suma es: 4658 Tenemos dos opciones al calcular y mostrar la suma: 1. Convertir ambos operandos a binario, sumar los valores binario a cadenas de dgitos ASCII. 1. Sumar las cadenas de dgitos directamente, mediante una suma sucesiva de cada par de dgitos ASCII (2+6,0+5,4+2 y 3+1). La suma es una cadena de dgitos ASCII, por lo que puede mostrarse directamente en la pantalla. Lasegunda opcin requiere el uso de instrucciones especializadas para ajustar la suma despus de sumar cada par de dgitos ASCII. A continuacin se muestran las cuatro instrucciones que tratan con la suma, resta, multiplicacin y divisin ASCII: AAA (Ajuste ASCII despus de la suma) AAS (Ajuste ASCII despus de la resta) AAM (Ajuste ASCII despus de la multiplicacin) AAD (Ajuste ASCII antes de la divisin ) Instruccin AAA El siguiente ejemplo muestra como sumar los dgitos ASCII 8 y 2 de manera correcta, usando la instruccin AA. , 0 , "8" ; = 0038 , "2" ; = 006 ; = 0100 (resultando del ajuste ASCII) , 3030 ; = 3130 = 10 (se convierte a ASCII) Instruccin AAS Por ejemplo, las siguientes instrucciones restan el 9 del 8 ASCII: . 1 "8 2 "9" . , 0 , 1 ; = 0038 , 2 ; = 00 ; = 09 ; guarda la bandera Acarreo , 30 ; = 39 ; guarda la bandera Acarreo Instruccin AAM En el siguiente ejemplo, multiplicamos 5 por 6 ajustamos el resultado en AX. Despus del ajuste, AX = 300h, la representacin de 30 en decimal desempaquetado: . 05, 06 . , ; , + 1 ; ; = 001 ; = 0300 Instruccin AAD El siguiente ejemplo convierte el numero 0307h desempaquetado a binario, y despus lo divide entre 5. DIV produce un cociente de 07h en AL y un residuo de 02h en AH: . ? ? . , 0307 ; ; = 0025 , 5 ; ; = 0207 , , Aritmtica con decimales empaquetados Los enteros decimales empaquetados almacenan dos dgitos decimales de byte. Cada digito se representa mediante cuatro bits. Si hay un numero impar de dgitos, el nibble ms alto se llena con un cero. Los tamaos de almacenamiento pueden variar: 1 2345673928737285 ; 2,345,673,928,737,285 2 12345678 ; 12,345,678 3 08723654 ; 8,723,654 4 9345 ; 9,345 5 0237 ; 237 6 34 ; 34 El almacenamiento de decimales empaquetados tiene por lo menos dos puntos fuertes: Los nmeros pueden tener casi cualquier numero de dgitos significativos. Esto hace posible realizar clculos con mucha precisin. La conversin de nmeros decimales empaquetados a ASCII (y viceversa) es relativamente simple. Dos instrucciones, DAA (ajuste decimal despus de la suma) y DAS (ajuste decimal despus de la resta), ajustan el resultado de una operacin de suma o resta con decimales empaquetados. Por desgracia, no existen. Instrucciones as para la multiplicacin y la divisin. En estos casos, el nmero debe desempaquetarse, multiplicarse o dividirse, y luego volver a empaquetarse. Instruccin DAA Por ejemplo, las siguientes instrucciones suma los decimales empaquetados 35 y 48. La suma binaria (7Dh) se ajusta a 83h, la suma decimal empaquetada de 35 y 48. , 35 , 48 ; = 7 ; = 83 ( ) Instruccin DAS Por ejemplo, las siguientes instrucciones restan los decimales empaquetados 48 y 85, y ajustan el resultado: , 48 , 85 , ; = 3 ; = 37 ( )