Title: INTRODUCCION AL AMBIENTE DE BAJO NIVEL
1INTRODUCCIONALAMBIENTEDE BAJO NIVEL
M.C.C. Sergio Luis Castillo Valerio Esta
presentación puede reproducirse
libremente siempre que se mantengan estos
derechos de autor.
2(No Transcript)
3Lenguaje Máquina
- Es el único lenguaje que entiende el hardware de
la computadora. - Instrucciones y datos en forma de patrones
binarios. - Normalmente expresados en sistema hexadecimal.
- Instruction Set Conjunto de Instrucciones del
lenguaje máquina de un procesador.
4Lenguaje Ensamblador
- Conjunto ordenado y estructurado de mnemónicos de
un lenguaje de máquina dado. - Mnemónico Palabra breve, descriptiva y fácil de
recordar.
5Características del Ensamblador
- Correspondencia 1 a 1 con su lenguaje máquina.
- Permite al acceso a todas las instrucciones del
procesador y, por tanto, a todos los recursos del
hardware. - Permite desarrollar código más rápido y compacto.
- Requiere buen conocimiento de la arquitectura del
hardware.
6(No Transcript)
7Registros
- Registro Conjunto de flip-flops capaz de
almacenar, y en algunos casos modificar,
información binaria. - Dentro de todo CPU existe un conjunto de
registros. - Algunos tienen un uso específico, otros son de
uso general. - Los registros de uso general normalmente se
utilizan para guardar datos y resultados
intermedios.
8Registros
- Desde el punto de vista del programador, es muy
importante conocer el conjunto de registros
internos de un procesador y su uso, cuando se
programa en bajo nivel. - Esto se debe a que muchas de las instrucciones de
lenguaje máquina suponen que los datos están en
alguno de los registros o almacenan el resultado
en alguno de los registros internos.
9Registros de los procesadores 80X86
- Registros de Uso General
- EAX Acumulador
- EBX Base
- ECX Contador
- EDX Datos.
- Estos registros pueden guardar datos de 32, 16 u
8 bits.
EAX
32 bits
AH
AL
16 bits
AX
10Registros de los procesadores 80X86
- ESP Stack Pointer (Apuntador de Pila)
- EBP Base Pointer (Apuntador Base)
- ESI Source Index (Indice Fuente u Origen)
- EDI Destination Index (Indice Destino)
- Estos registros pueden almacenar datos de 32 o 16
bits.
ESP
32 bits
SP
16 bits
11Registros de los procesadores 80X86
- Registros de Segmento
- CS Code Segment (Segmento de Código)
- DS Data Segment (Segmento de Datos)
- SS Stack Segment (Segmento de Pila)
- ES Extra Segment (Segmento Extra)
- FS Extra Segment (Segmento Extra)
- GS Extra Segment (Segmento Extra)
- Son registros de 16 bits.
- Se utilizan para generar las direcciones que el
procesador envía por el bus de direcciones.
12(No Transcript)
13Segmentación
- Técnica utilizada en los procesadores Intel
8088/8086 para generar direcciones de 20 bits
usando registros de 16 bits. - Para ilustrar esta técnica, suponga que se desea
ubicar la posición de una persona a partir de un
punto de referencia, pero utilizando solamente
números de 2 dígitos decimales.
mts
100
200
300
400
500
14Segmentación
- Esto se puede realizar si se hace lo siguiente
- Se divide la recta en bloques de 100 metros cada
uno. - Se utilizan dos números
- Uno para indicar en cuál bloque está la persona
- Otro para especificar su posición dentro del
bloque. - Posición BloquePosición
mts
100
200
300
400
500
345
050
15Segmentación
- Para obtener la ubicación real debe realizarse la
siguiente operación - Ubicación Bloque100 Posición
- Posición1 0100 50 50
- Posición2 3100 45 345
Posición 1
Posición 2
mts
100
200
300
400
500
345
050
16Segmentación
- En el caso de los procesadores 80X86, los bloques
se llaman SEGMENTOS y la posición se llama
DESPLAZAMIENTO - En modo real, cada una se describe con un número
de 16 bits. - Operando en modo real
- Dirección Real Segmento16 Desplazamiento.
- La Dirección Real ya es una cantidad de 20 bits.
- Esto significa que toda dirección tiene 2 partes
Un Segmento y un desplazamiento.
17Segmentación en Modo Protegido
- Es importante recalcar que cuando los
procesadores 80386 o posteriores operan en modo
protegido, la segmentación funciona de manera muy
diferente. - Cada segmento puede ser de hasta 4 Gbytes.
- Maneja memoria virtual, lo que implica un esquema
de paginación. - Maneja también multitarea y un esquema de
protección de memoria.
18Conjunto de Instrucciones
- El Conjunto de instrucciones (Instruction Set) de
un procesador está formado por aquellas
instrucciones en lenguaje máquina que un
procesador puede ejecutar. - CISC vs. RISC
- CISC Complex Instruction Set Computer
- RISC Reduced Instruction Set Computer
- Las instrucciones normalmente se agrupan para
describirlas.
19Conjunto de Instrucciones
- Los grupos normalmente son
- Transferencia de datos
- Aritmética entera binaria
- Operaciones lógicas
- Desplazamientos y rotaciones
- Aritmética BCD
- Gestión de cadenas
- Control del sistema
- Control de flujo del programa
- Saltos condicionales
20Grupos de Instrucciones
- Transferencia de datos
- mov destino,origen - xchg dest,orig
- in origen - out destino
- Aritmética entera binaria
- add dest,orig - sub dest,orig
- adc dest,orig - sbb dest,orig
- mul orig - div orig
- inc dest - dec dest
21Grupos de Instrucciones
- Operaciones lógicas
- not dest - and dest,orig
- or dest,orig - xor dest,orig
- Desplazamientos y rotaciones
- shl dest, - shr dest,
- rol dest, - ror dest,
- Aritmética BCD
- AAA Ajuste ASCII suma
- DAA Ajuste decimal suma.
- AAM Ajuste ASCII muliplicación.
- AAD Ajuste ASCII división.
22Grupos de Instrucciones
- Gestión de cadenas
- rep Repetir -lodsbALbyteDSSI
- stosb ESSI AL
- cmps Compara DSSI con ESDI
- Control del sistema
- int - iret
- cli clear Interruption Flag
- sti set Interruption Flag
- clc clear carry flag
- stc set carry flag
23Saltos condicionales
- Control de flujo del programa
- jmp objetivo - test dest,orig
- call procedimiento - ret
- cmp dest,orig
- Saltos condicionales basados en
- Condiciones sobre indicadores
- Relaciones aritm?ticas con signo
- Relaciones aritm?ticas sin signo
24Saltos condicionales
- Condiciones sobre indicadores
- je/jne obj jump if equal/not equal
- jz/jnz obj jump if zero/non zero
- js/jns obj jump if sign/no sign
- Relaciones aritméticas con signo
- jg/jl obj jump if greater/less
- jge obj jump if greater or equal
- jle obj jump if less or equal
25Saltos condicionales
- Relaciones aritméticas sin signo
- ja/jb obj jump if above/below
- jae/jbe obj jump if above/below or equal
- jna/jnb obj jump if not above/below
- Normalmente se utilizan después de una
comparación
Cmp dest,orig jxx objetivo (Donde xx Condición
de salto)
Nota La instucción CMP resta el origen al
destino y afecta banderas, no guarda el resultado
ni altera los operandos.
26Programación estructurada
- Es posible implementar parcialmente en bajo nivel
las estructuras de control que propone la
programación estructurada - If ... then
- If ... then ... else
- Repeat .... until
- While ... do
- For ... do
27If ... then
- Ilustraremos estas implementaciones con ejemplos
- En pseudocódigo
- En ensamblador
If (cx gt ax) then dec cx
cmp cx,ax if (cx gt ax) jle fin_si dec cx
then dec cx fin_si
28If ... then ... else
If (bx lt ax) then dec ax else dec bx
cmp bx,ax If (bx lt ax) jge else1 dec ax
then dec ax jmp fin_si1 else1 dec bx else dec
bx fin_si1
29Repeat ... until
Repeat inc cx add ax,cx until (cx gt 100)
Repite1 inc cx add ax,cx cmp cx,100 until
(cx gt 100) jle Repite1
30While ... do
While (bxlt200) do inc bx add ax,bx end_while
while1 cmp bx,200 While (bxlt200) jge
fin_while1 inc bx add ax,cx jmp
while1 end_while fin_while1
31For ... do
- Una implementación utiliza la instrucción loop
- Sintaxis loop
- loop objetivo
- Semántica
- loop utiliza CX forzosamente
Si (CX ¹ 0) Dec CX Salta a objetivo Sino
Siguiente instrucción
32For ... do
For (cx1 hasta 20) do add ax,bx inc
bx end_for
mov cx,20 do1 add ax,bx inc bx loop do1
Nota Dentro de la imlementación del for ...do no
es aconsejable utilizar CX cuando se implementa
con loop.