Вы находитесь на странице: 1из 32

Definicin de Registro de procesador

Anuncios

En microprocesadores, un registro es una porcin de memoria ultrarrpida, de poca capacidad e integrado al microprocesador, que permite almacenar y acceder datos usados frecuentemente. Se emplean para aumentar la velocidad de ejecucin de los programas. La mayora de las arquitecturas de computadora emplean registros, moviendo datos desde la memoria principal hacia los registros, se opera sobre stos, y el resultado es movido nuevamente a la memoria principal. Existen mltiples tipos de registros como ser: * Registro de memoria: almacenan exclusivamente direcciones de memoria. * Registro de datos: almacenan nmeros enteros. * Reigistro de propsito general (GPR o General Purpose Registers): permiten almacenar tanto datos como direcciones. La mayora de las computadoras modernas emplean este tipo de registros. * Registro de coma flotante: almacenan datos en formato de coma flotante. * Registro de constantes: almacenan datos constantes (que no se cambian). * Registro de propsito especfico: almacenan informacin especfica sobre el estado del sistema, como el puntero de pila o el registro de estado.

REGISTROS
Enviado por borjaoscar

Indice 1. Concepto general 2. Registros de segmento. 4. Registros de propsitos generales. 5. Registro ndice. 1. Concepto general Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son

espacios fsicos dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee. Los registros son direccionables por medio de una vieta, que es una direccin de memoria. Los bits, por conveniencia, se numeran de derecha a izquierda (15,14,13. 3,2,1,0), los registros estn divididos en seis grupos los cuales tienen un fin especifico. Los registros se dividen en:

Registros de segmento Registros de apuntadores de instrucciones Registros apuntadores Registros de propsitos generales Registro ndice Registro de bandera.

2. Registros de segmento. Un registro de segmento se utiliza para alinear en un limite de prrafo o dicho de otra forma codifica la direccin de inicio de cada segmento y su direccin en un registro de segmento supone cuatro bits 0 a su derecha. Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para direccionamientos conocidos como el segmento actual. Los registros de segmento son:

Registro CS Registro DS Registro SS Registro ES Registro FS y GS

Registro CS. El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, mas un valor de desplazamiento en el registro de apuntado de instruccin (IP), indica la direccin de una instruccin que es buscada para s ejecucin. Para propsito de programacin normal, no e necesita referenciar el registro CS. Registro DS. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, esta direccin, mas un valor de desplazamiento en una instruccin, genera una referencia a la localidad de un bytes especifico en el segmento de datos. Registro SS. El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para propsitos de programacin normal, no se necesita referenciar el registro SS. Registro ES Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro esta de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (ndice) . un programa que requiere el uso del registro ES puede inicializarlo con una direccin apropiada. Registros FS y GS. Son registros extra de segmento en los procesadores 80386y posteriores a estos procesadores.

3. Registro Apuntador de instrucciones.(IP) El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El registro IP esta asociado con el registro CS en el sentido de que el IP indica la instruccin actual dentro del segmento de cdigo que se esta ejecutando actualmente. En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la siguiente instruccin que ser ejecutada el procesados combina las direcciones en el CS y el IP as: Segmento de direccin en el registro CS: 25A40H Desplazamiento de direccin en el registro IP: + 412H Direccin de la siguiente instruccin: 25E52H Registros apuntadores. Los registros apuntadores estn asociados con el registro SS y permiten al procesador accesar datos en el segmento de pila los registros apuntadores son dos:

El registro SP El registro BP

Registro SP. El apuntador de pila IP de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. El ejemplo siguiente el registro SS contiene la direccin de segmento 27B3[0]H y el SP el desplazamiento 312H Para encontrar la palabra actual que esta siendo procesada en la pila el microprocesador combina las direcciones en el SS y el PP: Direccin de segmento en el registro SS: 27B30H Desplazamiento en el registro SP: + 312H Direccin en la Pila: 27E42H
.

27B3[0]H 312H Direccin del segmento SS Desplazamiento del SP Registro BP. El registro BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va lapida. 4. Registros de propsitos generales. Los registros de propsitos generales AX, BX, CX y DX son los caballos de batalla o las herramientas del sistema. Son los nicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte "alta", y el ultimo byte de la derecha es la parte "baja" por ejemplo, el registro CX consta de una parte CH (alta) y una parte CL (baja), y usted puede referirse a cualquier parte por si nombre. as instrucciones siguientes mueven ceros a los registros CX, CH y CL respectivamente. Mov CX, 00 Mov CH, 00 Mov CL, 00 Los procesadores 80386 y posteriores permiten el uso de todos registros de propsito general, mas versiones de 32 bits; EAX, EBX y EDCX.

Registros AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso del AX. Tambin, algunas operaciones generan cdigo ms eficientes si se refiere al AX en lugar de los otros registros. Registro BX. El BX es conocido como el registro base ya que es el nico registro de propsitos generales que pueden ser unos ndices para direccionamiento indexado. Tambin es comn emplear al BX para clculos. Registro CX. El CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda. El CX tambin es usado para muchos clculos. Registro DX. El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren su uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos. Puede usar los registros de propsitos para suma y resta de cifras de 8, 16, 32 bits. 5. Registro ndice. Los registros SI y DI estn disponibles para direccionamientos indexados y para sumas y restas. Que son la operaciones de punta. Registro SI. El registro ndice de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI est asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado a 32 bits, el ESI. Registro DI. El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el Di est asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado a 32 bits, el EDI. Registro de bandera. Los registros de banderas sirven parar indicar el estado actual de la maquina y el resultado del procesamiento, Cuando algunas instrucciones piden comparaciones o clculos aritmticos cambian el estado de las banderas. Las banderas estn en el registro de banderas en las siguientes posiciones: bits 15 14 13 12 11 10 9 8 7 6 5 4321
O D I T S Z A P C

Bandera Las banderas mas comunes son las siguientes: OF (Over flow flag, desbordamiento). Indica el desbordamiento de un bit de orden alto (mas a la izquierda) despus de una operacin aritmtica. DF (Direction flag, Direccion). Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. IF (Interruption flag, Interrupcion).

