Sunteți pe pagina 1din 9

UNIVERSIDAD MARIO GALVEZ

FACULTAD DE INGENIERIA
Arquitectura De Las Computadoras II
Seccin: A

INVESTIGACION
Instrucciones Assembler

Jonnathan L. Fernando Aldana


Ruano
0900 14 22577

Guatemala, 04 de agosto de 2017


INSTRUCCIONES DE SALTO

Un programa inicia su ejecucin con la primera instruccin y contina de arriba hacia abajo
ejecutando cada una de las instrucciones hasta llegar a la ltima. En la mayora de los casos, sin
embargo, se requiere que el programa ejecute una serie de instrucciones dependiendo de s una
condicin se cumple o de que ejecute una serie de instrucciones en forma repetitiva. Este tipo de
programas se puede implementar mediante las instrucciones de control de flujo. Las instrucciones de
control de flujo se clasifican en instrucciones de salto incondicional, salto condicional y repetitivo.

Instruccin De Salto Incondicional La instruccin de salto incondicional hace que el control


de flujo del programa salte a la instruccin cuya direccin est especificada por su operando.

La instruccin jmp hace que la ejecucin del programa continu en la direccin especificada por el
operando.

Sintaxis:
jmp etiqueta
jmp regW|memW
jmp memDW

La direccin puede ser una etiqueta o estar en un registro o localidad de memoria. En el caso de usar
un registro o localidad de memoria de una palabra, el salto es a una instruccin que se encuentra en
el mismo segmento y el valor representa el desplazamiento de la instruccin con respecto al
segmento. En el caso de que la direccin est en una localidad de memoria de tipo palabra doble, el
salto es a otro segmento y el valor es el segmento: desplazamiento de la instruccin.

Instrucciones De Salto Condicional

Las instrucciones de salto condicional hacen que el control de flujo del programa salte a la instruccin
cuya direccin est especificada por su operando si se cumple una condicin dada.

Cambian la direccin de la siguiente instruccin a ser ejecutada dependiendo del valor de ciertas
banderas .

Sintaxis:
jcond etiqueta

Todas las instrucciones de salto condicional operan en forma similar. jcond es el mnemnico de la
instruccin y etiqueta es la etiqueta de la direccin donde est la instruccin a la que va a saltar el
programa. Los mnemnicos de las instrucciones de salto condicional pueden clasificarse en tres
grupos:

Los saltos cuya condicin de salto es el resultado de una comparacin de dos nmeros no signados;
Se muestran los saltos cuya condicin de salto es el resultado de una comparacin de dos nmeros
signados; Tambin estn los saltos cuya condicin de salto es el resultado de una bandera o el registro
CX. Aunque en las instrucciones de salto de las tablas 5-1a y 5-1b se dice que la condicin de salto es
el resultado de una comparacin, la instruccin utiliza el valor de una o dos banderas para ejecutar o
no el salto. Los valores de las banderas que producen el salto se muestran en la tercera columna en
las tablas.

Saltos si la condicin es una comparacin no signada

Instruccin Salta si... Banderas


ja | jnbe mayor | no menor o igual C=0&Z=0
jae | jnb mayor o igual | no menor C=0
jb | jnae menor | no mayor o igual C=1
jbe | jna menor o igual | no mayor C=1|Z=1
je igual Z=1
jne diferente Z=0

Saltos si la condicin es una comparacin signada

Instruccin Salta s ... Banderas


jg | jnle mayor | no menor o igual S=O&Z=0
jge | jnl mayor o igual | no menor S=O
jl | jnge menor | no mayor o igual SO
jle | jng menor o igual | no mayor SO|Z=1
je igual Z=1
jne diferente Z=0

Saltos si la condicin es un estado de una bandera o el registro CX.

Instruccin Salta s ... Banderas


Jc acarreo C=1
Jo sobreflujo O=1
jp | jpe paridad | paridad par P=1
jpo | jnp aridad non | no paridad P=0
js cero Z=1
jnc no acarreo C=0
jno no sobreflujo O=0
jns no signo S=0
jnz no cero Z=0
jcxz si CX es cero -

INSTRUCCIONES REPETITIVAS

El ensamblador del 8086 posee tres instrucciones especiales que permiten la construccin de ciclos.
loop direccin : Decrementa CX y luego salta si CX no es 0.
Sintaxis: loop etiqueta
Esta instruccin decrementa el contenido del registro CX en uno, si el valor que queda en
CX es diferente de cero, entonces la instruccin salta a la direccin especificada por etiqueta,
la cual no debe encontrarse ms all de los 126 bytes hacia atrs o de los 127 bytes hacia
adelante. Esta instruccin se utiliza para crear ciclos que se repiten el nmero de veces
especificado por el registro CX. Como la instruccin loop decrementa CX antes de probar si
vale cero. Si CX vale cero al principio, al decrementar CX tomar el valor de 65535 y por lo
tanto el ciclo ejecutar 65536 veces.

