Beruflich Dokumente
Kultur Dokumente
LENGUAJE MQUINA
Mquina Multinivel
Aplicacin Lenguaje Alto Nivel Sistema Operativo Lenguaje Ensamblador Bajo Nivel Hardware
Lenguaje Mquina
Es el lenguaje que entiende el hardware del computador. Es muy restringido y de bajo nivel Instrucciones y datos en forma de patrones binarios. Normalmente expresados en sistema hexadecimal. Instruction Set: Conjunto de Instrucciones del lenguaje mquina de un procesador.
Lenguaje Mquina
El lenguaje mquina depende del procesador. Existe una incompatibilidad innata entre los distintos procesadores
Cada instruccin tiene una representacin determinada en forma de bits, almacenados en memoria. Los distintos tipos de representacin se denominan formato de instruccin
Son independientes No requieren de la informacin de otras instrucciones para ejecutarse De transferencia de informacin Transferencia de control Aritmticas Lgicas Comparacin Desplazamiento Acceso a bits individuales De entrada/salida Miscelneas
Cada instruccin debe contener la siguiente informacin Operacin a realizar Direccin de los operandos Direccin del resultado Direccin de la siguiente instruccin Modo de representacin de los operandos
Un formato es un conjunto de bits que contiene dicha informacin La longitud del formato es el nmero de bits que lo componen Su estructura es el el significado de cada bit dentro de la instruccin
LENGUAJE ENSAMBLADOR
Definicin y caractersticas bsicas
Lenguaje Ensamblador
Debido a que el computador solo almacena nmeros, se requiere establecer un criterio para indicar las instrucciones a realizar. A cada accin que pueda realizar el computador, se le asocia un nmero, denominado cdigo de operacin (opcode) .
Lenguaje Ensamblador
La descripcin y uso de los opcodes, constituyen el lenguaje de mquina. Es decir, la lista de cdigos que la mquina interpreta como instrucciones.
Cuando se abstraen los opcodes y se sustituyen por una palabra clave que represente su significado, se genera un Lenguaje de nivel intermedio (entre la maquina y el programador). Lenguaje Ensamblador es la primera abstraccin del Lenguaje de Mquina, consistente en asociar a los opcodes palabras clave que faciliten su uso por parte del programador.
Lenguaje Ensamblador
Lenguaje de programacin de bajo nivel. Ms cercano al lenguaje mquina que al natural. Conjunto ordenado y estructurado de mnemnicos de un lenguaje de mquina dado.
El ensamblador traduce cada sentencia programada, a una instruccin especfica del microprocesador. Depende del hardware, por lo que no es portable a otro tipo de procesadores.
Permite al acceso a todas las instrucciones del procesador y, por tanto, a todos los recursos del hardware. Permite desarrollar cdigo ms rpido y compacto. Requiere buen conocimiento de la arquitectura del hardware.
Arquitectura 80X86
Bus de Direcciones
CPU 80X86
Memoria RAM
Puertos E/S
Bus de Datos
Bus de Control
VENTAJAS Y DESVENTAJAS
Ventajas respecto a un lenguaje de alto nivel: Velocidad Eficiencia de tamao Flexibilidad desventajas respecto a los lenguajes de alto nivel: Tiempo de programacin Programas fuente grandes Peligro de afectar recursos inesperadamente Falta de portabilidad
LENGUAJE ENSAMBLADOR
Proceso de ensamblado
Proceso de ensamblado
Proceso de ensamblado
TASM: Ensamblador
Se le llama ensamblador no slo al lenguaje; sino tambin al programa que traduce el cdigo fuente escrito en ensamblador, a cdigo objeto, equivalente a los opcodes en lenguaje de mquina. En el caso de 8086 y familia, el ensamblador, sea TASM (Borland) o MASM (Microsoft), se encarga de generar los archivos .OBJ que representan el cdigo de mquina asociado al programa fuente en ensamblador.
TASM <nombre del programa> {opciones} En el nombre del programa, podemos omitir la extensin .ASM, que es la que tenemos por defecto.
Proceso de ensamblado
Por ejemplo, para ensamblar el programa HOLA.ASM, basta la siguiente lnea de comandos:
/la
Genera un archivo, adicional al .OBJ, con extensin .LST, que muestra un listado detallado del proceso de ensamblado. Entre otras cosas, muestra la asociacin existente entre el cdigo fuente y los opcodes generados.
Proceso de ensamblado
/zi
Almacena informacin de smbolos junto con el programa objeto, til para que el depurador permita ejecutar el cdigo objeto en sincrona con el cdigo fuente. Se recomienda que durante el desarrollo de un programa se ejecute TASM con una lnea de comandos similar a la siguiente:
Proceso de ensamblado
TLINK: Linker
Un archivo .OBJ, si bien contiene ya todo el cdigo de mquina, no puede ser ejecutado por el sistema operativo, pues no contiene informacin necesaria para el S.O., tal como memoria requerida, la cual se coloca en un encabezado, que es ledo por el sistema para determinar cmo ejecutar el programa. Cuando se hace un programa en varios mdulos, no solamente existe un cdigo objeto sino varios, que debemos combinar o relacionar entre s.
Estos procesos son llevados a cabo por el TLINK; el cual toma como entrada uno o varios archivos .OBJ y genera los archivos ejecutables, con extensin .COM o .EXE.
Proceso de ensamblado
La sintaxis bsica:
TLINK <nombre del programa o programas> {opciones} En el nombre del programa, se puede omitir la extensin .OBJ, que es el valor por defecto. Por ejemplo, para ligar el cdigo objeto generado anteriormente HOLA.OBJ, basta la siguiente lnea de comandos: C> TLINK HOLA
Proceso de ensamblado /v
Almacena informacin de smbolos junto con el programa ejecutable, til para que el depurador permita ejecutar el cdigo objeto en sincrona con el cdigo fuente. Esta opcin debe escribirse en minsculas, estrictamente. Ejemplo:
C> TLINK HOLA /v Tambin aqu a veces se requiere de poner las opciones antes, como por ejemplo: C> TLINK /v HOLA
Proceso de ensamblado
Otros procesos que intervienen en el ensamblado: - MAKE: Reglas de construccin - TD: Depuracin - TPROF: Pruebas de eficiencia
LENGUAJE ENSAMBLADOR
Registros
Registros
Registro: Conjunto de flip-flops capaz de almacenar, y en algunos casos modificar, informacin binaria. Dentro de todo CPU existe un conjunto de registros. Algunos tienen un uso especfico, otros son de uso general. Los registros de uso general normalmente se utilizan para guardar datos y resultados intermedios.
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.
Muchas de las instrucciones de lenguaje mquina suponen que los datos estn en alguno de los registros o almacenan el resultado en alguno de los registros internos.
Se emplean para controlar instrucciones en ejecucin, manejar direccionamiento de memoria y proporcionar capacidad aritmtica. Son direccionables por medio de un nombre.
Los bits por convencin, se numeran de derecha a izquierda.
Los registros de propsito general AX, BX, CX y DX son el soporte para el desarrollo de programas. Son nicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte "alta", y el ultimo byte de la derecha es la parte "baja". Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre.
Registro BX. Conocido como el registro base ya que es el nico registro de propsito general que puede ser ndice para direccionamiento indexado. Tambin es comn emplear el BX para clculos
Registro DX. Conocido como registro de datos. Alguna operaciones de entrada/salida requieren su uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX trabajando juntos. Se pude usar los registros de propsito general para suma y resta de cifras de 8, 16 o 32 bits.
ESP 32 bits
SP 16 bits
REGISTROS APUNTADORES
Los registros SP (apuntador de la pila) Y BP (apuntador de base) estn asociados con el registro SS y permiten al sistema accesar datos en el segmento de la pila. Registro BP. El BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones transmitidos va pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP. Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP.
REGISTROS APUNTADORES
En el ejemplo siguiente, el registro SS contiene la direccin de segmento 27B3[0]H y el SP el desplazamiento 312H. Para encontrar la palabra actual que esta siendo procesada en la pila, SE combina las direcciones en el SS y el SP:
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta. El IP esta asociado con el registro CS ya que IP indica la instruccin actual dentro del segmento de cdigo que se esta ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP. En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la siguiente instruccin que ser ejecutada, el procesador combina las direcciones en el CS y el IP:
Segmento de direccin en el registro CS: Desplazamiento de direccin en el registro IP: Direccin de la siguiente instruccin:
REGISTROS NDICE
Los registros SI y DI estn disponibles para direccionamiento indexado y para sumas y restas.
Registro SI. El registro ndice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.
Registro DI. El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI.
Registros de Segmento
CS: Code Segment (Segmento de Cdigo) 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 enva por el bus de direcciones.
Registros de segmento
Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para direccionamiento conocida como el segmento actual. Registro CS. El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta direccin de segmento, mas un valor de desplazamiento en el registro apuntador de instruccin (IP), indica la direccin de una instruccin que es buscada para su ejecucin. Registro DS. La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En trminos sencillos, esta direccin, mas un valor de desplazamiento en una instruccin, genera una referencia a la ubicacin de un byte especifico en el segmento de datos
Registros de segmento
Registro SS. El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en le registro SS. Esta direccin de segmento, mas un valor de desplazamiento en el registro del apuntador de pila (SP), indica la palabra actual en la pila que esta siendo direccionada. Registros ES. Alguna operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra de segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede inicializarlo con una direccin de segmento apropiada. Registros FS y GS. Son registros extra de segmento en los procesadores 80386 y posteriores.
Registro de Banderas
Conjunto de bits que nos dan informacin sobre el estado del procesador y sobre el resultado de la ltima operacin 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
REGISTRO DE BANDERAS
De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que piden comparaciones y aritmtica cambian el estado de las banderas, algunas cuyas instrucciones pueden realizar pruebas para determinar la accin subsecuente.
OF (Overflow, desbordamiento). Indica desbordamiento de un bit de orden alto (mas a la izquierda) despus de una operacin aritmtica.
REGISTRO DE BANDERAS
DF (direccin). Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de caracteres. IF (interrupcin). Indica que una interrupcin externa, como la entrada desde el teclado, sea procesada o ignorada. TF (trampa). Permite la operacin del procesador en modo de un paso. Los programas depuradores, como el DEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecucin de una sola instruccin a un tiempo, para examinar el efecto de esa instruccin sobre los registros de memoria. SF (signo). Contiene el signo resultante de una operacin aritmtica (0 = positivo y 1 = negativo). ZF (cero). Indica el resultado de una operacin aritmtica o de comparacin (0 = resultado diferente de cero y 1 = resultado igual a cero).
REGISTRO DE BANDERAS
AF (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmtica especializada. PF (paridad). Indica paridad par o impar de una operacin en datos de 8 bits de bajo orden (mas a la derecha). CF (acarreo). Contiene el acarreo de orden mas alto (mas a la izquierda) despus de una operacin aritmtica; tambin lleva el contenido del ultimo bit en una operacin de corrimiento o de rotacin.
LENGUAJE ENSAMBLADOR
Segmentacin
SEGMENTO
Un segmento es un rea especial en un programa que inicia en un limite de un prrafo, esto es, en una localidad de regularmente divisible entre 16, o 10 hexadecimal. Aunque un segmento puede estar ubicado casi en cualquier lugar de la memoria y, en modo real, puede ser hasta de 64K, solo necesita tanto espacio como el programa requiera para su ejecucin.
Se puede tener cualquier numero de segmentos; para direccionar un segmento en particular basta cambiar la direccin en el registro del segmento apropiado. Los tres segmentos principales son los segmentos de cdigo, de datos y de la pila.
SEGMENTO
Segmento de cdigo.
El segmento de cdigo (CS) contiene las instrucciones de maquina que son ejecutadas por lo comn la primera instruccin ejecutable esta en el inicio del segmento, y el sistema operativo enlaza a esa localidad para iniciar la ejecucin del programa. Como su nombre indica, el registro del CS direcciona el segmento de cdigo. Si su rea de cdigo requiere mas de 64K, su programa puede necesitar definir mas de un segmento de cdigo.
SEGMENTO
Segmento de datos.
El segmento de datos (DS) contiene datos, constantes y reas de trabajo definidos por el programa. El registro DS direcciona el segmento de datos. Si su rea de datos requiere mas de 64K, su programa puede necesitar definir mas de un segmento de datos.
Segmento de pila.
La pila contiene los datos y direcciones necesarios para guardar temporalmente o para llamadas a subrutinas. El registro de segmento de la pila (SS) direcciona el segmento de la pila.
Segmentacin
Tcnica utilizada en los procesadores Intel 8088/8086 para generar direcciones de 20 bits usando registros de 16 bits.
Para ilustrar esta tcnica, suponga que se desea ubicar la posicin de una persona a partir de un punto de referencia, pero utilizando solamente nmeros de 2 dgitos decimales.
100
200
300
400
500
mts
Segmentacin
Uno
para indicar en cul bloque est la persona Otro para especificar su posicin dentro del bloque.
Posicin = Bloque:Posicin
100
0:50
200
300
3:45
400
500
mts
Segmentacin
100
0:50
200
300
3:45
400
500
mts
Segmentacin
En el caso de los procesadores 80X86, los bloques se llaman SEGMENTOS y la posicin se llama DESPLAZAMIENTO En modo real, cada una se describe con un nmero de 16 bits. Operando en modo real
Direccin Real = Segmento*16 + Desplazamiento.
La Direccin Real ya es una cantidad de 20 bits. Esto significa que toda direccin tiene 2 partes: Un Segmento y un desplazamiento.
Es importante recalcar que cuando los procesadores 80386 o posteriores operan en modo protegido, la segmentacin funciona de manera muy diferente. Cada segmento puede ser de hasta 4 Gbytes. Maneja memoria virtual, lo que implica un esquema de paginacin. Maneja tambin multitarea y un esquema de proteccin de memoria.
LENGUAJE ENSAMBLADOR
Set de instrucciones
Conjunto de Instrucciones
El Conjunto de instrucciones (Instruction Set) de un procesador est formado por aquellas instrucciones en lenguaje mquina que un procesador puede ejecutar. CISC vs. RISC
CISC: Complex Instruction Set Computer RISC: Reduced Instruction Set Computer
Conjunto de Instrucciones
Transferencia de datos Aritmtica entera binaria Operaciones lgicas Desplazamientos y rotaciones Aritmtica BCD Gestin de cadenas Control del sistema Control de flujo del programa Saltos condicionales
Grupos de Instrucciones
Transferencia de datos
Sintaxis:
Acumulador Memoria Memoria/registro Registro de Segmento Registro Memoria Registro Dato Inmediato
Memoria
Dato Inmediato
Grupos de Instrucciones
Ejemplo:
MOV AX,0006h MOV BX,AX MOV AX,4C00h INT 21H
Este pequeo programa mueve el valor 0006H al registro AX, luego mueve el contenido de AX (0006h) al registro BX, por ltimo mueve el valor 4C00h al registro AX para terminar la ejecucin con la opcin 4C de la interrupcin 21h.
Grupos de Instrucciones
Propsito: Mover cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI. MOVS Este comando no necesita parametros ya que toma como direccin fuente el contenido del registro SI y como destino el contenido de DI. La secuencia de instrucciones siguiente ilustran esto:
Sintaxis:
Primero inicializamos los valores de SI y DI con las direcciones de las variables VAR1 y VAR2 respectivamente, despues al ejecutar MOVS se copia el contenido de VAR1 a VAR2. Los comandos MOVSB y MOVSW se utilizan de la misma forma que MOVS, el primero mueve un byte y el segundo una palabra .
Comentario
Suma Suma con acarreo Resta Resta con acarreo Divisin (sin signo) Divisin entera con signo Multiplicacin (sin signo) Multiplicacin entera con signo Incrementar
Operacin
ADD Dest,Fuente ADC Dest,Fuente SUB Dest,Fuente SBB Dest,Fuente DIV Op IDIV Op MUL Op IMUL Op INC Op
DEC
CMP SAL SAR
Decrementar
Comparar Desplazam. aritmtico a la izq. Desplazam. aritmtico a la der.
DEC Op
CMP Op1,Op2 SAL Op,Cantidad SAR Op,Cantidad
SHR
SHR Op,Cantidad
Grupos de Instrucciones
Gestin de cadenas
rep: Repetir -lodsb:AL=byte{DS:SI}
Saltos condicionales
Saltos condicionales basados en: Condiciones sobre indicadores Relaciones aritmticas con signo Relaciones aritmticas sin signo
Saltos condicionales
Saltos condicionales
Programacin estructurada
Es posible implementar parcialmente en bajo nivel las estructuras de control que propone la programacin estructurada:
If ... then If ... then ... else Repeat .... until While ... do For ... do
If ... then
En pseudocdigo:
If (cx > ax) then dec cx
En ensamblador
cmp cx,ax jle fin_si dec cx fin_si: ; if (cx > ax) ; then dec cx
Pseudocdigo:
If (bx < ax) then dec ax else dec bx
Ensamblador:
cmp bx,ax ; If (bx < ax) jge else1 dec ax ; then dec ax jmp fin_si1 else1: dec bx ; else dec bx fin_si1:
Pseudocdigo:
Repeat: inc cx add ax,cx until (cx > 100)
Ensamblador:
Repite1: inc cx add ax,cx cmp cx,100 jle Repite1
While ... do
Pseudocdigo:
Ensamblador:
while1: cmp bx,200 ; While (bx<200) jge fin_while1 inc bx add ax,cx jmp while1 ; end_while fin_while1:
For ... do
Semntica:
For ... do
Pseudocdigo:
For (cx=1 hasta 20) do add ax,bx inc bx end_for
Ensamblador:
mov cx,20 do1: add ax,bx inc bx loop do1 Nota: Dentro de la imlementacin del for ...do no es aconsejable utilizar CX cuando se implementa con loop.