Indica que una interrupcin externa, como la entrada desde el teclado sea procesada o ignorada. TF (Trap flag, Trampa). Examina el efecto de una instruccin sobre los registros y la memoria. Los programas depuradores como DEBUG, activan esta bandera de manera que pueda avanzar en la ejecucin de una sola interrupcin a un tiempo. SF (Sign flag, Signo). Contiene el signo resultante de una operacin aritmtica (0=positivo y 1= negativo). ZF (Zero flag, Zero). Indica el resultado de una operacin aritmtica o de comparacin (0= resultado diferente de cero y 1=resultado igual a cero). AF (Auxiliary carry flag, Acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmtica especializada PF (Parity flag, Paridad). Indica paridad par o impar de una operacin en datos de ocho bits de bajo orden (mas a la derecha). CF (Carry flag, Acarreo). Contiene el acarreo de orden mas alto (mas a la izquierda) despus de una operacin aritmtica; tambin lleva el contenido del ultimo bit en una operacin de corrimiento o rotacin. Cuadro Comparativo
TIPOS DE REGISTROS FUNCION

Registros de Segmento

Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para el direccionamiento conocida como el segmento actual Este registro esta compuesto por 16 bits y contiene el desplazamiento de la siguiente instruccin que se va a ejecutar. Los procesadores 80386 y posteriores tiene un IP ampliado de 32 bits llamado EIP. Permiten al sistema accesar datos al segmento de la pila. Los procesadores 80386 tiene un apuntador de pila de 32 bits llamado ESP. El sistema maneja de manera automtica estos registros. Son los caballos de batalla del sistema y pueden ser direccionados como una palabra o como una parte de un bytes. Los procesadores 80386 y posteriores permiten el uso de todos los registros de propsitos general mas sus versiones ampliadas de 32 bits llamados EAX, EBX,ECX y EDX. Sirven para el direccionamiento de indexado y para las operaciones de sumas y restas. Sirven para indicar el estado actual de la maquina y el resultado del procesamiento. De los 16 bits de registro de bandera 9 son comunes a toda la familia de los procesadores 8086.

Registros de Apuntador de Instrucciones

Registros Apuntadores

Registros de Propsito General

Registros Indices

Registros de Banderas

Ejemplo De Representacion De Los Registros Despus de haber conceptualizado e interpretado los diferente tipos de registro nos vemos en la necesidad de dar un ejemplo no muy practico pero si muy significativo en el cual se

representan la forma estructurada de un programa en el lenguaje ensamblador y como se utilizan los diferentes termino que hemos investigado vemos que en el programa o en una pequea porcin de l se muestran como se colocan dentro los diferentes tipos registros. TITLE P17HANRD(EXE) Lectura secuencial de registros. .MODEL SMALL .STACK 64 /-----------------------------------------------------------------------------------------,DATA ENDCDE DB 00 ; FIN DEL INDICARDOR DE PROCESO. HANDLE DW ? IOAREA DB 32 DUP( ) OPENMSG DB *** Open error *** 0DH, 0AH PATHNAM DB D:\NAMEFILE.SRT, 0 READMSD DB *** Read error *** 0DH, 0AH ROW DB 00 /--------------------------------------------------------------------------------------------.CODE BEGIN PROC FAR MOV AX,@data ; inicializa MOV DS,AX ; registro de MOV ES,AX ; segmento MOV AX,0600H

Autor: Oscar borja

Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones o ISA (del ingls Instruction Set Architecture, Arquitectura del Conjunto de Instrucciones) es unaespecificacin que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseo particular de una CPU. El trmino describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos. Existe principalmente de 3 tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing). La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de caractersticas de la microarquitectura, que son los elementos y tcnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentran las microinstrucciones y los sistemas de cach.

Procesadores con diferentes diseos internos pueden compartir un conjunto de instrucciones; por ejemplo, el Intel Pentium y AMD Athlon implementan versiones casi idnticas del conjunto de instrucciones x86, aunque tienen diseos diferentes.
ndice
[ocultar]

1 El lenguaje mquina 2 Implementacin del conjunto de instrucciones 3 Diseo del conjunto de instrucciones 4 Caractersticas que debe tener un conjunto de instrucciones 5 Tipos de instrucciones y ejemplos 6 Vase tambin

El lenguaje mquina[editar editar cdigo]


El lenguaje mquina est construido a partir de los estados discretos o instrucciones. En la arquitectura de procesamiento, una instruccin dada puede especificar: Registros particulares para operaciones aritmticas, de direccionamiento o de control. Ubicaciones particulares de memoria Modos de direccionamiento para interpretar operandos

Las operaciones ms complejas se construyen a partir de estas, que(en una mquina Von Neumann) se ejecutan secuencialmente, o segn el control de flujo. Muchas o pocas de las operaciones disponibles incluidas en la mayora de conjuntos son: Desplazamiento Establecer un registro a un valor constante Mover datos desde una posicin de memoria a un registro y viceversa. Esto se realiza para obtener datos para operaciones matemticas y su almacenamiento. Leer y escribir datos desde dispositivos de hardware

Operaciones matemticas Sumar, restar, multiplicar o dividir dos registros y colocar el resultado en alguno de ellos. Realizar operaciones bit a bit, teniendo el AND y el OR de cada bit en un par de registros, o el NOT de cada bit en un registro. Comparar dos valores que se encuentren en registros(por ejemplo, si son iguales o si uno es mayor que otro)

Afectan al flujo de programa Saltar a otra posicin del programa y ejecutar instrucciones all. Saltar a otra posicin si se cumple cierta condicin

Saltar a otra posicin, pero salvando la posicin actual para poder volver (realizar una llamada, por ejemplo call printf)

Algunos ordenadores incluyen instrucciones "complejas". Dichas instrucciones pueden tomar muchas instrucciones en otros equipos. Estas se caracterizan por instrucciones que necesitan varios pasos, como el control de mltiples unidades funcionales. Algunos ejemplos son: Ahorro de registros en la pila Mover grandes bloques de memoria Complejas operaciones and/or con aritmtica de coma flotante, tales como el seno o la raz cuadrada. Instrucciones que combinan ALU con un operando de la memoria ms que de registros.

Un tipo complejo de la instruccin que ha llegado a ser particularmente popular recientemente es SIMD (Single Instruction, Multiple Data), una operacin que realice la misma operacin aritmtica en pedazos mltiples de datos al mismo tiempo. SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo mnimo. Las instrucciones de SIMD permiten la paralelizacin fcil de los algoritmos implicados comnmente en sonido, imagen, y el proceso video. Varias implementaciones de SIMD se han trado al mercado bajo nombres comerciales tales como MMX, 3DNow! y AltiVec. El diseo de sistemas de instruccin es una edicin compleja. Haba dos etapas en la historia para el microprocesador. El primer era el CISC (Complex Instruction Set Computer) que tena muchas instrucciones diferentes. En los aos 70 IBM hicieron la investigacin y encontraron que muchas instrucciones en el sistema podran ser eliminadas. El resultado era el RISC (Reduced Instruction Set Computer), una arquitectura que utiliza un sistema ms pequeo de instrucciones. Un conjunto de instruccin ms simple puede ofrecer el potencial para velocidades ms altas, tamao reducido del procesador, y consumo de energa reducido. Sin embargo, un conjunto ms complejo puede optimizar operaciones comunes, mejorar memoria/eficiencia de cache, o simplificar la programacin.

Implementacin del conjunto de instrucciones[editar editar cdigo]


Cualquier conjunto de instrucciones se puede implementar de varias maneras. Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado, y todas pueden hacer funcionar los mismos ejecutables binarios. Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste, el funcionamiento, el consumo de energa, el tamao, el etc. Al disear microarquitecturas, los ingenieros usaron bloques de circuitos electrnicos duramente-conectados (diseado a menudo por separado) por ejemplo l, los multiplexores, los contadores, los registros, ALUs etc. Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificacin y la secuencia de cada instruccin de ISA usando esta microarquitectura fsica. Hay tambin algunos nuevos diseos de CPU que compilan el conjunto de instruccin a una RAM escribible o FLASH dentro de la CPU (tal como el procesador Recursiv y el Imsys Cjip), o FPGA (computacin reconfigurable). Western Digital MCP-1600 es un ejemplo antiguo, usando una ROM dedicada, separada del microcdigo.. ISA se puede tambin emular en software por un intrprete. Naturalmente, debido a la interpretacin de overhead, es ms lento que ejecutar programas directamente sobre el

