Publicado el 20 de Marzo del 2018
1.209 visualizaciones desde el 20 de Marzo del 2018
368,7 KB
16 paginas
Creado hace 12a (08/06/2011)
Universidad de Buenos Aires
Facultad De Ingenier´ıa
Programando en C a Bajo Nivel
[75.40] Algoritmos y Programaci´on I
1er Cuatrimestre 2011
C´atedra: Ing. Pablo Guarna
Autor: Bernardo Ortega Moncada
Versi´on 3.0
i
Programando en C a Bajo Nivel
1er Cuatrimestre 2011
´Indice
1. Introducci´on
2. Representaci´on de N´umeros en Base Binaria
2.1. Complementos A1 de un N´umero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Sentencias Bit a Bit en C
3.1. Operaci´on AND (Bit a Bit) (&) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Operaci´on OR (Bit a Bit) (|)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. Operaci´on XOR (bit a bit) ( ∧ )
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4. Operaci´on Complemento A1 a la Base ( ∼ )
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5. Desplazamiento de Bits
3.5.1. Desplazamiento de Bits a la Derecha ( >> ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5.2. Desplazamiento de Bits a la Izquierda ( < < ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7. Campos de Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8. Ventajas y Desventajas de Operar Bit a Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7.1. Limitaciones de Campos de Bits
3.6. Operador Ternario (? :)
4. El Preprocesador de C
Inclusi´on de Archivos
4.1. ¿Que Es Un Macro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Ejemplos de Macros
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.2. Creaci´on de Archivos de Cabecera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.3. Creaci´on de Macros como Constantes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2.4. Creaci´on de Macros como Funci´on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3. Otras Directivas del Preprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.1. #undef
4.3.2. #if , #else , #elif
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3.3. #error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4. Ventajas y Desventajas de Usar Macros
2
2
2
2
3
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
11
11
12
14
14
14
14
15
Autor: Bernardo Ortega Moncada
1
i
Programando en C a Bajo Nivel
1er Cuatrimestre 2011
1.
Introducci´on
Este apunte esta orientado para que el lector pueda apreciar como uno puede trabajar en el lenguaje de programaci´on
C con sentencias de Bajo Nivel y utilizar herramientas que pueden ser ´utiles a la hora de programar sentencias que podr´ıan
simplificar lineas operando a bajo nivel. Este apunte es de car´acter informativo, no significa que lo vayan a usar en esta
materia, pero quiz´as en alguna posterior. Esta demas aclarar que para leer este apunte se necesita un conocimiento b´asico
previo del Lenguaje. Todas estas operaciones que se muestran en el apunte, tambi´en son v´alidas en el Lenguaje C++
2. Representaci´on de N´umeros en Base Binaria
Como uno ya sabe, los n´umeros en la computadora no se expresan de la misma forma que un ser humano escribe. Ya
que la computadora trabaja de forma binaria y solo puede comprender si algo es verdadero o falso, si hay informaci´on o
no, por lo tanto si uno esta trabajando con n´umeros que ocupan 1 Byte, uno sabe que 1 Byte esta compuesto por 8 bits,
lo cual un bit solo puede almacenar 1 o 0.
Por lo tanto si nosotros a modo de ejemplo tenemos el n´umero, la computadora ve a este n´umero de la siguiente manera:
Representaci´on Decimal
0|10
2|10
7|10
25|10
255|10
=
=
=
=
=
Representaci´on Binaria en 8 bits
00000000|2
00000010|2
00000111|2
00011001|2
11111111|2
Pero tenemos que saber que un n´umero representado en binario posee 2 bits muy importantes. El bit mas Signifi-
cativo (MSB, por sus siglas en ingles) y El Bit Menos Significativo (LSB, por sus siglas en ingles).
Una observaci´on a tener en cuenta es que el MSB tambi´en es considerado Bit de Signo, siempre y cuando se use la
representaci´on MyBS (M´odulo y Bit de Signo).
se considera al 1 como el signo negativo
se considera al 0 como el signo positivo
Por ejemplo, tenemos un numero representado en su forma binaria, podemos apreciar cuales son los bits significativos:
0
0
1
0
1
0
1
↑
MSB
1
↑
LSB
2.1. Complementos A1 de un N´umero
El complemento A1 de un numero representado en forma binaria, consiste en negar (o invertir) bit a bit la expresi´on
del n´umero, en lineas generales consiste en cambiar los 0’s por 1’s y viceversa. Esta herramienta es muy poderosa en
el ´ambito de la computaci´on ya que nos permite representar un n´umero de forma negativa, ya que como sabemos, la
computadora no reconoce los n´umeros negativos. Veamos el siguiente ejemplo de como calcular el complemento A1 a la
base de un numero binario cualquiera:
01100100 ⇒
10011011
Complemento A1
(cid:124)
(cid:123)(cid:122)
(cid:125)
3. Sentencias Bit a Bit en C
Uno puede hacer una serie de operaciones l´ogicas bit a bit con el lenguaje C, e incluso realizar complementos A1, o
desplazamientos de Bits a la derecha o a la izquierda. Estas operaciones son muy comunes en el lenguaje de bajo nivel
denominado Assembler (Ensamblador). A continuaci´on se muestra una tabla con algunas de las operaciones a bajo nivel
que podemos realizar:
Autor: Bernardo Ortega Moncada
2
i
Programando en C a Bajo Nivel
1er Cuatrimestre 2011
Operador
Acci´on
&
|
∧
∼
>>
<<
? :
Operaci´on AND (bit a bit) simula una compuerta AND - 74ls08 TTL
Operaci´on OR (bit a bit) simula una compuerta OR - 74ls32 TTL
Operaci´on XOR (bit a bit) simula una compuerta XOR - 74ls86 TTL
Complemento A1 a la base
Desplazamiento de bits hacia la derecha
Desplazamiento de bits hacia la izquierda
Operador Ternario
3.1. Operaci´on AND (Bit a Bit) (&)
Si recordamos que la operaci´on AND (Bit a Bit) esta definida por la siguiente tabla de verdad:
A B A&B
0
0
1
1
0
1
0
1
0
0
0
1
Como trabajamos con variables que ocupan 1 Byte (8 bits) la operaci´on AND Bit a Bit para estos casos se comportar´ıa
de la siguiente manera:
Supongamos que tenemos una variable a = 23 y otra variable b = 90, su representaci´on en binario de ambas seria:
a = 00010111 y b = 01011010
por lo tanto:
&
00010111
01011010
00010010
El resultado nos da un n´umero en binario cuya expresi´on es 00010010|2, que en decimal es conocido como 18|10.
Por lo tanto llevando este ejemplo al lenguaje C, se realizar´ıa de la siguiente manera:
Ejemplo1: Operaci´on L´ogica AND Bit a Bit
c h a r a = 2 3 ;
c h a r b = 9 0 ;
c h a r
r e s u l t a d o ;
i n t main ( )
1 #i n c l u d e <s t d i o . h>
2
3
4 {
5
6
7
8
9
10
11
12
13
14
15
16 }
r e t u r n 0 ;
p r i n t f ( ’ ’ R e s u l t a d o = % d ’ ’ , r e s u l t a d o ) ;
p r i n t f ( ’ ’ a = % d
b = % d ’ ’ , a , b ) ;
r e s u l t a d o = a & b ;
Una aplicaci´on ´util para este operador, es si queremos averiguar si un bit de cierto n´umero es 1 o 0, por ejemplo, se
tiene el n´umero a = 75 y se quiere averiguar si el cuarto bit de dicho n´umero es 1 o 0. Para eso tenemos que aplicar el
operador & al n´umero a con un n´umero cuya representaci´on binaria sea 00001000, dicho n´umero es el 8.
Veamos como queda la operaci´on primero:
&
01001011
00001000
00001000
Entonces el c´odigo nos quedar´ıa de la siguiente forma:
Autor: Bernardo Ortega Moncada
3
i
Programando en C a Bajo Nivel
1er Cuatrimestre 2011
Ejemplo2: Operaci´on L´ogica AND Bit a Bit
r e s u l t a d o ;
c h a r a = 7 5 ;
c h a r b = 8 ;
c h a r
i n t main ( )
1 #i n c l u d e <s t d i o . h>
2
3
4 {
5
6
7
8
9
10
11
12
13
14
15
16
17 }
r e t u r n 0 ;
( a & b )
e l s e
i f
p r i n t f ( ’ ’ a = % d
b = % d ’ ’ , a , b ) ;
p r i n t f ( ’ ’ e l c u a r t o b i t de l a v a r i a b l e a e s 1 \ n ’ ’ ) ;
p r i n t f ( ’ ’ e l c u a r t o b i t de l a v a r i a b l e a e s 0 \ n ’ ’ ) ;
3.2. Operaci´on OR (Bit a Bit) (|)
Si recordamos que la operaci´on OR (Bit a Bit) esta definida por la siguiente tabla de verdad:
A B A|B
0
0
1
0
1
1
1
1
0
1
0
1
Como trabajamos con variables que ocupan 1 Byte (8 bits) la operaci´on AND Bit a Bit para estos casos se comportar´ıa
de la siguiente manera:
Supongamos que tenemos una variable a = 23 y otra variable b = 90, su representaci´on en binario de ambas seria:
a = 00010111 y b = 01011010
por lo tanto:
|
00010111
01011010
01011111
El resultado nos da un n´umero en binario cuya expresi´on es 01011111|2, que en decimal es conocido como 95|10.
Ejemplo: Operaci´on L´ogica OR Bit a Bit
c h a r a = 2 3 ;
c h a r b = 9 0 ;
c h a r
i n t main ( )
1 #i n c l u d e <s t d i o . h>
2
3
4 {
5
6
7
8
9
10
11
12
13
14
15
16 }
r e t u r n 0 ;
r e s u l t a d o ;
p r i n t f ( ’ ’ a = % d
r e s u l t a d o = a | b ;
b = % d ’ ’ , a , b ) ;
p r i n t f ( ’ ’ R e s u l t a d o = % d ’ ’ , r e s u l t a d o ) ;
Autor: Bernardo Ortega Moncada
4
i
Programando en C a Bajo Nivel
1er Cuatrime
Comentarios de: Programando en C a Bajo Nivel (0)
No hay comentarios