• No se han encontrado resultados

Almacenamiento de caracteres

In document Lenguaje Ensamblador Irvine 5a Edición (página 49-55)

Conceptos básicos

1.2 Concepto de máquina virtual

1.3.6 Almacenamiento de caracteres

Si las computadoras sólo pueden almacenar datos binarios, ¿cómo representan los caracteres? Se requiere un

conjunto de caracteres, una asignación de caracteres a enteros. Hasta hace unos cuantos años, los conjuntos

de caracteres utilizaban sólo 8 bits. Incluso ahora, cuando las microcomputadoras IBM compatibles se ejecu- tan en modo de caracteres (como el MS-DOS), utilizan el conjunto de caracteres ASCII (se pronuncia como “aski”). ASCII es el acrónimo de Código estándar estadounidense para el intercambio de información. En ASCII, se asigna un entero único de 7 bits a cada carácter. Como los códigos ASCII utilizan sólo los 7 bits menores de cada byte, el bit adicional se utiliza en varias computadoras para crear un conjunto de caracteres propietario. Por ejemplo, en las microcomputadoras IBM compatibles, los valores del 128 al 255 representan símbolos gráfi cos y caracteres griegos.

Conjunto de caracteres ANSI El Instituto Nacional Estadounidense de Estándares (ANSI) defi ne un con- junto de caracteres de 8 bits que se utiliza para representar hasta 256 caracteres. Los primeros 128 caracteres corresponden a las letras y símbolos en un teclado estadounidense estándar. Los otros 128 caracteres representan caracteres especiales, como las letras en los alfabetos internacionales, los acentos, los símbolos de moneda y las fracciones. MS-Windows Me, 98 y 95 utilizan el conjunto de caracteres ANSI. Para incrementar el número de caracteres disponibles, MS-Windows alterna entre las tablas de caracteres, conocidas como páginas de códigos.

Estándar Unicode Desde hace tiempo existe la necesidad de representar una amplia variedad de lengua- jes internacionales en el software de computadora y para evitar el atestamiento de los diversos esquemas de codifi cación existentes. Como resultado se creó el estándar Unicode, como una forma universal de defi nir caracteres y símbolos. Este estándar defi ne códigos para caracteres, símbolos y signos de puntuación utiliza- dos en todos los principales lenguajes, así como las escrituras alfabéticas europeas, las escrituras de derecha a izquierda del Medio Oriente y muchas escrituras de Asia.5 Hay tres formatos de codifi cación en Unicode,

de manera que los datos pueden transmitirse en formatos de byte, palabra o doble palabra:

• UTF-8: se utiliza en HTML y tiene los mismos valores de bytes que ASCII (Código estándar estadouni- dense para el intercambio de información). Puede incorporarse en un sistema de codifi cación de longitud variable para todos los caracteres Unicode.

• UTF-16: se utiliza en entornos que balancean el acceso efi ciente a los caracteres con el uso económico del almacenamiento. Por ejemplo, Windows NT, 2000 y XP utilizan la codifi cación UTF-16. Cada carác- ter se codifi ca en 16 bits.

• UTF-32: se utiliza en entornos en los que el espacio no es una limitación, y se requieren caracteres de anchura fi ja. Cada carácter se codifi ca en 32 bits.

Podemos copiar un valor Unicode más pequeño (byte, por ejemplo) en uno más grande (palabra o doble pala- bra) sin que haya pérdida de datos.

Cadenas ASCII A una secuencia de uno o más caracteres se le conoce como cadena. En forma más específi ca, una cadena ASCII se almacena en memoria como una sucesión de bytes que contienen códigos ASCII. Por ejemplo, los códigos numéricos para la cadena “ABC123” son 41h, 42h, 43h, 31h, 32h y 33h. Una cadena con terminación nula es una cadena de caracteres que va seguida de un solo byte que contiene un cero. Los lenguajes C y C++ utilizan cadenas con terminación nula, y muchas funciones de MS-DOS y MS-Windows requieren que las cadenas se encuentren en este formato.

Uso de la tabla ASCII Hay una tabla en la contraportada interior de este libro en la que se presentan los códigos ASCII utilizados cuando se ejecutan programas en modo de MS-DOS. Para encontrar el código ASCII hexadecimal de un carácter, busque a lo largo de la fi la superior de la tabla y encuentre la columna que contiene el carácter que desea traducir. El dígito más signifi cativo del valor hexadecimal está en la segunda fi la, en la parte superior de la tabla; el dígito menos signifi cativo está en la segunda columna a partir de la izquierda. Por ejemplo, para encontrar el código ASCII de la letra a, encuentre la columna que contiene la a y busque en la segunda fi la: el primer dígito hexadecimal es 6. A continuación, busque a la izquierda, a lo largo de la fi la que contiene la a, y observe que la segunda columna contiene el dígito 1. Por lo tanto, el código ASCII de