hardware emulado. Hoy, es prctica para los vendedores de nuevos ISAs o microarchitectures poner emuladores del software a disposicin de los desarrolladores de programas informticos antes de que la implementacin del hardware est lista. Los detalles de la implementacin tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instruccin. Por ejemplo, muchas implementaciones de la instruccin pipline permiten solamente una carga de memoria (load) o almacn en memoria (store) por instruccin, llevando a carga-almacena arquitectura (RISC). Por otro ejemplo, algunas maneras de implementar la instruccin pipline llevaron a una ranura de retardo. La demanda de procesamiento de seal digital de alta velocidad han empujado en el sentido contrario, forzando la implementacin de instruccin de manera particular. Por ejemplo, para realizar los filtros digitales es bastante insuficiente, la instruccin del MAC en un procesador tpico de seal digital (DSP) se debe implementar usando una arquitectura de Harvard que pueda traer una instruccin y dos palabras de datos simultneamente, y requiere un solo ciclo.

Diseo del conjunto de instrucciones[editar editar cdigo]


La densidad del cdigo En computadoras antiguas, la memoria del programa era costosa, as que minimizar el tamao de un programa para asegurar que va a caber en la memoria limitada era a menudo central. As el tamao combinado de todas las instrucciones necesit realizar una tarea particular, la densidad del cdigo, era una caracterstica importante de cualquier sistema de instruccin. Las computadoras con alta densidad del cdigo tambin tenan a menudo instrucciones complejas para la entrada del procedimiento, los retornos parametrizados, los lazos etc. Sin embargo, " instrucciones CISC" combinan simplemente una operacin bsica de la ALU, tal como " add", con el acceso de uno o ms operandos en memoria (usando modos de direccin tales como directo, indirecto, indexado). Ciertas arquitecturas pueden permitir dos o tres operandos (incluido el resultado) directamente en memoria o pueden permitir realizar funciones tales como el incremento automtico del puntero. RISC, fueron los primeros implementados con profundidad en el perodo de rpido crecimiento de las memorias de subsistemas, se reduce el cdigo con el fin de simplificar el circuito de aplicacin y con ello tratar de aumentar el rendimiento a travs de las frecuencias de reloj ms elevadas y el uso de ms registros. Las instrucciones RISC suelen realizar slo una operacin, como una "suma" de registros o una "carga" de una posicin de memoria en un registro, tambin suelen utilizar una longitud de instrucciones fijas, mientras que un conjunto de instrucciones tpicas CISC tiene instrucciones muchos ms cortas que esta longitud fija. Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable, por varias razones (por ejemplo: no tener que comprobar si una instruccin se extiende a ambos lados de una lnea de cach o el lmite de memoria virtual de la pgina), y por lo tanto algo ms fcil de optimizar la velocidad . Sin embargo, como los equipos RISC normalmente requieren ms y ms para implementar las instrucciones que ejecutan una determinada tarea, hacen menos ptimo el uso del ancho de banda y de la memoria cach. Las computadoras mnimas del conjunto de instrucciones (MISC) son una forma de mquina apilada, donde hay pocas instrucciones separadas (16-64), para poder caber instrucciones mltiples en una sola palabra de mquina. stos tipo de ncleos llevan a menudo poco silicio para implementarse, as que pueden ser observadas fcilmente en un FPGA o en una forma multinucleo. La densidad del cdigo es similar al RISC; la densidad creciente de la instruccin es compensada requiriendo ms de las instrucciones primitivas de hacer una tarea.

Nmero de operandos El conjunto de instrucciones puede ser clasificado por el nmero mximo de operandos explcitamente especificados en las instrucciones. (en los ejemplos que siguen, a, b y c se refieren a celdas de memoria, mientras que reg1 y sucesivos se refieren a los registros de la mquina). 0-operando, tambin llamada mquina de pila: todas las operaciones aritmticas se ejecutan en la parte superior de una o dos posiciones de la pila, push y pop son las instrucciones utilizadas para acceder a la memoria: push a, push b, add, pop c. 1-operando (mquinas de una direccin), tambin llamadas mquinas de acumulador, incluida en la mayora de las primeras computadoras y muchos microcontroladores pequeos: la mayora de instrucciones especifican un operando explcito a la derecha (un registro, una posicin de memoria, o una constante) y un operando a la izquierda: load a, add b, store c. 2-operando la mayora de las mquinas CISC y RISC entran en esta categora: CISC load a, reg1, add reg1, b; store reg1, c RISC - cargas que requieren la memoria explcita, las instrucciones seran: load a,reg1; load b,reg2; add reg1,reg2; store reg2,c 3-operando, permite una mejor reutilizacin de los datos: CISC - bien una sola instruccin: add a, b, c, o ms generalmente: move a,reg1; add reg1,b,c como la mayora de las mquinas se limitan a dos operandos de memoria. RISC - Debido a la gran cantidad de bits necesarios para codificar los tres registros, este esquema no suele estar disponible en los procesadores RISC con pequeas instrucciones de 16 bits: load a,reg1; load b,reg2; add reg1+reg2->reg3; store reg3,c; ms operandos, algunas mquinas CISC permiten una variedad de modos de direccionamiento que permiten ms de 3 operandos (registros o accesos a memoria), como el VAX "POLY", instruccin de evaluacin de polinomio.

Caractersticas que debe tener un conjunto de instrucciones[editar editar cdigo]


Las caractersticas que se pretende que tenga un conjunto de instrucciones son cuatro, principalmente: Completo: Que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador (computable o decidible). Eficiente: Que permita alta velocidad de clculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos (memoria), es decir, debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos. Autocontenidas: Esto es, que contengan en s mismas toda la informacin necesaria para ejecutarse. Independientes: Que no dependan de la ejecucin de alguna otra instruccin.

Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones: -> escritura

-> mover a la izquierda una posicin y leer -> mover a la derecha una posicin y leer -> parar En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la prctica el conjunto suele ser ms amplio en aras de conseguir un mejor rendimiento, tanto en uso de recursos como en consumo de tiempo.

Tipos de instrucciones y ejemplos[editar editar cdigo]


Transferencia de datos: Copian datos de un origen a un destino, sin modificar el origen y normalmente sin afectar a los flags o indicadores de condicin. Pueden transferir palabras, fracciones de palabras (bytes, media palabra) o bloques completos de n bytes o palabras.

Estas operaciones pueden ser: -> registro - registro -> registro - memoria -> memoria - registro -> memoria - memoria Nemotcnicos ms frecuentes: move: copia el contenido de un registro(o memoria) a otro. store: copia el contenido de un registro a memoria. load: copia el contenido de una posicin de memoria a un registro. move block: copia un bloque de datos de una posicin de memoria a otra. move multiple: copia del origen en varias posiciones de memoria. exchange: intercambia el contenido de dos operandos. clear: pone a 0 el destinto. (todos los bits) set: pone a 1 el destino. (todos los bits) push: introduce un dato en la cabecera de la pila. (indicada por el SP) pop: saca un dato de la cabecera de la pila. (indicada por el SP) Instrucciones aritmticas: Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condicin.

