Ahora ha llegado el momento de hablar de algunas instrucciones de rotacion de bits. Para verlas mas graficamente, representemos un registro de la siguiente manera: cada uno de los bits de un byte tiene un "valor" determinado: bit 7 6 5 4 3 2 1 0 "valor" 128 64 32 16 8 4 2 1 el bit cero, el ultimo de las derecha y el que menos vale, se llama "bit menos significativo" y el bit 7, de la izquierda, se llama "bit mas significativo", porque es el que mas vale. Las instrucciones de rotacion lo que hacen es mover el contenido de cada bit al bit vecino, ya sea hacia la izquierda o hacia la derecha. El ultimo bit (que se queda "sin espacio", va a parar al blag carry o a la otra punta del byte. El primer bit se llena bien con cero o con el contenido del flag carry, o con el contenido del ultimo bit, o mantiene su contenido segun el caso. Como estas rotaciones se ven mejor en dibujito, paso a mostrarlas asi: ROR (rotate right) rotar a la derecha i-> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0 -> CF I I L______________________________________I se entiende? el bit 0 se copia en el 7, todos los bits se corren una posicion a la derecha. El bit 0 se copia al flag carry. lo opuesto a esta instruccion es... ROL (rotate left) rotar a la izquierda CF <----- 7 <- 6 <- 5 <- 4 <- 3 <- 2 <- 1 <- 0 <- + I I I_______________________________________I el 7 va al 0 y se copia en el carry flag, todos se corren una posicion a la izquierda. RCR (rotacion a la derecha por carry) +-> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0 -> CF I I L____________________________________________I el contenido del bit 0 se copia en el carry, y el del carry en el bit 7, todos los bites se corren una posicion a la derecha. RCL (rotacion a la izquierda por carry) CF <--- 7 <- 6 <- 5 <- 4 <- 3 <- 2 <- 1 <- 0 <- + I I I_______________________________________________I Mas sencillos son los siguientes dos: SHR (0) -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0 -> (CF) el bit 7 se pone a 0, todos se corren a la derecha, el bit 0 se copia en el carry flag. SHL (CF) <--- 7 <- 6 <- 5 <- 4 <- 3 <- 2 <- 1 <- 0 <- (0) el bit 7 al carry flag, todos se corren a la izquierda, bit 0 se pone en 0. SAR + -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0 -> (CF) I____I el bit 7 se copia en si mismo y rota a la derecha, el bit 0 se copia en el carry flag. Para que sirve todo esto? hacer un shr equivale a dividir por dos. Un shl equivale a duplicar un valor. haciendo una rotacion que copie un bit al carry flag, se puede hacer que el programa bifurque segun este ese bit en alto (1) o en bajo (0), siguiendolo por un salto relativo JC (saltar si el carry flag esta en 1) o jnc (salta si cf=0). (entendieron algo?)(en serio?)(estan seguros??) (continuara?) "Necesitamos revistas sobre computadoras desaparecidas: donalas al museo!"