loope | loopz direccin: Decrementa CX y luego salta si CX no es 0 y la bandera de cero Z


vale 1.
Sintaxis: loope | loopz etiqueta

Los mnemnicos loope y loopz representan la misma instruccin. Esta instruccin


decrementa el contenido del registro CX en uno, si el valor que queda en CX es diferente de
cero y la bandera de cero Z vale 1, presumiblemente puesta por una comparacin previa,
entonces la instruccin salta a la direccin especificada por etiqueta, la cual no debe
encontrarse ms all de los 126 bytes hacia atrs o 127 bytes hacia adelante.

loopne | loopnz direccin: Decrementa CX y luego salta si CX no es 0 y la bandera de cero


Z vale 0.
Sintaxis: loopne | loopnz etiqueta Los

mnemnicos loope y loopz representan la misma instruccin. Esta instruccin decrementa el


contenido del registro CX en uno, si el valor que queda en CX es diferente de cero y la
bandera de cero Z vale 0, presumiblemente puesta por una comparacin previa, entonces la
instruccin salta a la direccin especificada por etiqueta, la cual no debe encontrarse ms all
de los 126 bytes hacia atrs o 127 bytes hacia adelante.

BUCLES O CICLOS EN ENSAMBLADOR

Bucle While: Una de las construcciones ms comunes en lenguajes de alto nivel para ejecutar
cdigo de forma iterativa es el bucle while. Se muestra su estructura. La palabra reservada
while da paso a una expresin booleana entre parntesis que se evala y en caso de ser cierta
pasa a ejecutar el bloque del cdigo interno tras cuyo final se vuelve de nuevo a evaluar la
condicin.

En este bloque es importante tener en cuenta que la expresin booleana se evala al menos
una vez y se contina evaluando hasta que sea falsa. Supngase que la evaluacin de la
expresin es cero en caso de ser falsa y diferente de cero si es cierta y el valor resultante se
almacena en %eax. Se muestra la estructura genrica en lenguaje ensamblador resultante de
traducir un bucle while en este supuesto.
Traduccion cdigo lenguaje ensamblador:

eval: ... # Evaluar la expresin booleana


... # Resultado en %eax
cmp $0, %eax
je finwhile
... # Traduccin del cdigo interno
...
jmp eval
finwhile:
... # Resto del programa

Tras evaluar la condicin se ejecuta una instruccin que salta al final del bloque si es falsa. En
caso de ser cierta se ejecuta el bloque de cdigo y tras l un salto incondicional a la primera
instruccin con la que comenz la evaluacin de la condicin. El destino de este salto no
puede ser la instruccin de comparacin porque es muy posible que las variables que
intervienen en la condicin hayan sido modificadas por lo que la evaluacin se debe hacer a
partir de estos valores. Se muestra la traduccin de un bucle while con una de estas
condiciones. Se asume que las variables x, i y j son de tipo entero y estn almacenadas en
memoria con etiquetas con el mismo nombre.

PROCEDIMIENTOS

El segmento de cdigo contiene el cdigo ejecutable de un programa. Tambin tiene uno o mas
procedimientos, definidos con la directiva PROC. Un segmento que tiene solo un procedimiento
puede aparecer como sigue:

NOMBRE OPERACION OPERANDO COMENTARIO


nomsegmento SEGMENT PARA
nomproc PROC FAR ;Un
. ;procedimiento
. ;dentro
. ;del segmento
nomproc ENDP ;de cdigo
nomsegmento ENDS

El nombre del procedimiento debe estar presente, ser nico y seguir las reglas para la formacin de
nombres del lenguaje. El operando far en este caso esta relacionado con la ejecucin del programa.
Cuando usted solicita la ejecucin de un programa, el cargador de programas del DOS utiliza este
nombre de procedimiento como el punto de entrada para la primera instruccin a ejecutar.

La directiva ENDP indica el fin de un procedimiento y contiene el mismo nombre que el enunciado
PROC para permitir que el ensamblador relacione a los dos. Ya que los procedimientos deben estar
por completo dentro de un segmento, ENDP define el final de un procedimiento antes que ENDS
defina el final de un segmento.

Lamada de procedimientos Hasta ahora los segmentos de cdigo han consistido solo en un
procedimiento, codificado como:
BEGIN PROC FAR
.
.
.
BEGIN ENDP