Nemotcnicos ms frecuentes: add: Suma.

add with carry: Suma con acarreo. subtract: Resta. subtract with borrow: Resta teniendo en cuenta el adeudo anterior. increment: incrementa en 1 un valor. decrement: decrementa en 1 un valor. multiply: multiplica. divide: divide. extend: aumenta el operando de tamao. negate: cambia de signo. absolute: valor absoluto.

-> Pueden tener instrucciones para tratar con nmeros en BCD e incluyen operaciones en coma flotante, lo cual se identifica con una 'f' antes del nombre del nemotcnico como por ejemplo: fabsolute Instrucciones de comparacin: Suelen preceder a una instruccin de bifurcacin condicional y modifican los flags. No hay que pensar que las instrucciones de salto condicional dependen de este repertorio, ya que lo nico que hace el salto condicional es consultar los flags y salta si precede, pero no depende de ninguna instruccin de comparacin. (de hecho cualquier operacin aritmtica realizada anteriormente a un salto condicional puede provocar que este "salte").

Nemotcnicos ms frecuentes: compare: Resta los dos operandos pero no almacena el resultado, solo modifica los flags. test: compara un cierto valor especificado con el 0. Instrucciones lgicas: Realizan operaciones booleanas "bit a bit" entre dos operandos. Como las aritmticas tambin modifican los flags.

Nemotcnicos ms frecuentes: and: el "y" lgico. or: el "o inclusivo" lgico. xor: el "o exclusivo" lgico.

not: la negacin lgica. (complemento a 1, no confundir con el cambio de signo "negate" que es el complemento a 2) Instrucciones de Desplazamiento: Pueden ser aritmtico o lgico y pueden incluir o no rotaciones. Pueden ser de izquierda a derecha.

Nemotcnicos ms frecuentes: shift: desplazamiento aritmtico o lgico. rotate: rotacin con o sin acarreo. Instrucciones de bits: Comprueban un bit del operando y su valor lo reflejan en el indicador de cero. Pueden poner un bit a 0 o complementarlo.

Nemotcnicos ms frecuentes: bit test: comprueba un bit. bit clear: comprueba un bit y lo pone a 0. bit set: comprueba un bit y lo pone a 1. Instrucciones de control: Permiten modificar la secuencia normal de ejecucin de un programa, puede hacerse por salto condicional relativo o absoluto.

Se clasifican en cuatro grupos: -> salto incondicional -> salto condicional -> Llamada a subrutinas -> Gestin de las interrupciones saltos: Pueden ser condicionales o incondicionales, se suelen especificar como jump o brantch, y en el caso de los condicionales se suele llamar jcond o bcond donde cond es una o ms letras que indican la condicin que ha de cumplirse para que el salto se produzca.

-> Incondicional: salta sin comprobar ninguna condicin. Nemotcnicos ms frecuentes: jump o brantch -> Condicional: salta si la condicin se cumple. Nemotcnicos ms frecuentes: jcond o bcond Llamadas a subrutinas: Invoca la ejecucin de funciones anteriormente definidas.

Nemotcnicos ms frecuentes: call (llamada) y ret (retorno) Gestin de interrupciones: Se usan para llamar a las rutinas de servicio de interrupcin y esto se puede hacer por hardware o bien por software. Necesita una instruccin similar a

return para retornar al contexto anterior pero restableciendo el estado de la mquina, para no afectar a la aplicacin a la cual se interrumpi (iret). Instrucciones de E/S: Son instrucciones de transferencia salvo que el origen/destino de dicho flujo es un puerto de un dispositivo de E/S. Estas instrucciones pueden darse mediante dos alternativas:

->E/S "mapeada" en memoria: Los perifricos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas, como son: load, store y move. ->E/S independiente: Necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E/S, ya que este mapa y el mapa de memoria son disjuntos. Nemotcnicos ms frecuentes: input o read: Pemite leer informacin de un puerto y trasladarla a memoria principal. output o write: Permite escribir informacin en un puerto de un dispositivo. test i/o: Lee informacin de control de un perifrico. control i/o: Enva informacin de control hacia un perifrico.

Instrucciones de control y miscelneas: Nemotnicos ms frecuentes: halt: Detiene la ejecucin del programa hasta que una interrupcin arranca otro programa. wait: Sirve para deterner la ejecucin de un programa hasta que sucede un determinado evento que no es una interrupcin (otra condicin externa al primer programa). nop: No realiza ninguna operacin, sirve para rellenar huecos en un programa o temporizar esperas. enable: Habilita las interrupciones. disable: Deshabilita las interrupciones. test and set: Se utiliza para la implementacin de la exclusin mutua, esto es, que un procesador no pueda acceder a un determinado recurso que est siendo usado por otro procesador en ese mismo momento.

Se usan como semforos, esto es, se declara una variable entera que tendr el valor 0 si el recurso esta libre y 1 si est siendo utilizado, de manera que si un procesador comprueba y el semforo est en 1 tendr que esperar hasta que este cambie a 0. (1 = s.rojo y 0 = s.verde)

Vase tambin[editar editar cdigo]


Anexo:Listados de instrucciones x86

4004, 4040 6800 (Motorola) Alpha (DEC) ARM (Advanced RISC Machines) DLX (John Hennessy y David Patterson) IA-64 (Intel) MIPS (MIPS Computer Systems) PA-RISC (HP) POWER (IBM) PowerPC (Alianza AIM) SPARC (Sun Microsystems) Z8, eZ8, etc. Burroughs B5000/B6000/B7000 series eSi-RISC Mico32 PA-RISC IBM 700/7000 series System/360 y sucesores siguientes compatibles System/370 System/390

z/Architecture Power Architecture PDP-11 SPARC SuperH Tricore Transputer UNIVAC 1100/2200 series VAX x86 IA-32 (i386, Pentium, Athlon) x86-64 (64-bit superset of IA-32) EISC (AE32K)

aritmtica Rama de las matemticas que se ocupa del estudio de los nmeros, sus propiedades y las habilidades necesarias para trabajar con ellos. Existen cuatro operaciones fundamentales en la aritmtica: adicin o suma, sustraccin o resta, multiplicacin y divisin. stas son las bases para desarrollar todas las dems operaciones, como elevacin a

potencias (cuadrado o cubo de un nmero), extraccin de races (cuadrada o cbica), porcentajes, fracciones y razones.

CODIGO ASCII, EBCDIC Y BCD

CODIGO ASCII, EBCDIC Y BCD