a es el número hexadecimal 61. Esto se muestra a continuación en forma simplifi cada:

A 



Caracteres de control ASCII Los códigos de caracteres en el rango del 0 al 31 se conocen como ca-

racteres de control ASCII. Si un programa escribe estos códigos en la salida estándar (como en C++), los

caracteres de control llevarán a cabo acciones predefi nidas. La tabla 1-8 presenta los caracteres en este rango que se utilizan con más frecuencia.

1.3 Representación de datos 17

Tabla 1-8 Caracteres de control ASCII.

Código ASCII (decimal) Descripción

8 Retroceso (avanza una columna a la izquierda) 9 Tabulación horizontal (avanza n columnas hacia delante) 10 Avance de línea (avanza a la siguiente línea de salida) 12 Avance de página (avanza a la siguiente página de impresora) 13 Retorno de carro (avanza a la columna de salida de más a la izquierda) 27 Carácter de escape

Terminología para la representación numérica de datos Es importante utilizar una terminología pre- cisa al describir la manera en que los números y los caracteres se representan en memoria y en la pantalla. Por ejemplo, el número decimal 65 se almacena en memoria como un solo byte binario, representado por 01000001. Probablemente un programa depurador muestre el byte como “41”, que es la representación hexadecimal del número. Si el byte se copiara a la memoria de video, aparecería la letra “A” en la pantalla. ¿Por qué? Debido a que el número 01000001 es el código ASCII para la letra A. Como la interpretación de un número puede depender del contexto en el que aparece, asignamos un nombre específi co a cada tipo de repre- sentación de datos, para aclarar las futuras confusiones:

• Un entero binario es un entero almacenado en memoria en su formato puro, listo para usarse en un cálculo. Los enteros binarios se almacenan en múltiplos de 8 bits (8, 16, 32, 48 o 64).

• Una cadena de dígitos ASCII es una cadena de caracteres ASCII, tal como “123” o “65”, a la cual se le da una apariencia de número. Ésta es una simple representación del número y puede estar en cualquiera de los formatos que se muestran para el número decimal 65 en la tabla 1-9:

Tabla 1-9 Tipos de cadenas numéricas.

Formato Valor ASCII binario “01000001” ASCII decimal “65” ASCII hexadecimal “41” ASCII octal “101” 1.3.7 Repaso de sección 1. Explique el término LSB. 2. Explique el término MSB.

3. ¿Cuál es la representación decimal de cada uno de los siguientes enteros binarios sin signo? a. 11111000

b. 11001010 c. 11110000

4. ¿Cuál es la representación decimal de cada uno de los siguientes enteros binarios sin signo? a. 00110101

b. 10010110 c. 11001100

5. ¿Cuál es la suma de cada par de enteros binarios? a. 00001111 ⫹ 00000010

b. 11010101 ⫹ 01101011 c. 00001111 ⫹ 00001111

6. ¿Cuál es la suma de cada par de enteros binarios? a. 10101111 ⫹ 11011011

b. 10010111 ⫹ 11111111 c. 01110101 ⫹ 10101100

7. ¿Cuántos bytes hay en cada uno de los siguientes tipos de datos? a. palabra

b. doble palabra c. palabra cuádruple

8. ¿Cuántos bits hay en cada uno de los siguientes tipos de datos? a. palabra

b. doble palabra c. palabra cuádruple

9. ¿Cuál es el número mínimo de bits binarios necesarios para representar a cada uno de los siguientes enteros decimales sin signo?

a. 65 b. 256 c. 32768

10. ¿Cuál es el número mínimo de bits binarios necesarios para representar a cada uno de los siguientes enteros decimales sin signo?

a. 4095 b. 65534 c. 2134657

11. ¿Cuál es la representación hexadecimal de cada uno de los siguientes números binarios? a. 1100 1111 0101 0111

b. 0101 1100 1010 1101 c. 1111 0011 1101 1011

12. ¿Cuál es la representación hexadecimal de cada uno de los siguientes números binarios? a. 0011 0101 1101 1010

b. 1100 1110 1010 0011 c. 1111 1110 1101 1011

13. ¿Cuál es la representación binaria de los siguientes números hexadecimales? a. E5B6AED7

b. B697C7A1 c. 234B6D92

14. ¿Cuál es la representación binaria de los siguientes números hexadecimales? a. 0126F9D4

b. 6ACDFA95 c. F69BDC2A

15. ¿Cuál es la representación decimal sin signo de cada entero hexadecimal? a. 3A

b. 1BF c. 4096

16. ¿Cuál es la representación decimal sin signo de cada entero hexadecimal? a. 62

b. 1C9 c. 6A5B

1.3 Representación de datos 19

17. ¿Cuál es la representación hexadecimal de 16 bits de cada entero decimal con signo? a. ⫺26

b. ⫺452

