Download Formatos Binarios

Document related concepts

Extensión de signo wikipedia , lookup

Unidades de información wikipedia , lookup

Operador a nivel de bits wikipedia , lookup

Nibble wikipedia , lookup

Representación de números con signo wikipedia , lookup

Transcript
Formatos Binarios (80x86 )
8 bits
x7 x6 x5 x4 x3 x2 x1 x0
27 26 25 24 23 22 21 20
Alta orden ó más significativo
significativo
16 bits
baja orden ó menos
x15 x14 x13 x12 x11 x10 x9 x8 x7 x6 x5 x4 x3 x2 x1 x0
alto orden
menor orden
Organización de los datos (80 x 86)
1 bit es la unidad de datos más pequeña.
4 bits (nibble)
8 bits (bytes)
16 bits (palabra)
Nibble Sirve para representar números hexadecimales. ( 0-9 A F)
Sirve para representar números BCD (0...9)
Byte En un 80 x 86 es el dato más pequeño direccionable. Se usa para direcciones de
memoria y E/S
28 –1 = 0 ... 255 (sin signo)
28 = 256 valores
-128 ... 127 (con signo)
En un byte existen 2 nibbles
H.0 Nibble
L.0 Nibble
H.0 Nibble
Nibble2
Nibble 1
L-0 Nibble
Palabra =2 bytes
H.0 byte
Representa 216 =65, 536 valores
L.0 byte
216-1= 0...65, 535 (sin signo)
-32,768 ... + 32, 767 (con singo)
Se utilizan para valores enteros, offset, valores de segmentos los cuales constituyen el
paragraph addres de un segmento de código extra o stack en memoria.
Doble palabra. Se utilizan para representar segmentos de direcciones 8 nibbles, 4 bytes
, 2 palabras.
Se utilizan para enteros de 32 bits, rango 0... 4,294,467, 295 (sin signo)
–2,147483,648...+2,147,483,647 (con signo)
y valores de punto flotante.
Conversión decimal a binario
Notación:
120d ó 120t
110b ó 1102
12 FH
Decimal
Binario
Hexadecimal
Xt
120t
X2
Divisiones sucesivas hasta que el cociente sea 0
01111000
60
2 120
2 00
0
30
2 60
00
0
15
2 30
10
0
7
2 15
1
3
2 7
1
2
1
3
1
0
2 1
1
Conversión binario a decimal
Xb
xd
Xb
xd
27 26 25 24 23 22 21 20
0 1 1 1 1 0 0 0 = 26 + 25 + 24 +23 = 120
Conversión hexadecimal a binario / Binario a Hexadecimal
Binario
0000
0001
0010
0011
0100
0101
0110
Hexadecimal
0
1
2
3
4
5
6
Binario
1101
1110
1111
Hexadecimal
D
E
F
Binario
0111
1000
1001
1010
1011
1100
Hexadecimal
7
8
9
A
B
C
El sistema hexadecimal es compacto y facilita la conversión de binario a hexadecimal y
viceversa.
1 2 7 fH
0001
0010
0111
1111b
Operaciones aritméticas : Suma y Resta
Suma Binaria
0
0 1
+0 +1 +0
0
1 1
Suma Hexadecimal
1
+1
10
5d
+4d
9d
0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
00000101
00000100
00001001
Decimal
89 d
+ 100 d
Binario
01011001
+01100100
010111101
9h
+ 1h
Ah
Fh
+ 5h
14h
Hexadecimal
BD h
44
22
11
5
2
1
2 89 2 44 2 22 2 11 2 5 2 2
09
0
07
1
1
0
1
0
50
25
2 100
2 50
0
0
12
0
2 1
1
6
3
1
2 25 2 12
2 6
2 3
0
1
0
1
05
0
1
Decimal
120d
+ 149d
Binario
0111 1000
10010101
Resta Binaria
0
+0
0
0
1
+1 +0
1 1
1
Hexa
78
+ 95
10Dh
Resta Hexadecimal
1
+1
0
0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
2
5d
- 4d
1d
00000101
00000100
00000001
Decimal
99d
- 50d
49
Binario
- 01100011
00110010
00110001
Hexa
63 h
- 32 h
31h
Decimal
Hexa
Binario
1024d
- 820 d
400 h
- 334 h
0CC h
11001100
Operaciones lógicas en bits
And
00
01
10
11
or
0
0
0
1
00
01
10
11
xor
0
1
1
1
00
01
10
11
NOT
0
1
1
0
0
1
1
0
NOTA:
El uso de AND Y OR nos per miten cambiar un bit a cero o a uno.
El operador XOR nos permite invertir bits.
El operador NOT niega
Las Operaciones lógicas son utilizadas en el manejo de strings y para la
generación de mascaras.
Para realizar máscaras se utilizan operadores lógicos and, or, xor, not.
Números negativos
Bit mas alto es 1.
Ejemplos 16-bits
8000h es negativo 1000 0000 0000 0000
100h es positivo 0000 0001 0000 0000
7FFFh es positivo 0 111 1111 1111 1111
0FFFFh es negativo 1111 1111 1111 1111
0FFFh es positivo 0000 1111 1111 1111
= - 32768d
= +32767d
= -1
Para convertir un número positivo a su correspondiente negativo se utiliza la operación
complemento a 2.
Algoritmo
1. Invertir todos los números con operador lógico NOT
2 .Agregar uno al resultado invertido
Ejemplo 1:a 8 bits el número 5 a –5
P1.
P2.
0000
1111
0000
1111
0101
1010
0001
1011
→
→
+5d
-5b
Convertir un negativo a un positivo utilizar complemento a 2
Ejemplo 1: Convertir -5 a +5 con 8 bits
P1.
P2.
1111
0000
0000
0000
→
1011
0100
0001
0101
-5
→
+5
Esto es un error del tipo “signed arithmetic over flow”
8000h es negativo 1000 0000 0000 0000
Complemento a 2: 0111 1111 1111 1111
+
1
1000 0000 0000 0000
= - 32768d
= +32768d
No es posible que -32768=-(-32768). No se puede representar a 16 bits para números
con signo.
Conclusión: No se puede negar el valor negativo más pequeño si lo intenta el
microprocesador demanda un error de “aritmética de signo overflow”.
Signo y Extensión cero
Extensión cero permite convertir un número pequeño con signo a un largo con
signo
Regla: Si es un número negativo en la parte H.0 byte contiene OFF H.
Si es un número positivo en la parte H.O byte contiene 000H.
Ejemplo: considere –64d a 8 bits número.
Número con signo
64 = 0100 0000
-64 = 1100 0000
Convertir de 8 bits a 16 bits
FFC0H
C0
(-64)
64d
40H
0040H
* Extensión con signo de un número de 8 bits a 16 bits: Copiar los 8 bits a los 8 bits en
las posiciones más bajas de los 16 bits y aplicar una extensión cero.
* Extensión con signo de un número de 16 bits a 32 bits: Copiar los 16 bits a la posición
más bajas y aplicar extensión cero.
Ejemplos: Números con signo
8 bits
(-)
(+)
(-)
(+)
80H
28H
9AH
7FH
16 bits
32 bits
FF80H
0028H
FF9AH
007FH
FFFFFF80H
00000028H
FFFFFF9AH
0000007FH
8 bits
16 bits
Números sin signo
8 bits
80 H
28H
9AH
7FH
16 bits
0080H
0028H
009AH
007FH
32 bits
00000080H
00000028H
0000009AH
0000007FH
¿Se puede realizar una conversión de un número 16 bits a 8 bits o de 32 bits a 16 bits.?
Resp:= No siempre es posible
Ejemplos:
BAC1H
16 bit
-448d
no se puede porque los bits más altos y más bajos están ocupados.
8 bit
a 16 bits
0fE40h
No se puede
Regla: Para contraer signo de un valor solo hay que remover los bits más altos
si contienen 0’s o 0ff o 0ffff, si no los contiene se produce un overflow
Corrimientos y Rotaciones
Es otro tipo de operaciones logicas la cual se aplica a cadenas de bits, existe hacia la :
* Izquierda
* Derecha
*Corrimiento a la izquierda
7
6
5 4
3
2
1 0
Colocar un cero en el bit más bajo y el valor del bit
más alto es un accareo
Este tipo de corrimiento permite generar una multiplicación por 2 (radix base 2).
En general si corres un valor ala izquierda n veces se multiplica por 2n .
Ejemplo:
Acarreo
Resultado
00101010 =2Ah por 21 = 54h
1 Corrimiento
0
01010100
00101010 =2Ah por 22 = A8h
2 Corrimiento
0
10101000
00101010 =2Ah por 23 = 150h
3 Corrimiento
1
01010000
* Corrimiento a la derecha
7 6 5 4 3 2 1 0
bajo
Coloco un cero en el bit más alto y el bit más
es un accareo
Este tipo de corrimiento permite generar una división por 2 (radix base 2). En
general si corres un valor a la derecha n veces se divide por 2n .(Solo es válido para
divisiones de números sin signo)
Ejemplo:
11111110 =FEh entre 21 = 7Fh
1 Corrimiento
Resultado
Acarreo
01111111
0
Notese que para valores con signo este tipo de operación no resulta, por
ejemplo:
-2= 0FEh, al realizar un corrimiento, se obtiene 07Fh=127h, esto no es correcto.
El problema se origino al insertar el 0 en el bit del signo, cambiándolo a
positivo.
Para este tipo de operaciones se define el Corrimiento aritmético a la derecha.
* Corrimiento aritmético a la derecha
No modifica el bit 7 durante el corrimiento
Ejemplo:
Resultado
-2=11111110 =FEh entre 21 = FFh
-100=10011100=9Ch entre 21=CEh
1 Corrimiento
1 Corrimiento
11111111
11001110
Esta operación redondea el número al entero más cercano, el cual es “menor o igual al
actual resultado”. Por ejemplo:
-1=11111111 =FFh entre 21 = FFh
* Rotación por la izquierda
7 6 5 4 3 2 1 0
1 Corrimiento
11111111 = -1 < 0
El bit más alto es corrido al más bajo
ejemplo:
01101011
11010110
* Rotación a la derecha
El bit más bajo es corrido al más alto
Tarea :
1. Convertir
32,768d
xb
888d
xb
1001b
xd
2. Complementar a dos, los valores hexadecimal conviertelos a binario
1001 0111b
xd 0ABCDH
Xb
0FEBAH
xb
3. Realizar las sig. Operaciones
1232H + 9876H
0FFH -0F34H
100b - 1b
0FFEH - 1H
4 Aplicar los operadores lógicos a todos los números hexadecimales de los ejercicios 1
y 2. El operador 1 se define, el operador 2 de acuerdo a los ejercicios.
5. Realizar la extensión de signo de 8-16 bits (Números con signo).
FF
BF
0E
8F
54
DE
F7
DE
DD
AD
6. Realizar el complemento a dos de los números utilizados en el ejercicio 1 y 2.
7. Contraer el signo para los siguientes valores de 16 a 8 bits. Si no lo puede realizar
explique por que.
FF0CH
8080H
67H
7FH
FF98H
F98H
12H
98H
8.Aplicar dos rotaciones a la izquierda al ejercicio 6 y un corrimiento a la derecha al
ejercicio 7, considere que son de 16 bits.