BCD Significa decimal codificado en binario (binary coded decimal) y tambin se conoce por las siglas espaolas CBD. Realmente no es un cdigo de E/S, sino una forma de codificar los smbolos numricos del 0 al 9 que se emplean en varios cdigos de E/S, entre ellos ASCII que explicare mas tarde. BCD divide cada octeto en dos mitades o cuartetos, cada uno de los cuales almacena en binario un cifra. Con este cdigo es muy fcil convertir el binario (b=2) al decimal (b=10). La representacin de un numero decimal en BCD se realiza expresando el digito en su representacin binaria -> 128 en BCD seria = 0001 0010 1000 EBCDIC El cdigo BCD se expandira de este modo: extendido de caracteres decimales codificados en binario para el intercambio de informacin (extended BCD interchange intercode). ES un sistema de codificacin que tiene como objetivo la representacin de caracteres alfanumricos. Es el utilizado por IBM para sus ordenadores de la serie IBM PC. En este sistema de caracteres, cada carcter tiene 8 bits, entonces, al tener 8 podremos representar hasta 2 elevado 8 = 256 caracteres. Sera posible almacenar letras maysculas, caracteres especiales etc para los dispositivos de E/S. ASCII Cdigo estadunidense (para variar) Estndar para el intercambio de la informacin (american standard code for information interchange). Es el recomendado por en ANSI (instituto estadunidense de normas). Utiliza grupos de 7 bits por carcter, permitiendo 2 elevado 7 = 128 caracteres diferentes, lo que es suficiente para el alfabeto con letras maysculas y minsculas y smbolos de una mquina de escribir corriente. Un cdigo ASCII extendido usa 8 bits por carcter, lo que aade otros 128 caracteres posibles. Este juego de cdigos ms amplio permite que se agreguen los smbolos de lenguajes extranjeros y varios smbolos grficos. ASCII es el cdigo ms extendido y es utilizado por sistemas operativos como DOS, Windows, y UNIX. Un ejemplo: todo lo que introducimos en nuestro PC, suponiendo que este bajo un plataforma antes mencionada, o por ejemplo GNU/Linux, seria en cdigo ASCII, claro que eso al procesarlo al ordenador, se pasara a binario en paquetes de 8 bits sea de 1 byte de informacin por carcter.

Tabla del cdigo ASCII

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 ! # $ % & ' ( ) * + , . / 0 1 2

77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95

M N O P Q R S T U V W X Y Z [ \ ] ^ _

122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140

z { | } ~

167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185

212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230

51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K

96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