18. ¿Cuál es la representación hexadecimal de 16 bits de cada entero decimal con signo? a. ⫺32

b. ⫺62

19. Los siguientes números hexadecimales de 16 bits representan enteros con signo. Conviértalos a números decimales.

a. 7CAB b. C123

20. Los siguientes números hexadecimales de 16 bits representan enteros con signo. Conviértalos a números decimales.

a. 7F9B b. 8230

21. ¿Cuál es la representación decimal de los siguientes números binarios con signo? a. 10110101

b. 00101010 c. 11110000

22. ¿Cuál es la representación decimal de los siguientes números binarios con signo? a. 10000000

b. 11001100 c. 10110111

23. ¿Cuál es la representación binaria de 8 bits (complemento a dos) de cada uno de los siguientes enteros deci- males con signo?

a. ⫺5 b. ⫺36 c. ⫺16

24. ¿Cuál es la representación binaria de 8 bits (complemento a dos) de cada uno de los siguientes enteros deci- males con signo?

a. ⫺72 b. ⫺98 c. ⫺26

25. ¿Cuáles son las representaciones hexadecimal y decimal del carácter ASCII letra X mayúscula? 26. ¿Cuáles son las representaciones hexadecimal y decimal del carácter ASCII letra M mayúscula? 27. ¿Por qué se inventó Unicode?

28. Reto: ¿cuál es el valor más grande que se puede representar, utilizando un entero sin signo de 256 bits? 29. Reto: ¿cuál es el valor positivo más grande que se puede representar, utilizando un entero con signo de 256 bits?

1.4

Operaciones booleanas

El álgebra booleana defi ne un conjunto de operaciones con los valores true (verdadero) y false (falso). Su inventor fue George Boole, un matemático de mediados del siglo diecinueve, quien diseñó el primer modelo de una computadora (llamada la Máquina analítica6). Cuando se inventaron las primeras computadoras digi-

tales, era evidente que podía utilizarse el álgebra de Boole para describir el diseño de los circuitos digitales. Al mismo tiempo, las expresiones booleanas se utilizan en la programación para expresar operaciones lógicas.

Expresión booleana Una expresión booleana involucra a un operador booleano y uno o más operandos. Cada expresión booleana implica un valor de verdadero o falso. El conjunto de operadores incluye:

• NOT: se escribe como

¬

o ~ o ' • AND: se escribe como ∧ o •

• OR: se escribe como ∨ o +

El operador NOT es unario, y los otros operadores son binarios. Los operandos de una expresión booleana también pueden ser expresiones booleanas. A continuación se muestran algunos ejemplos:

Expresión Descripción

¬

X NOT X X ∧ Y X AND Y X ∨ Y X OR Y

¬

X ∨ Y (NOT X) OR Y

¬

(X ∧ Y) NOT (X AND Y) X ∧

¬

Y X AND (NOT Y)

NOT La operación NOT invierte un valor booleano. Puede escribirse en notación matemática como

¬

X, en donde X es una variable (o expresión) que contiene un valor de verdadero (V) o falso (F). La siguiente tabla de verdad muestra todos los posibles resultados de NOT, usando una variable X. Las entradas están en el lado izquierdo y las salidas (sombreadas) en el lado derecho:

X

¬

X

F V V F Una tabla de verdad puede usar 0 para falso y 1 para verdadero.

AND La operación AND booleana requiere dos operandos, y puede expresarse mediante la notación X

Y. La siguiente tabla de verdad muestra todos los posibles resultados (sombreados) para los valores de X y Y:

X Y X Y F F F F V F V F F V V V

El resultado es verdadero sólo cuando el valor de ambas entradas es verdadero. Esto corresponde al AND lógico que se utiliza en expresiones booleanas compuestas en C++ y Java.

OR La operación OR booleana requiere dos operandos, y a menudo se expresa mediante la notación X Y. La siguiente tabla de verdad muestra todos los posibles resultados (sombreados) para los valores de X y Y:

X Y X Y F F F F V V V F V V V V 1.4 Operaciones booleanas 21

www.elsolucionario.net

El resultado es falso sólo cuando el valor de ambas entradas es falso. Esta tabla de verdad corresponde al OR lógico que se utiliza en expresiones booleanas compuestas en C++ y Java.

Precedencia de los operadores En una expresión booleana que involucra a más de un operador, la pre- cedencia es importante. Como se muestra en la siguiente tabla, el operador NOT tiene la precedencia más alta, seguido de AND y OR. Para evitar la ambigüedad, utilice paréntesis para forzar la evaluación inicial de una expresión:

Expresión Orden de las operaciones

¬

X ∨ Y NOT, después OR

¬

(X ∨ Y) OR, después NOT X ∨ (Y ∧ Z) AND, después OR

In document Lenguaje Ensamblador Irvine 5a Edición (página 49-55)