Está en la página 1de 73

PROGRAMACIN DE BAJO NIVEL

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

Propiedades de las instrucciones mquina

Realizan una nica y simple funcin.


La decodificacin es sencilla Utilizan un nmero fijo de operandos Su codificacin en bits es bastante sistemtica Son autocontenidas
Contienen toda la informacin necesaria para su ejecucin Su interpretacin no depende de su posicin en el programa o en la memoria

Propiedades de las instrucciones mquina

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

Formatos de instruccin mquina

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

Formatos de instruccin mquina

Los formatos se dividen en campos Cadenas de bits contiguas


Tipos bsicos de campos Cdigo de operacin Indica la operacin a realizar Direccin (uno o varios) Indica la direccin de un dato, un resultado o una 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) .

Una calculadora programable simple podra asignar los opcodes:


1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE

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.

Mnemnico: Palabra breve, descriptiva y fcil de recordar.

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.

Caractersticas del Ensamblador

Correspondencia 1 a 1 con el lenguaje mquina.

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.

La sintaxis bsica para su uso es:


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:

C> TASM HOLA


En las opciones se puede controlar el proceso de ensamblado, para que genere informacin adicional o cambie su forma de operacin. Dos de estas opciones, que seran de gran utilidad son:

/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:

C> TASM HOLA /zi /la


En algunas versiones las opciones deben ponerse previamente, por ejemplo:

C> TASM /zi /la HOLA

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

En las opciones se puede controlar el proceso de ligado.

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.

REGISTROS INTERNOS DEL PROCESADOR

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.

Estructura de una palabra:

REGISTROS DE PROPSITO GENERAL

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.

Registros de los procesadores 80X86

Registros de Uso General:


EAX: EBX: ECX: EDX:

Acumulador Base Contador Datos.

Estos registros pueden guardar datos de 32, 16 u 8 bits.

EAX 32 bits AH 16 bits AX AL

REGISTROS DE PROPSITO GENERAL


Registro AX. Es el acumulador principal, usado para operaciones que implican entrada/salida y la mayor parte de la aritmtica. Tambin, algunas operaciones generan cdigo mas eficiente si se refieren al AX en lugar de a los otros registros.

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

REGISTROS DE PROPSITO GENERAL


Registro CX. Conocido como el registro contador. Puede contener un valor para controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits.

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.

Registros de los procesadores 80X86 APUNTADORES E INDICES


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

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:

Registro de Apuntador de Instrucciones

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:

25A40H + 412H 25E52H

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 los procesadores 80X86 Registros de Segmento

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.

Los bits de las banderas comunes son como sigue:

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.

Las banderas estn en el registro de banderas en las siguientes posiciones

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

Esto se puede realizar si se hace lo siguiente:


Se divide la recta en bloques de 100 metros cada uno. Se utilizan dos nmeros:

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

Para obtener la ubicacin real debe realizarse la siguiente operacin:

Ubicacin = Bloque*100 + Posicin


Posicin1

= 0*100 + 50 = 50 Posicin2 = 3*100 + 45 = 345 Posicin 1 Posicin 2

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.

Segmentacin en Modo Protegido

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

Las instrucciones normalmente se agrupan para describirlas.

Conjunto de Instrucciones

Los grupos normalmente son:

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

Propsito: Transferencia de datos entre celdas de memoria, registros y acumulador.


MOV Destino,Fuente Donde Destino es el lugar a donde se movern los datos y fuente es el lugar donde se encuentran dichos datos. Los diferentes movimientos de datos permitidos para esta instruccin son:
Destino Fuente

Sintaxis:

Memoria Acumulador Registro de Segmento Memoria/registro Registro Registro Memoria Registro

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

MOVS (MOVSB) (MOVSW)

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:

MOV SI, OFFSET VAR1 MOV DI, OFFSET VAR2 MOVS

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 .

Grupos de Instrucciones Operadores Aritmticas


Nombre
ADD ADC SUB SBB DIV IDIV MUL IMUL INC

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

Grupos de Instrucciones Operadores Lgicos


Nombre NEG NOT AND OR XOR SHL Comentario Negacin (complemento a 2) Invertir cada bit 'Y' (And) lgico 'O' (Or) lgico 'O' (Or) exclusivo Operacin NEG Op NOT Op AND Dest,Fuente OR Dest,Fuente XOR Dest,Fuente

Desplazam. lgico a la izquierda SHL Op,Cantidad

SHR

Desplazam. lgico a la derecha

SHR Op,Cantidad

Grupos de Instrucciones

Gestin 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

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 aritmticas con signo Relaciones aritmticas sin signo

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 aritmticas con signo


jg/jl obj: jump if greater/less jge obj: jump if greater or equal jle obj: jump if less or equal

Saltos condicionales

Relaciones aritmticas 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 despus de una comparacin:


Cmp dest,orig jxx objetivo (Donde xx: Condicin de salto)
Nota: La instuccin CMP resta el origen al destino y afecta banderas, no guarda el resultado ni altera los operandos.

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

Ilustraremos estas implementaciones con ejemplos:

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

If ... then ... else

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:

Repeat ... until

Pseudocdigo:
Repeat: inc cx add ax,cx until (cx > 100)

Ensamblador:
Repite1: inc cx add ax,cx cmp cx,100 jle Repite1

; until (cx > 100)

While ... do

Pseudocdigo:

While (bx<200) do inc bx add ax,bx end_while

Ensamblador:
while1: cmp bx,200 ; While (bx<200) jge fin_while1 inc bx add ax,cx jmp while1 ; end_while fin_while1:

For ... do

Una implementacin utiliza la instruccin loop Sintaxis loop:


loop objetivo

Semntica:

Si (CX 0) Dec CX Salta a objetivo Sino Siguiente instruccin

loop utiliza CX forzosamente

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.

También podría gustarte