` a b c d e f g h i j k l m n o p q r s t u v w x

141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165

Pt

186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210

231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254

76

121

166

211

Publicado 20th October 2011 por estrella

Add a comment

Operador a nivel de bits


Una operacin bit a bit o bitwise opera sobre nmeros binarios a nivel de sus bits individuales. Es una accin primitiva rpida, soportada directamente por los procesadores. En procesadores simples de bajo costo, las operaciones de bit a bit, junto con los de adicin y sustraccin, son tpicamente sustancialmente ms rpidas que la multiplicacin y la divisin, mientras que en los modernos procesadores de alto rendimiento usualmente las operaciones se realizan a la misma velocidad.
ndice
[ocultar]

1 Tipos de operaciones 2 Operadores bit a bit

o o

2.1 NOT 2.2 AND

2.2.1 Determinando el estado de bits 2.2.2 Extrayendo bits 2.2.3 Apagando bits

2.3 OR

2.3.1 Encendiendo bits 2.3.2 Copiando bits 2.3.3 Procedimiento genrico para copiar un grupo de bits

2.4 XOR

2.4.1 Invirtiendo bits selectivamente 2.4.2 Igualdad y desigualdad de bits 2.4.3 Asignar cero a un registro

2.5 En resumen

3 Operaciones de desplazamiento y rotacin

3.1 Desplazamientos de bits

3.1.1 Desplazamiento lgico

3.1.1.1 Moviendo bits 3.1.1.2 Multiplicacin y divisin por 2 , de enteros sin signo
n

3.1.2 Desplazamiento aritmtico

3.2 Rotacin de bits

3.2.1 Rotacin 3.2.2 Rotacin a travs del bit del acarreo

4 Vase tambin

Tipos de operaciones[editar editar cdigo]


1. Operaciones bit a bit: Ejecutan las operaciones lgicas AND, OR, XOR, NOT, etc, sobre los bits individuales de los operandos. 2. Operaciones de Desplazamiento: Desplazan los bits de los operandos hacia la derecha o hacia la izquierda una o ms posiciones. 3. Operaciones de Rotacin: Rotan los bits del operando hacia la derecha o hacia la izquierda una o ms posiciones. Pueden usar o no el flag del acarreo como un bit adicional en la rotacin.

Operadores bit a bit[editar editar cdigo]


En las explicaciones de abajo, cualquier indicacin de una posicin de un bit es contada de derecha a izquierda a partir del bit menos significativo. Por ejemplo, el valor binario 0001 (el decimal 1) tiene ceros en cada posicin excepto en la primera.

NOT[editar editar cdigo]


El NOT bit a bit, o bitwise, o complemento, es una operacin unaria que realiza la negacin lgica en cada bit, invirtiendo los bits del nmero, de tal manera que los ceros se convierten en 1 y viceversa. Por ejemplo: NOT 10011 = 01100

A NOT A 0 1 1 0

El NOT forma el complemento a uno de un valor binario dado. En un nmero entero con signo en complemento a dos, el NOT da como resultado el inverso aditivo del nmero menos 1, es decir NOT x = -x - 1. Para obtener el complemento a dos de un nmero, se debe sumar 1 al resultado, dando el negativo del nmero. Esto equivale a un cambio de signo del nmero: +5 se convierte en -5, y -5 se convierte en +5.

Para los enteros sin signo, el complemento bit a bit es la reflexin de espejo del nmero a travs del punto medio del rango del entero. Por ejemplo, para los enteros sin signo de 8 bits, NOT x = 255 - x, para los enteros sin signo de 16 bits, NOT x = 65535 - x, y en general, para los enteros sin signo de n bits, NOT x = (2n - 1) - x.

AND[editar editar cdigo]


El AND bit a bit, o bitwise, toma dos nmeros enteros y realiza la operacin AND lgica en cada par correspondiente de bits. El resultado en cada posicin es 1 si el bit correspondiente de los dos operandos es 1, y 0 de lo contrario, por ejemplo: 0101 AND 0011 = 0001 1 1 El AND puede ser usado para filtrar determinados bits, permitiendo que unos bits pasen y los otros no. 1 1 0 0 A B A AND B 0 0 0 1 0 0

Determinando el estado de bits[editar editar cdigo]


El AND puede ser usado para determinar si un bit particular est encendido (1) o apagado (0). Por ejemplo, dado un patrn de bits 0011, para determinar si el segundo bit est encendido se usa una operacin AND con una mscara que contiene encendido solo el segundo bit, que es el que se quiere determinar: 0011 AND 0010 = 0010 Puesto que el resultado 0010 es diferente de cero, se sabe que el segundo bit en el patrn original est encendido. Esto es a menudo llamado enmascaramiento del bit (bit masking). (Por analoga, al uso de las cintas de enmascarar, que cubren o enmascaran porciones que no deben ser alteradas o porciones que no son de inters. En este caso, los valores 0 enmascaran los bits que no son de inters). (mscara)

Extrayendo bits[editar editar cdigo]


El AND se puede usar para extraer determinados bits de un valor. Si en un byte, por ejemplo, tenemos representados dos dgitos hexadecimales empaquetados, (uno en los 4 bits superiores y el otro en los 4 bits inferiores), podemos extraer cada dgito hexadecimal usando el AND con las mscaras adecuadas: 0011 0101 AND 1111 0000 = 0011 0000 Hex. superior (mscara) 0011 0101 AND 0000 1111 = 0000 0101 Hex. inferior (mscara)

Apagando bits[editar editar cdigo]


El AND tambin se puede usar para apagar determinados bits. Solo hay que poner una mscara con bits en cero en las posiciones de los bits que se quieren apagar y 1 en los dems bits. Todos los dems bits con la mscara 1 pasarn inalterados, y los que tienen la mscara 0 se apagarn. Dado el ejemplo 0111, el segundo bit puede ser apagado usando un AND con el patrn que tiene un cero en el segundo bit y un 1 en el resto de los bits:

0111 AND 1101 = 0101 (mscara)

OR[editar editar cdigo]


Una operacin OR de bit a bit, o bitwise, toma dos nmeros enteros y realiza la operacin OR inclusivo en cada par correspondiente de bits. El resultado en cada posicin es 1 si el bit correspondiente de cualquiera de los dos operandos es 1, y 0 si ambos bits son 0, por ejemplo: 0101 OR 0011 = 0111

A B A OR B 0 0 0 1 1 0 1 1 0 1 1 1

Encendiendo bits[editar editar cdigo]


El OR bit a bit, o bitwise, puede ser usado para encender un bit individual o un conjunto de bits. Para ello se usa una mscara OR con los bits que se quieren encender en 1 y el resto de los bits en cero. El resultado ser que todos los bits originales quedarn como estaban excepto los bits en donde la mscara tenga 1, que resultarn encendidos. Por ejemplo, si en el patrn de bits 0101 se quiere encender el segundo bit se har de la manera siguiente: 0101 OR 0010 = 0111 (mscara)

Copiando bits[editar editar cdigo]


El OR, y el desplazamiento lgico (explicado ms adelante), puede ser usado para copiar un grupo de bits a una posicin determinada. Supongamos que tenemos el signo, el exponente, y la parte significativa de un nmero, en diferentes registros de 32 bits, y queremos empaquetarlos para formar un nmero en representacin depunto flotante de simple precisin de 32 bits: Signo: 00000000000000000000000000000001 Exponente: 00000000000000000000000010000011 Parte significativa: 00000000011100000111000000001110 Todos ellos tienen los valores correctos y tenemos que mover cada uno de ellos a su posicin para poder armar el punto flotante. Se debe mover el signo 31 posiciones hacia la izquierda, el exponente 23 posiciones hacia la izquierda, y la parte significativa no es necesaria moverla porque ya est en la posicin correcta. Estos desplazamientos se hacen con la operacin de desplazamiento hacia la izquierda descrito ms adelante:

Signo: 10000000000000000000000000000000 desplaza el signo 31 posiciones hacia la izquierda Exponente: 01000001100000000000000000000000 desplaza el exponente 23 posiciones hacia la izquierda Parte significativa: 00000000011100000111000000001110 significativa no se mueve, ya est en su lugar

<-- Se <-- Se <-- La parte

Ahora que tenemos cada parte del nmero en su lugar, las combinamos para empaquetarlas y formar el nmero en su representacin de punto flotante de 32 bits. Para ello usamos el OR: (Resultado final) = (Signo) OR (Exponente) OR (Parte significativa): Signo: 10000000000000000000000000000000 Exponente: 01000001100000000000000000000000 Parte significativa: 00000000011100000111000000001110 Resultado final: 11000001111100000111000000001110 Ya tenemos el nmero en su representacin de punto flotante definitiva.

Procedimiento genrico para copiar un grupo de bits[editar editar cdigo]


Para copiar una serie de bits en un lugar determinado usando OR, se necesita que ese lugar donde se van a copiar tenga sus bits en cero (para hacer un espacio libre para poder copiar los bits). Tambin se necesita que el registro donde se encuentran los bits que se quieren copiar tenga los dems bits (los que no se quieren copiar) apagados. Ambas operaciones, aclarar los bits en el el lugar del destino, y aclarar los bits que no se quieren copiar se hacen con AND: Tenemos dos registros de 16 bits: Registro A: 1011 1100 0110 1100 Registro B: 1001 0001 1111 1010 Queremos copiar los cuatro bits menos significativos del registro A en el registro B. Para ello, primero aclaramos los 4 bits menos significativos de B con una operacin AND, y as tener un espacio libre: 1001 0001 1111 1010 AND 1111 1111 1111 0000 = 1001 0001 1111 0000 <-- Valor original del registro B <-- Mscara para aclarar los bits de <-- Registro B preparado para

B donde se van a copiar los que vienen de A recibir los 4 bits menos significativos de A Luego, aclaramos los bits de A que no queremos copiar, dejando solo los bits que queremos copiar: 1011 1100 0110 1100 <-- Valor original del registro A

AND 0000 0000 0000 1111 de A que se quieren copiar = 0000 0000 0000 1100 se desean copiar

<-- Mscara para dejar solo los bits <-- Registro A con solo los bits que

Ahora estamos listos para hacer el OR de A sobre B y combinar los 4 bits menos significativos de A sobre B: 0000 0000 0000 1100 desean copiar OR 1001 0001 1111 0000 los 4 bits que desean copiar = 1001 0001 1111 1100 <-- Registro B con los 4 bits menos significativos de A copiados sobre l Ahora, el registro B tiene copiado los 4 bits menos significativos de A. El resto de los bits de B quedaron intactos. <-- Registro B con un espacio para <-- Registro A con los 4 bits que se

XOR[editar editar cdigo]


El XOR bit a bit, o bitwise, toma dos nmeros enteros y realiza la operacin OR exclusivo en cada par correspondiente de bits. El resultado en cada posicin es 1 si el par de bits son diferentes y cero si el par de bits son iguales. Por ejemplo: 0101 XOR 0011 = 0110

A B A XOR B 0 0 0 1 1 0 1 1 0 1 1 0

Invirtiendo bits selectivamente[editar editar cdigo]


A diferencia del NOT, que invierte todos los bits de un operando, el XOR bit a bit, o bitwise, puede ser usado para invertir selectivamente uno o ms bits en un registro. Dado el patrn de bits 0011, el segundo y el cuarto bit pueden ser invertidos por XOR con una mscara con un patrn de bits conteniendo 1 en las posiciones que se quieren invertir, la segunda y cuarta, y 0 en las dems. Los bits de las posiciones con cero de la mscara resultarn inalterados: 0011 XOR 1010 = 1001 (mscara)

Igualdad y desigualdad de bits[editar editar cdigo]


XOR es equivalente y tiene la misma tabla de verdad que la desigualdad, XOR y desigualdad son sinnimos:

A B A XOR B A <> B 0 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0

El XOR puede usarse para saber si los bits correspondientes de dos operandos son iguales o diferentes. Por ejemplo, si tenemos dos operandos, 1000 y 0010 y queremos saber si los bits ms significativos de ambos son iguales procedemos como sigue: 1000 XOR 0010 = 1010 Ahora, cada bit del resultado estar en 0 si el bit correspondiente de los dos operandos son iguales, y en 1 si son diferentes. El bit ms significativo del resultado est en 1 indicando que son diferentes, pero tenemos que aislarlo de los dems con un AND para poder usarlo o tomar una decisin: 1010 AND 1000 = 1000 Ahora lo tenemos aislado en el resultado final, que es diferente de cero indicando que los bits ms significativo de los operandos son diferentes. (resultado anterior) (mscara para aislar el bit ms significativo)

Asignar cero a un registro[editar editar cdigo]


Los programadores avanzados de lenguaje ensamblador usan XOR como una manera eficiente y rpida de asignar cero a un registro. Realizar XOR de un valor contra s mismo siempre resulta en cero (A XOR A siempre es cero), y en muchas arquitecturas esta operacin requiere menos ciclos de reloj y/o memoria que cargar un valor cero a un registro (A = 0).

En resumen[editar editar cdigo]


Las operaciones bit a bit, o bitwise, pueden encender, apagar, dejar pasar, eliminar, o invertir, bits individualmente o en conjunto, usando la mscara adecuada con un OR, AND, o XOR: 0011 10101 OR 1000 (mscara) 11000 (mscara) 1011 1010 AND 1110 (mscara) XOR 1001 (mscara) AND 00111 (mscara) AND 10101

= 1011 10000 Enciende el los 3 bit superior inferiores

= 1010 = 0011 Apaga el Invierte los bits bit inferior inferior y superior

= 00101 Deja pasar los 3 bits inferiores

= Elimina bits

NOT invierte los bits y XOR junto con AND permiten determinar si dos operandos tienen los bits de una determinada posicin iguales o diferentes: NOT 1011 = 0100 invierte todos los bits interesa) = 00010 Determina si los bits de la segunda posicin de los dos operandos son iguales o diferentes 0 = iguales 1 = diferentes 11010 XOR 10100 = 01110 AND 00010 (0 = bit iguales, 1 = bits diferentes) (se filtra el segundo bits, que es el que

Operaciones de desplazamiento y rotacin[editar editar cdigo]


Las operaciones de desplazamiento y rotacin son: Desplazamiento lgico Desplazamiento aritmtico Rotacin Rotacin a travs del bit de acarreo

Desplazamientos de bits[editar editar cdigo]


Los desplazamientos de bit (bit shifts) son a veces considerados operaciones bit a bit, porque operan en la representacin binaria de un nmero entero en vez de sobre su valor numrico; sin embargo, los desplazamientos de bits no operan en pares de bits correspondientes, y por lo tanto no pueden ser llamados propiamente como "bit a bit" (bit-wise). En estas operaciones los dgitos (bits) son movidos, o desplazados, hacia la izquierda o hacia la derecha. Los registros en un procesador de computador tienen un ancho fijo, as que algunos bits sern desplazados hacia fuera ("shifted out"), es decir, "salen" del registro por un extremo, mientras que el mismo nmero de bits son desplazados hacia adentro ("shifted in"), es decir, "entran" por el otro extremo; las diferencias entre los operadores de desplazamiento de bits estn en cmo stos determinan los valores de los bits que entran al registro (desplazamiento hacia adentro) (shifted-in).

Desplazamiento lgico[editar editar cdigo]


Artculo principal: Desplazamiento lgico

Desplazamiento lgico hacia la izquierda

Desplazamiento lgico hacia la derecha

Hay dos desplazamientos lgicos (logical shifts). El desplazamiento lgico hacia la izquierda (left shift) y el desplazamiento lgico hacia la derecha (right shift). En el desplazamiento lgico los bits de un registro son desplazados (movidos) una o ms posiciones hacia la derecha o hacia la izquierda. Los bit que salen del registro por un extremo se pierden y en el otro extremo del registro se rellena con un bit cero por cada bit desplazado. Por ejemplo. Si se tiene en un registro de 8 bits el valor 10110011, y se hace un desplazamiento hacia la izquierda de un bit, todos los bits se mueven una posicin hacia la izquierda, el bit de la izquierda se pierde y entra un bit cero de relleno por el lado derecho. En un desplazamiento de un bit hacia la derecha ocurre algo anlogo, el bit de la derecha se pierde y el de la izquierda se rellena con un cero: 10110011 desplazamiento 1 <-- 0110011 <-- 0 01100110 desplazamiento Desplazamiento hacia la izquierda Desplazamiento hacia la derecha 0 --> 1011001 --> 1 01011001 <-- Desplazamiento <-- Bits despus del 10110011 <-- Bits antes del

En determinados procesadores, queda almacenado el ltimo bit que sali con el desplazamiento del registro. En la serie de los procesadores x86dicho bit queda almacenado en el flag del acarreo.

Moviendo bits[editar editar cdigo]


El desplazamiento lgico se usa para mover bits hacia la izquierda o hacia la derecha para colocarlos en la posicin adecuada. Por ejemplo, supongamos que tenemos, en dos registros del tamao de un byte, a dos dgitos hexadecimales (en representacin binaria de 4 bits cada uno), y se quiere empaquetarlos en un solo byte, donde los 4 bits superiores es el hexadecimal ms significativo y los 4 bits inferiores es el hexadecimal menos significativo: 0000 1001 0000 1010 <-- Dgito hexadecimal ms significativo (hexadecimal 9)

<-- Dgito hexadecimal menos significativo (hexadecimal A)

Para empaquetarlos en un solo byte, primero hay que desplazar el hexadecimal ms significativo 4 posiciones hacia la izquierda. (Esto se hace con el desplazamiento lgico hacia la izquierda): 1001 0000 <-- hexadecimal 9, desplazado 4 bits hacia la izquierda

para colocarlo en la posicin correcta dentro del byte Luego, se hace un OR de los dos valores que contienen los dgitos hexadecimales para que queden combinados en un solo byte: 0000 1010 OR 1001 0000 1001 1010 <-- Hexadecimal menos significativo A <-- OR con el hexadecimal ms significativo 9, el cual <-- Byte con los dos hexadecimales empaquetados

ya est en su posicin (hexadecimal 9A) Ahora tenemos un byte con el valor de 1001 1010, el cual tiene los dos dgitos hexadecimales empaquetados.

Multiplicacin y divisin por 2n, de enteros sin signo[editar editar cdigo]


En nmeros enteros sin signo, el desplazamiento lgico hacia la izquierda equivale a una multiplicacin por 2 y el desplazamiento lgico hacia la derecha equivale a una divisin por 2. En la divisin (desplazamiento hacia la derecha), se pierde el bit menos significativo, dando como resultado un truncamiento del resultado (redondeo hacia abajo, hacia menos infinito). As, 6 / 2 es igual a 3, pero 7 / 2 es igual a 3,5, pero el 0,5 se pierde quedando el resultado en 3. Los programadores de lenguaje ensamblador usan esta propiedad para hacer multiplicaciones y divisiones rpidas, de enteros sin signo, por una potencia de 2, en donde n desplazamientos n equivalen a multiplicar o dividir por 2 . Tambin, si el procesador no tiene operaciones de multiplicacin y divisin de enteros, o si stas son muy lentas, se puede multiplicar o dividir usando desplazamientos y sumas para multiplicar y desplazamientos y restas para dividir. Por ejemplo, para multiplicar un entero por 10, se procede como sigue (en el lenguaje ensamblador del x86):

Se quiere multiplicar el contenido del registro EAX por 10: En las instrucciones de abajo, EAX y EBX son registros del procesador, SHL (shift left), desplaza el registro indicado una posicin (un bit) hacia la izquierda (que equivale a multiplicar por 2), MOV copia el registro de la derecha sobre el registro de la izquierda, y ADD suma el registro de la derecha al registro de la izquierda. SHL EAX, 1 ; EAX = EAX * 2 EAX = 2n ; desplaza a la izquierda el contenido del registro EAX una posicin, ; (multiplica EAX por 2) MOV EBX, EAX ; EBX = EAX EBX = 2n ; copia el registro EAX en EBX, ahora los dos registros tienen 2n SHL EBX, 1 ; EBX = EBX * 2 EBX = 4n ; multiplica EBX por 2, obteniendo 4n SHL EBX, 1 ; EBX = EBX * 2 EBX = 8n ; vuelve a multiplicar EBX por 2, obteniendo 8n ADD EAX, EBX ; EAX = EAX + EBX EAX = 2n + 8n = 10n ; suma EBX (8n) a EAX (2n), ; (ahora EAX tiene el valor original multiplicado por 10)

Desplazamiento aritmtico[editar editar cdigo]


Artculo principal: Desplazamiento aritmtico

Desplazamiento aritmtico hacia la izquierda

Desplazamiento aritmtico hacia la derecha

Los desplazamientos aritmticos son similares a los desplazamientos lgicos, solo que los aritmticos estn pensados para trabajar sobre nmeros enteros con signo en representacin de complemento a dos en lugar de enteros sin signo. Los desplazamientos aritmticos permiten la multiplicacin y la divisin por dos, de nmeros enteros con signo, por una potencia de dos. n Desplazar n bits hacia la izquierda o a la derecha equivale a multiplicar o dividir por 2 , (asumiendo que el valor no hace desbordamiento (overflow o underflow)). El desplazamiento aritmtico hacia la izquierda es exactamente igual al desplazamiento lgico hacia la izquierda. De hecho son dos nombres diferentes para exactamente la misma operacin. Al desplazar los bits una posicin hacia la izquierda es equivalente a una multiplicacin por 2 independientemente de si es un nmero entero con signo o sin signo. En los procesadores x86, el ensamblador tiene dos pnemnicos para el desplazamiento lgico y el aritmtico hacia la izquierda, pero cuando el programa es ensamblado, solo hay un opcode para ambos en la instruccin enlenguaje de mquina. El desplazamiento aritmtico hacia la derecha es diferente al desplazamiento lgico hacia la derecha. En los enteros sin signo, para dividir por 2, se debe usar el desplazamiento lgico, el cual siempre agrega un 0 en el extremo izquierdo por cada desplazamiento de un bit hacia la derecha. En cambio, en los enteros con signo, se debe usar el desplazamiento aritmtico hacia la derecha, el cual copia el bit del signo (el bit ms significativo(MSB)) en el espacio vaco que queda en el extremo izquierdo cada vez que se hace un desplazamiento de un bit hacia la derecha. De esta manera, se divide efectivamente por 2 al entero con signo. Si el entero con signo es positivo, (con el bit del signo igual a 0), se insertar el bit 0 del signo en el extremo izquierdo al desplazar un bit hacia la derecha (igual que el desplazamiento lgico hacia la derecha), pero si es un entero negativo, (con el bit del signo igual a 1), se insertar el bit 1 del bit del signo en el extremo izquierdo. De esta manera, el signo del nmero se preserva con la divisin por 2 y el nmero resultante tiene sentido. Si se insertara un 0 a la izquierda a un nmero negativo (como lo hara el desplazamiento lgico hacia la derecha), en primer lugar, este nmero negativo cambiara de signo a positivo, y en segundo lugar, la interpretacin de los bits restantes no tendran sentido. Estos ejemplos utilizan un registro de 8 bits: 00010111 (Decimal 23) (Desplazamiento aritmtico hacia la izquierda de un nmero positivo) = 00101110 (Decimal 46) (El bit de la izquierda se pierde y un bit 0 se aade a la derecha) 11010111 (Decimal -41) (Desplazamiento aritmtico hacia la izquierda de un nmero negativo) = 10101110 (Decimal -82) (El bit de la izquierda se pierde y un bit 0 se aade a la derecha) 00010111 (Decimal 23) (Desplazamiento aritmtico hacia la derecha de un nmero positivo)

= 00001011 (Decimal 11) (El bit de la derecha se pierde y el bit del signo anterior se conserva en el resultado) 11010111 (Decimal -41) (Desplazamiento aritmtico hacia la derecha de un nmero negativo) = 11101011 (Decimal -21) (El bit de la derecha se pierde y el bit del signo anterior se conserva en el resultado) Si el nmero binario es tratado como complemento a 1, entonces la misma operacin de n desplazamiento hacia la derecha resulta en una divisin por 2 redondeando hacia el cero.

Rotacin de bits[editar editar cdigo]


Rotacin[editar editar cdigo]
Artcul o princip al: De

splaz amien to circul ar Otra Desplazamiento o rotacin circular hacia la izquierda Desplazamiento o rotacin circular hacia la derecha forma de desplazamiento es el desplazamiento circular o rotacin de bits. En esta operacin, los bits de un registro son rotados de una manera circular como si los extremos izquierdo y derecho del registro estuvieran conectados. En la rotacin hacia la izquierda, el bit que sale por el extremo izquierdo entrar por el extremo derecho, y viceversa con la rotacin hacia la derecha. Esta operacin es til si es necesario conservar todos los bits existentes, y es frecuentemente usada en criptografa digital.

Rotacin hacia la izquierda a travs del bit del acarreo Rotacin hacia la derecha a travs del bit del acarreo

Rotacin a travs del bit del acarreo[editar editar cdigo]

Rotar a travs del bit del acarreo es similar a la operacin de rotar anterior (rotacin sin acarreo). La diferencia est en que los dos extremos del registro estn unidos entre s a travs del flag del acarreo, el cual queda en medio de ellos. El bit que sale por un extremo va al flag del acarreo, y el bit original que estaba en el flag del acarreo entra al registro por el extremo opuesto. Si se fija el flag del acarreo de antemano, una rotacin simple a travs del acarreo puede simular un desplazamiento lgico o aritmtico de una posicin. Por ejemplo, si el flag del acarreo contiene 0, despus de una rotacin hacia la derecha a travs del flag del acarreo, equivale a un desplazamiento lgico hacia la derecha, y si el flag del acarreo contiene una copia del bit del signo, equivale a un desplazamiento aritmtico hacia la derecha. Por esta razn, algunos microcontroladores tales como los PIC solo tienen las funciones de rotar y rotar a travs del acarreo, y no se preocupan de tener instrucciones de desplazamiento aritmtico o lgico. Rotar a travs del acarreo es especialmente til cuando se hacen desplazamientos en nmeros ms grandes que el tamao nativo de la palabra del procesador, porque si, por por ejemplo, un nmero grande es almacenado en dos registros y se quiere desplazar hacia la derecha un bit, el bit que sale del extremo derecho del registro de la izquierda debe entrar por el extremo izquierdo del registro de la derecha. Con rotacin a travs del acarreo, ese bit es almacenado en el flag del acarreo durante el primer desplazamiento hacia la derecha sobre el registro de la izquierda, listo para ser desplazado al registro de la derecha usando una simple rotacin con acarreo hacia la derecha y sin usar ninguna preparacin extra.

Вам также может понравиться