En este caso el operador FAR informa al sistema que la direccin indicada es el punto de entrada
para la ejecucin del programa, mientras que la directiva ENDP define el final del procedimiento. Sin
embargo, un segmento de cdigo puede tener cualquier numero de procedimientos, todos
distinguidos por PROC y ENDP. Un procedimiento llamado (o subrutina) es una seccin de cdigo
que realiza una tarea definida y clara (tal como ubicar el cursor o bien obtener entrada del teclado).
La organizacin de un programa en procedimientos proporciona los beneficios siguientes:

1. Reduce la cantidad de cdigo, ya que un procedimiento comn puede ser llamado desde cualquier
lugar en el segmento de cdigo.
2. Fortalece la mejor organizacin del programa.
3. Facilita la depuracin del programa, ya que los errores pueden ser aislados con mayor claridad.
4. Ayuda en el mantenimiento progresivo de programas, ya que los procedimientos son identificados
de forma rpida para su modificacin.

OPERACIONES CALL Y RET

La instruccin CALL transfiere el control a un procedimiento llamado, y la instruccin RET regresa


del procedimiento llamado al procedimiento original que hizo la llamada. RET debe ser la ltima
instruccin en un procedimiento llamado. Los formatos generales para CALL y RET son:

El cdigo objeto particular que CALL y RET generan depende de si la operacin implica un
procedimiento NEAR (cercano) o un procedimiento FAR (lejano).

Llamada y regreso cercanos. Una llamada (CALL) a un procedimiento dentro del mismo segmento
es cercana y realiza lo siguiente:

Disminuye el SP en 2 (una palabra)


Mete el IP (que contiene el desplazamiento de la instruccin que sigue al CALL) en la pila.
Inserta la direccin del desplazamiento del procedimiento llamado en el IP (esta operacin vaca el
resultado de la instruccin previamente procesada),
Un RET que regresa desde un procedimiento cercano realiza lo siguiente:

Saca el antiguo valor de IP de la pila y lo enva al IP (lo cual tambin vaca el resultado de la
instruccin previamente procesada).
Incrementa el SP en 2.
Ahora el CS:IP apunta a la instruccin que sigue al CALL original en la llamada del procedimiento,
en donde se reasume la ejecucin.
Llamada y regreso lejanos. Una llamada (CALL) lejana llama a un procedimiento etiquetado con
FAR, tal vez en un segmento de cdigo separado. Un CALL lejano mete a la pila al CS y al IP, y
RET los saca de la pila.

TITLE P08CALLP (EXE) Llamada a procedimientos


.MODEL SMALL
.STACK 64
.DATA
;---------------------------------------------------------------------
.CODE
BEGIN PROC FAR
CALL B10 ;Llama a B10
; ...
MOV AX,4C00H ;Salida a DOS
INT 21H
BEGIN ENDP
;---------------------------------------------------------------------
B10 PROC NEAR
CALL C10 ;Llama a C10
; ...
RET ;De regreso
B10 ENDP ;Quien llama
;---------------------------------------------------------------------
END BEGIN
________________________________________
CONCLUCIONES

Como conclusin podemos decir que el lenguaje ensamblador es ms que un


tipo de lenguaje de bajo nivel en el cual es empleado para crear programas
informticos.

Este lenguaje es creado a base de instrucciones para intentar sustituir al


lenguaje maquina por uno similar utilizado por el hombre.

La importancia de este es que en el se pueden hacer cualquier tipo de


programas que en otros lenguajes de alto nivel no, al igual que ocupan menos
espacio en la memoria.

Una de las cosas importantes es que esta ocupado al diseo de las tarjetas
madres, cosa que un programa comn no podra hacer.
BIBLIOGRAFA

1. Abel, Peter. Lenguaje Ensamblador y Programacin para PC IBM y Compatibles. Tercera


Edicin. Prentice-Hall Hispanoamericana, S. A. Mxico. 1996.
2. Borland Int. Turbo Assembler Reference Guide. Version 1. Borland International. Scotts
Valley, CA. 1988.
3. Brey, Barry B. Los microprocesadores Intel: 8086/8088, 80186, 80286, 80386 y 80486.
Arquitectura, programacin e interfaces. Tercera Edicin. Prentice-Hall
Hispanoamericana, S. A. Mxico. 1995.
4. Godfrey, J. Terry. Lenguaje Ensamblador para Microcomputadoras IBM para
Principiantes y Avanzados. Prentice-Hall Hispanoamericana, S. A. Mxico. 1991.
5. Hyde, Randall. The Art of Assembly Language Programming. Este libro se encuentra
como una serie de documento PDF en el siguiente servidor
FTP:ftp.cs.ucr.edu/pub/pc/ibmpcdir
6. Swan, Tom. Mastering Turbo Assembler. Hayden Books. Indiana, U.S.A. 1989.

S-ar putea să vă placă și