La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos.

Presentaciones similares


Presentación del tema: "INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos."— Transcripción de la presentación:

1 INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos derechos de autor.

2 Máquina Multinivel Hardware Lenguaje Ensamblador Sistema Operativo Lenguaje Alto Nivel Aplicación Bajo Nivel

3 Lenguaje 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.

4 Lenguaje 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.

5 Caracterí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 Arquitectura 80X86 CPU 80X86 Memoria RAM Puertos E/S Bus de Direcciones Bus de Datos Bus de Control

7 Registros  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.

8 Registros  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.

9 Registros 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. 32 bits 16 bits EAX AX AHAL

10 Registros 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. 32 bits 16 bits ESP SP

11 Registros 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 Registro de Banderas  Conjunto de bits que nos dan información sobre el estado del procesador y sobre el resultado de la última operación efectuada.  Es el único registro accesible a nivel de bits.  Algunos de estos bits son:  CF: Carry flag- ZF: Zero flag  SF: Sign flag- OF: Overflow flag  IF: Interrupt flag- DF: Direction flag........OF DF IF SF ZF CF

13 Segmentació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. 100200300400500 mts

14 Segmentació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 = Bloque:Posición 100200300400500 mts 0:50 3:45

15 Segmentación  Para obtener la ubicación real debe realizarse la siguiente operación:  Ubicación = Bloque*100 + Posición  Posición1 = 0*100 + 50 = 50  Posición2 = 3*100 + 45 = 345 100200300400500 mts 0:50 3:45 Posición 1 Posición 2

16 Segmentació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 = Segmento*16 + 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.

17 Segmentació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.

18 Conjunto 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.

19 Conjunto 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

20 Grupos 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

21 Grupos 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.

22 Grupos de Instrucciones  Gestión de cadenas  rep: Repetir-lodsb:AL=byte{DS:SI}  stosb: {ES:SI } = AL  cmps: Compara {DS:SI} con {ES:DI}  Control del sistema  int #- iret  cli: clear Interruption Flag  sti: set Interruption Flag  clc: clear carry flag  stc: set carry flag

23 Saltos 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

24 Saltos 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

25 Saltos 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.

26 Programació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

27 If... then  Ilustraremos estas implementaciones con ejemplos:  En pseudocódigo:  En ensamblador cmp cx,ax; if (cx > ax) jle fin_si dec cx; then dec cx fin_si: If (cx > ax) then dec cx

28 If... then... else  Pseudocódigo:  Ensamblador: If (bx < ax) then dec ax else dec bx cmp bx,ax; If (bx < ax) jge else1 dec ax; then dec ax jmp fin_si1 else1:dec bx; else dec bx fin_si1:

29 Repeat... until  Pseudocódigo:  Ensamblador: Repeat: inc cx add ax,cx until (cx > 100) Repite1: inc cx add ax,cx cmp cx,100; until (cx > 100) jle Repite1

30 While... do  Pseudocódigo:  Ensamblador: While (bx<200) do inc bx add ax,bx end_while while1: cmp bx,200; While (bx<200) jge fin_while1 inc bx add ax,cx jmp while1; end_while fin_while1:

31 For... 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

32 For... do  Pseudocódigo:  Ensamblador: For (cx=1 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.


Descargar ppt "INTRODUCCION AL AMBIENTE DE BAJO NIVEL ® M.C.C. Sergio Luis Castillo Valerio Esta presentación puede reproducirse libremente siempre que se mantengan estos."

Presentaciones similares


Anuncios Google