Está en la página 1de 34

INVESTIGACIN

PROGRAMACIN BSICA
JAZMN MONTIEL RAMREZ

ISMA-VI
1|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

ndice
Introduccin......3
2.-Programacin bsica......4
2.1 Ensamblador (y ligador) a utilizar. . .. . . . . .. . . . . . .6
2.2 Ciclos numricos. . . . . . . . . . . . . . . . . . . . ..... . .. .-7
2.3 Captura bsica de cadenas. . . . . . . .................................8
2.4 Comparacin y prueba.... ............................................10
2.5 Saltos....11
2.6 Ciclos condicionales. . . . . .... . . . . . .. ....12
2.7 Incremento y decremento. . . . . . . ... . . . . . . . ............13
2.8 Captura de cadenas con formato. . . . . ............................15
2.9 Instrucciones aritmticas. . . . . . . . . ....................................16
2.10 Manipulacin de la pila. . . . ..19
2.11 Obtencin de cadena con representacin decimal. . ...............21
2.12 Instrucciones lgicas.....................................................24
2.13 Desplazamiento y rotacin.24
2.14 Obtencin de una cadena con la representacin hexadecimal.................26
2.15 Captura y almacenamiento de datos numricos.29
2.16 Operaciones bsicas sobre archivos de disco.........31
Conclusin.......33
Bibliografa.....34

2|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Introduccin
En esta investigacin se va a mencionar la utilidad de una pila, la cual
consiste en salvaguarda (conservar)

datos

(la

otra

es

la

de

salvaguardar las direcciones de retorno de las llamadas a subrutinas) y


esta es; un grupo de localidades de memoria que se reservan con la
finalidad de proporcionar un espacio para el almacenamiento temporal de
informacin.

Tambin se hace mencin a las instrucciones lgicas las cuales son


operaciones bit a bit que trabajan sobre octetos o palabras completas
por ejemplo: NOT negacin, AND producto lgico, OR suma lgica y XOR
suma lgica exclusiva. En el desplazamiento del procesador se encuentran
las instrucciones de rotacin e instrucciones de desplazamiento (tambin
conocidas como instrucciones para corrimientos).

Estas instrucciones nos permiten la manipulacin de las posiciones


individuales de los bits dentro de un registro o localidad de memoria,
dichas instrucciones son cuatro (ROL, ROR, RCL, RCR).

3|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

2.-Programacin bsica
Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de
enunciados o lneas de programacin son:
1.- Instruccin, tal como MOV y ADD, que el ensamblador traduce a cdigo objeto
2.- Directiva, que indican al ensamblador que realice una accin especfica, como definir un elemento
de dato.
ENUNCIADO O LINEA DE PROGRAMACIN:
[Etiqueta]

<Operacin

directiva>

[operando

(s)

] [

comentarios

NOTA: Los corchetes indican una entrada opcional


ETIQUETA o IDENTIFICADOR.- Es un nombre para designar un dato y la direccin donde se
encuentra dicho dato. Puede consistir de los siguientes caracteres:

Letras del alfabeto: A-Z a -z


Dgitos:
(0
9)
(no
puede
ser
Caracteres
especiales:
signo
de
Subrayado
(
Signo
de
pesos
Arroba
(
Punto
(
.
)
(no
puede

el

ser

primer
interrogacin
_
(
$
@
el
primer

carcter)
()
)
)
)
carcter)

No debe tener espacios en blanco en medio de la etiqueta. Para definir una etiqueta se usan los
directivos DW, DB. Una etiqueta puede tener los siguientes usos:
a) Como variable.- Ejemplo:
num db 65

; A num se le asocia el valor 65 y la direccin donde se encuentra

dicho dato.

Tambin podemos hacer:


num dw 6567H
b) Como direccin.- En la cual puede continuar el programa:
SUMA: ADD AX, DX
_____________
_____________
JMP SUMA
4|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

COMENTARIOS.- Empiezan con ( ; ) y mejoran la claridad del programa, donde el propsito de un


conjunto de instrucciones en especial no es claro.
ESTRUCTURA DE UN PROGRAMA.- Un programa escrito en lenguaje ensamblador se ensambla
por medio de un programa ensamblador: Los programas ms comunes para el 8088, 8086 con el
Turboensamblador (TASM) de la compaa Borland y el de la compaa Microsoft (MASM).
Los requerimientos mnimos para un programa escrito en lenguaje ensamblador son:
.Model
SMALL ; indica el modelo de memoria (SMALL)
.STACK
200
; indica el tamao del STACK (bytes)
.DATA
; indica que la siguiente informacin
___
; deber quedar en el segmento de datos
___
___
.CODE
; indica que la siguiente informacin
___
; es el programa ejecutable
___
___
MOV AH,4CH
;necesario para terminar el programa
INT 21H
; y regresar al prompt C>
END
; Indica el fin del programa
TIPOS DE MODELOS DE MEMORIA
Model TYNY
CS = DS
En 1 solo segmento d 64K
Model SMALL
CS = 64Kb DS = 64Kb
Model MEDIUM CS > 64Kb DS < 64Kb
Model COMPAC CS < 64Kb DS > 64Kb
Model LARGE
CS > 64Kb DS > 64Kb(Los arreglos de datos
deben ocupar menos de 64 K)
Model HUGE
CS > 64Kb DS > 64Kb(Los arreglos de datos
Pueden ocupar ms de 64 Kb)
INICIALIZACION DE DATOS
Los datos pueden tener diferentes longitudes, as podemos hablar de BYTES (8 bits), de palabras
WORD (16 bits) de doble palabra (32 bits).
Dependiendo de la longitud del dato se usa un directivo diferente para declararlo.
DB
1byte
DW
2byte
DD
4byte
DF o DP 6byte
DQ
8byte
DT
10bytPodemos usar una etiqueta para definir un arreglo, ejemplo:
Arreglo db 0, 1, 2, 3, 4 ; define 5 bytes con valores (0,1,2,3,4)
Otra forma de inicializar arreglo.
Arreglo db 0
db 1
db 2
5|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

FILA

db 3
db 4
Directiva DUP para definir una cierta cantidad de datos.
db 100 dup (0) ; define 100 bytes, todos con valor de( 0 )

2.1 Ensamblador (y ligador) a utilizar


El lengua je ensamblador, o assembler (assembly language en ingls), es un lengua je de programacin
de bajo nivel para los computadores, microprocesadores, micro controladores y otros circuitos integrados
programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras
constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms
directa del cdigo mquina especfico para cada arquitectura legible por un programador.
Caractersticas

El cdigo escrito en lengua je ensamblador posee una cierta dificultad de ser entendido ya
que su estructura se acerca al lengua je mquina, es decir, es un lengua je de bajo nivel.

El lengua je ensamblador es difcilmente portable, es decir, un cdigo escrito para un


microprocesador, puede necesitar ser modificado, para poder ser usado en otra mquina distinta.
Al cambiar a una mquina con arquitectura diferente, generalmente es necesario reescribirlo
completamente.

Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por

un microprocesador,

por lo que se pueden crear segmentos de cdigo difciles y/o muy

ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lengua je
ensamblador se dispone de instrucciones del CPU que generalmente no estn disponibles en los
lenguajes de alto nivel.

6|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Para crear un programa ejecutable utilizando lenguaje ensamblador es necesario realizar la serie de
pasos, conocida como ciclo de desarrollo de programas.
Para cada programa que se realice, habr eventualmente tres archivos en el disco. El paso inicial es
crear un archivo de programa fuente. Para crear este programa es necesario usar un editor ASCII, como el
programa EDIT de la versin 5.0 o posterior de MS-DOS. Este archivo contendr todas las instrucciones
de lenguaje ensamblador que conforman nuestro programa. Por convencin, los archivos escritos en
lenguaje ensamblador tienen asignados la extensin .ASM.
Los mdulos de programa fuente que constituyen un programa ejecutable pueden estar organizados
en una gran variedad de formas. Por ejemplo, pueden escribirse todos los procedimientos de un programa
en un solo mdulo o pueden dividirse estos procedimientos en diferentes mdulos, de acuerdo a la
especifidad de la tarea que realizan.
El programa en ensamblador, con extensin .ASM, es despus usado para convertir el archivo de
programa fuente en un archivo objeto, utilizando un traductor de lenguaje ensamblador, tal como el Macro
Assembler, o MASM, de Microsoft o el Turbo Assembler, o TASM, de Borland.

2.2 Ciclos numricos


Un bucle es un grupo de instrucciones que se ejecutan cclicamente un nmero concreto de veces.
Para construir bucles disponemos de las instrucciones siguientes:

stas posibilitan el grupo de control ms elemental de nuestros programas.


Un bucle es un bloque de cdigo que se ejecuta varias veces. Hay 4 tipos
de bucles bsicos: o Bucles sin fin o Bucles por conteo, Bucles hasta o
Bucles mientras. Las instrucciones de control de bucles son las siguientes:
* INC incrementar
* LOOPNZ, LOOPNE realizar un
* DEC decrementar
bucle si no es cero
* LOOP realizar un bucle
* JCXZ salta si CX es cero
* LOOPZ, LOOPE realizar un bucle si es cero
El lenguaje ensamblador cuenta con una instruccin muy poderosa que permite la programacin de ciclos
finitos, la instruccin LOOP. Esta instruccin trabaja en forma conjunta con el registro contador CX. El
formato general de esta instruccin es:
Mov CX, Numero_Veces
Etiqueta:
7|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Instrucciones a realizar
Loop Etiqueta
La instruccin Loop ejecuta las instrucciones que se encuentran entre la Etiqueta:
y Loop Etiqueta el nmero de veces que indique el campo No_Veces.
Por ejemplo, el siguiente grupo de instrucciones incrementa en 1 el registro AX ,
esto lo repite 100 veces.
Mov CX,100 ; 100 veces
repetir: Nombre de la etiqueta
Inc AX ; AX = AX + 1
Loop repetir Regresa a la etiqueta y compara el ciclo
La instruccin Loop decrementa el registro CX en cada iteracin y se detiene cuando CX es igual a cero.

2.3 Captura bsica de cadenas


Una cadena es una secuencia de bytes contiguos. Las operaciones que se realizan son las
siguientes:
Operaciones para Cadenas: LODS, STOS, MOVS, CMPS, SCAS, INS, OUTS
Operacin Auxiliar: CLD (Auto-incrementa SI y/o DI), STD (Auto-decrementa SI y/o DI)
; INICIALIZACION
CLD
; AUTO-INCREMENTO
MOV SI, STR ; INICIO-CADENA
LODSB
; OPERACION: AL=MEM[SI++]
LODS
LODS: LOaD String. Lee un caracter a la vez en el
acumulador.
Registros Implicados: Registros que debe inicializar antes de
usar la instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI
AL/AX/EAX: Dato consultado. LODSB usa AL, LODSW usa
AX, LODSW usa EAX
DS:SI: Apunta al elemento actual de la cadena consultada.
STOS
STOS: STOre String. Graba un caracter de una cadena a la vez
Registros Implicados: Registros que debe inicializar antes de usar la
instruccin Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI
AL/AX/EAX: dato consultado. STOSB usa AL, STOSW usa AX,
STOW usa EAX
ES: DI: Apunta al elemento actual del bloque de memoria a grabar.

8|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

SCAS
SCAS: SCAn String. Busca valor del acumulador en una cadena
Registros Implicados: Registros que debe inicializar antes de usar la
instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI
AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX,
SCASW usa EAX.
ES:DI: Indice para la cadena donde se buscar el dato.
REP SCAS
REP SCAS: REPite bsqueda de un dato mientras sea diferente (REPNE)
o igual (REPE) en una cadena. Termina bsqueda si el dato es igual
(REPNE), diferente (REPE) o el contador CX es cero
Registros Implicados: Registros que debe inicializar antes de usar la
instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI
AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX,
SCASW usa EAX
ES:DI: Indice para la cadena donde se buscar el dato
CX: Mximo no. comparaciones = Tamao de la cadena

MOVS
MOVS: MOVe String. Transfiere una cadena de [SI] a
[DI]. Nota: Existe MOVSB, MOVSW y MOVSD. Adems, no se
modifica el registro AX
Registros Implicados: Registros que debe inicializar antes de usar
la instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI/DI
DS:SI: ndice para la cadena origen
ES:DI: ndice para la cadena origen
REP MOVS
REP MOVS: Copia una cadena en una sola instruccin. El nmero de
caracteres a copiar se especifica en el registro CX.
Registros Implicados: Registros que debe inicializar antes de
usar la instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI/DI
DS:SI: Indice para la cadena origen
ES:DI: Indice para la cadena origen
CX: Tamao de la cadena

9|Pgina
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

2.4 Comparacin y prueba


Instruccin genrica para comparar La instruccin es CMP, ste permite comparar 2 operandos, la
sintaxis es la siguiente: CMP < Operador 1>, <Operador2> El operador 1, se compara con el 2. Los
operandos pueden ser cualquier direccionamiento valido, cumpliendo las reglas de la instruccin MOV con
respecto a los operandos. sta instruccin compara 2 operandos y luego cambia el registro de banderas
en base al resultado de la comparacin.
COMPARACION (*LA INSTRUCCIN CMP)
La instruccin CMP por lo comn es utilizada para comparar dos campos de datos, uno de los
cuales estn contenidos en un registro. El formato general para CMP es:
| [etiqueta:] | CMP | {registro/memoria}, {registro/memoria/inmediato}|
El resultado de una operacin CMP afecta la banderas AF, CF, OF, PF, SF y ZF, aunque no tiene
que probar estas banderas de forma individual. El cdigo siguiente prueba el registro BX por un valor cero:
X CMP BX, 00 ;Compara Bx con cero
JZ B50 ;Si es cero salta a B50
.
;(accin si es diferente de cero)
.
B50:
;Destino del salto, si BX es cero
Si el BX tiene cero, cmp establece ZF a 1 y puede o no cambiar la configuracin de otras banderas.
La instruccin JZ (salta si es cero) solo prueba la bandera ZF. Ya qye ZF tiene 1 (que significa una
condicin cero), JZ transfiere el control (salta) a la direccin indicada por el operando B50.
Observe que la operacin compara el primer operando con el segundo; por ejemplo el valor del
primer operando es mayor que, igual o menor que el valor segundo operando.
*LA INSTRUCCIN CMPS
CMPS compara el contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de
la bandera de direccin, CMPS incrementa o disminuye tambin los registros SI y DI para bytes, en 2 para
palabras y en 4 para palabras dobles. La operacin establece las banderas: AF, CF, OF, PF, SF y ZF.
Cuando se combinan con un prefijo REP y una longitud en el CX, de manera sucesiva CMPS
puede comparar cadenas de cualquier longitud.
Pero observe que CMPS proporcionan una comparacin alfanumrica, esto es, una comparacin de
acuerdo a con los valores ASCII. Considere la comparacin de dos cadenas que contienen JEAN y JOAN,
una comparacin de izquierda a derecha, tiene el resultado siguiente:
J:J Iguales
E:O Diferentes (E es menor)
A:A iguales
N:N iguales
Una comparacin de los 4 bytes termina con una comparacin de N con N (iguales). Ahora ya que
los dos nombres son idnticos, la operacin debe terminar tan pronto como la comparacin entre 2
caracteres sea diferente.
Algunas derivaciones de CMPS son las siguientes:
10 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

*CMPSB: Compara Bytes


*CMPSD: Compara palabras dobles
*CMPSW: Compara palabras
Las comparaciones en ensamblador se realizan con la instruccin CMP destino, fuente cuya real
funcin es restar del destino la fuente, y afectar las banderas, pero eso por ahora no importa, como la
programacin en ensamblador es estructurada vamos a utilizar saltos para que nuestro programa no haga
lo que no queremos. El salto que se usa para una comparacin donde el destino es mayor que la fuente es
JA nombre_etiqueta, es decir, al juntar el cdigo anterior para pedir los nmeros con la comparacin y el
salto, tendremos algo asi:
PRIMERO: ;etiqueta a la que regresa el salto
MOV AH,01
INT 21H
SUB AL,48
CMP AL, 10; comparacion
JA PRIMERO ; salto si DESTINO es mayor a FUENTE
MUL diez
MOV elnumero, AL
; ya se tiene el primer digito ahora el segundo
SEGUNDO:
MOV AG,01
INT 21H
SUB AL,48
JA SEGUNDO
ADD elnumero,AL

2.5 Saltos

JMP Salta.
JE, JZ salta si es igual a cero.
JNE, JNZ salta si no es igual a cero.
JS salta si el signo es negativo
JNS salta si el signo no es negativo.
JP, JPE salta si la paridad es par
JNP, JOP salta si la paridad es impar.
JO salta si hay capacidad excedida.
JNO salta si no hay capacidad excedida.
JB, JNAE salta si es por abajo (no
encima o igual).

JNB, JAE salta si no est por abajo


(encima o igual).

JBE, JNA salta si es por abajo o igual


(no encima).

JNBE, JA salta si no es por abajo o igual


(encima).

JL, JNGE salta si es menor que (no


mayor o igual).

JNL, JGE salta si no es menor que


(mayor o igual).

JLE, JNG salta si es menor que o igual


(no mayor).

11 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

JNLE, JG salta si no es menor que o igual


(mayor).
CALL (Llamada a subrutina).

Transfiere el control incondicionalmente a la direccin indicada en el operando. La bifurcacin puede


ser tambin directa o indirecta como anteriormente vimos, pero adems puede ser corta (tipo SHORT)
con un desplazamiento comprendido entre -128 y 127; o larga, con un desplazamiento de dos bytes con
signo. Si se hace un JMP SHORT y no llega el salto (por qu est demasiado alejada esa etiqueta) el
ensamblador dar error. Los buenos ensambladores (como TASM ) cuando dan dos posadas colocan
all donde es posible en salto corto, para economizar memoria, sin que el programador tenga que
ocuparse de poner un SHORT, Si el salto de dos bytes, que permite desplazamiento de 64 Kb en la
memoria sigue siendo insuficiente, se puede indicar con far que es largo (salto a otro seguimiento).

RET / RETF (Retorno de subrutina).


Sintaxis: RET [valor] o RETF [Valor]
Indicadores: OF DF IF TF SF ZF AF PF CF

2.6 Ciclos condicionales


Existen dos tipos de instrucciones de salto: las instrucciones de salto condicional y las de salto
incondicional. Las instrucciones de salto condicional, revisan si ha ocurrido alguna situacin para poder
transferir el control del programa a otra seccin, por ejemplo:
CMP AX,0 JE otro
:::::::::::
:::::::::::
otro :
::::::::::
::::::::::
End
En este ejemplo, la instruccin JE (Salta si es igual) revisa si la prueba implcita en la instruccin anterior
result positiva, es decir, si la comparacin de AX con 0 fuera cierta. En caso de que AX sea igual a 0, JE
transfiere el control del programa a las instrucciones que se encuentran despus de la etiqueta "otro". En
caso contrario ejecuta las instrucciones siguientes a JE. La siguiente es una lista de las instrucciones de
salto condicional y su descripcin:
12 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

JA o JNBE: Salta si est arriba o salta si no est por debajo o si no es igual (jump if above or jump if not
below or equal). El salto se efecta si la bandera de CF=0 o si la bandera Z F=0.
JAE o JNB: Salta si est arriba o es igual o salta si no est por debajo (jump if above or equal or jump if
not below). El salto se efecta si CF =0.
JB o JNAE: S alta si est por debajo o salta si no est por arriba o es igual (jump if below or jump if not
above or equal). El salto se efecta si CF=1.
JBE o JNA: Salta si est por debajo o es igual o salta si no est por arriba (jump if below or equal or jump
if not above). El salto se efecta si CF= 1 o ZF=1.
JE o JZ: Salta si es igual o salta si es cero (jump if equal or jump if zero). El salto s e efecta si ZF=1.
JNE o JNZ: Salta si no es igual o salta si no es cero (jump if not equal or jump if not zero). El salto se
efecta si ZF=0.
JG o JNLE: Salta si es mayor o salta si no es menor o igual (jump if greater or jump if not less or equal). El
salto se efecta si ZF=0 u OF=SF.
JGE o JNL: Salta si es mayor o igual o salta si no es menor (jump if greater or equal or j ump if not
less). El salto se efecta si SF=OF.
LOOP (bucle).
Sintaxis:
LOOP desplazamiento
Indicadores OF DF IF TF SF ZF AF PF CF
Decrementa el registro contador CX; si CX es cero, ejecuta la siguiente instruccin, en caso
contrario transfiere el control a la direccin resultante de sumar a IP + desplazamiento. El desplazamiento
debe estar comprendido entre -128 y +127.
Ejemplo:
MOV CX,10
BUCLE:
LOOP BUCLE
Con las mismas caractersticas que la instruccin anterior:
LOOPE/LOOPZ Bucle si igual, si cero. Z=1 Y CX<>0
LOOPNE/LOOPNZ Bucle si no igual, si no cero. Z=0 y CX<>0

2.7 Incremento y decremento


Las instrucciones INC y DEC permiten incrementar los contenidos de los registros.
Ejemplos:
INC AX ; AX=AX+1
INC VAR1 ;VAR1=VAR1+1
DEC AX ;AX=AX-1
13 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

DEC VAR1 ;VAR1=VAR1-1 y de las variables almacenadas en memoria.


Las instrucciones del ensamblador
Instrucciones de transferencia son utilizadas para mover los contenidos de los operando. Cada instruccin
se puede usar con diferentes modos de direccionamiento.
MOV
MOVS (MOVSB) (MOVSW)
Instruccin MOV
Propsito: Transferencia de datos entre celdas de memoria, registros y acumulador.
Sintaxis:
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: memoria. Fuente: acumulador
Destino: acumulador. Fuente: memoria
Destino: registro de segmento.
Fuente: memoria/registro
Destino: memoria/registro.
Fuente: registro de segmento
Destino: registro. Fuente: registro

Destino: registro. Fuente: memoria


Destino: memoria. Fuente: registro
Destino: registro. Fuente: dato inmediato
Destino: memoria. Fuente: dato inmediato
La instruccin MOV y los modos de
direccionamiento

Ejemplo de una primera instruccin:


MOV destino, origen
Efectivamente, sirve para mover. Lo que hace es copiar lo que haya en "origen" en "destino". Lo de que
primero vaya el destino y luego el origen es comn a todas las instrucciones del 8086 que tengan
dos operando, lo cual crear ms de un quebradero de cabeza al principio.
MOV AX,BL
MOV AX, BX
Sin embargo hace que el procesador tome el contenido de BX y lo copiara
en AX; lo que haba anteriormente en AX se pierde (puesto que un registro al fin y al cabo es un
nmero, en este caso de 16 bits, y ahora le hemos asignado un nuevo valor), mientras que BX no se ve
afectado. Cuando decimos "mover" en realidad sera ms apropiado "copiar", porque no alteramos en
absoluto el operando origen.
INCREMENTO:
Consiste en sumar uno al contenido de un registro que se especifica en la instruccin. Su esquema es:
R

R+1
Donde "R" representa un registro cualquiera de 8 a 16 bits. Si se trata de un registro doble (de 16 bits) se
incrementa el registro de orden bajo (por ejemplo, en el "BC" se incrementa "C"), y si ello hace que este
pase a valer "0", se incrementa tambin el de orden alto.
DECREMENTO: Es la inversa de la anterior, consiste en restar uno al contenido de un registro. Su
esquema es: R R-1 Si se trata de un registro doble, se decrementa el de orden bajo y, si esto hace que
pase
a
valer
255
(FFh),
se
decrementa
tambin
el
de
orden
alto.
14 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

COMPLEMENTO: Consiste en realizar un "complemento a 1" del acumulador, es decir, cambiar los "unos"
por "ceros" y los "ceros" por "unos".
NEGACIN: Consiste en realizar un "complemento a 2" del acumulador, es decir, realizar un
"complemento a 1" y, luego, sumarle "1". Lo que se obtiene es el "negativo" del nmero que tenamos en el
acumulador. El efecto es el mismo que si restramos el acumulador de "cero", es decir: A 0-A
EL FLAG DE ACARREO: Existen dos instrucciones que afectan al indicador de acarreo del registro "F",
es posible ponerlo a "1" o "complementarlo" (ponerlo a "1" si era "0" y viceversa). No se ha previsto una
instruccin para poner a "0" el flag de acarreo, dado que esto se puede conseguir haciendo un "AND" o un
"OR" del acumulador consigo mismo.

2.8 Captura de cadenas con formato


Permiten el movimiento, comparacin o bsqueda rpida de bloques de datos:

MOVC transferir carcter de una


cadena.

MOVW transferir palabra de una


cadena.

CMPC comparar carcter de una


cadena.

CMPW comparar palabra de una


cadena.

SCAC buscar carcter de una


cadena.
SCAW buscar palabra de una
cadena.

LODC cargar carcter de una


cadena.
LODW cargar palabra de una
cadena.
STOC guardar carcter de una
cadena.
STOW guardar palabra de una
cadena .
REP repetir .
CLD poner a 0 el indicador de
direccin.
STD poner a 1 el indicador de
direccin.

STOS
STOS: STOre String. Graba un caracter de una cadena a la vez
Registros Implicados: Registros que debe inicializar antes de usar la instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI
AL/AX/EAX: Dato consultado. STOSB usa AL, STOSW usa AX, STOSW usa EAX
ES:DI: Apunta al elemento actual del bloque de memoria a grabar
LODS
LODS: LOaD String. Lee un caracter a la vez en el acumulador
Registros Implicados: Registros que debe inicializar antes de usar la instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de SI
AL/AX/EAX: Dato consultado. LODSB usa AL, LODSW usa AX, LODSW usa EAX
DS:SI: Apunta al elemento actual de la cadena consultada
REP SCAS

15 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

REP SCAS: REPite bsqueda de un dato mientras sea diferente (REPNE) o igual (REPE) en una
cadena. Termina bsqueda si el dato es igual (REPNE), diferente (REPE) o el contador CX es cero
Registros Implicados: Registros que debe inicializar antes de usar la instruccin
Bit-D: Auto-decremento (STD) o auto-incremento (CLD) de DI
AL/AX/EAX: Dato a comparar. SCASB usa AL, SCASW usa AX, SCASW usa EAX
ES:DI: Indice para la cadena donde se buscar el dato
CX: Mximo no. comparaciones = Tamao de la cadena

2.9 Instrucciones aritmticas


Existen 8 instrucciones aritmticas bsicas ADD (suma), SUB (resta), MUL (multiplicacin). DIV (divisin
sin signo), IMUL (Multiplicacin con signo), IDIV (Divisin con signo), INC (Incremento unitario) y DEC
(Decremento unitario).
Las instrucciones ADD y SUB permiten realizar sumas y restas sencillas y tienen el siguiente formato:
ADD Destino, Fuente
SUB Destino, Fuente
Ejemplos:
ADD AX,BX ;AX=AX+BX
ADD AX,10 ;AX=AX+10
SUB AX,BX ;AX=AX-BX
SUB AX,10 ;AX=AX-10
En las operaciones de suma y resta el resultado siempre es almacenado en el operando de destino,
el cual puede ser un registro o una variable. Estas instrucciones son las que realiza directamente el
8086/8088:
o IMUL multiplicacin entera
Grupo de adicin:
o AAM ajuste ASCII para la
o ADD suma
multiplicacin
o ADC suma con acarreo
o AAA ajuste ASCII para la suma
Grupo de divisin:
o DAA ajuste decimal para la
o DIV divisin
suma
o IDIV divisin entera
o AAD ajuste ASCII para la
divisin
Grupo de sustraccin:
o SUB resta
Conversiones:
o SBB resta con acarreo negativo
o CBW pasar octeto a palabra
o AAS ajuste ASCII para la resta
o CWD pasar palabra a doble
o DAS ajuste decimal para la resta
palabra
NEG negacin.
Grupo de multiplicacin:
o MUL multiplicacin

Instrucciones Aritmticas
16 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Este tipo de instrucciones realizan operaciones aritmticas con los operandos. Y son: ADD, ADC,
DAA, AAA, SUB, SBB, DAS, AAS, NEG, MUL, IMUL, AAM, DIV, IDIV, AAD, CBW, CWB, INC, DEC.
ADD y ADC realizan la suma y la suma con acarreo (bit CF del registro de estado) de dos operandos,
respectivamente, y guardan el resultado en el primero de ellos. Admiten todos los tipos de
direccionamiento (excepto que ambos operando estn en memoria).
ADD/ADC reg, reg

Ejemplo:

ADD/ADC mem, reg

; J = 34+f

ADD/ADC reg, mem

MOV AX, F

ADD/ADC reg, inmediato

ADD AX, 34

ADD/ADC mem, inmediato

MOV J, AX

SUB y SBB realizan la resta y la resta con acarreo, respectivamente, de dos operandos y guardan el
resultado en el primero de ellos. Admiten todos los modos de direccionamiento, excepto dos operando en
memoria.
SUB/SBB reg, reg

Ejemplo:

SUB/SBB mem, reg

; J = F-34

SUB/SBB reg, mem

MOV AX, F

SUB/SBB reg, inmediato

SUB AX, 34

SUB/SBB mem, inmediato

MOV J, AX

Estas instrucciones afectan a los bits OF, SF, ZF, AF, PF, CF del registro de estado.
DAS realizan la correccin BCD empaquetado del resultado de una resta en AL. Actan de manera
similar a la instruccin de ajuste de la suma.
NEG realiza la operacin aritmtica de negado de un operando y guarda el resultado en el mismo
operando. Admite todos los tipos de direccionamiento, excepto inmediato.
NEG reg
NEG mem
La operacin que realiza es: 0 operando.
Estas instrucciones afectan a los bits OF, SF, ZF, AF, PF, CF del registro de estado.
DAA realizan la correccin BCD empaquetado del resultado de una suma en AL.

17 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

El 8086/88 realiza las sumas asumiendo que los operados son ambos valores binarios, de manera
que se suman dos valores codificados en BCD empaquetado el resultado puede no ser un valor vlido en
este formato:
Instrucciones Generales
Mnemnico/Operando

Descripcin

Instrucciones de Adicin
aaa

Ajuste ASCII para adicin

adc destino, fuente

Suma con acarreo

add destino, fuente

Suma bytes o palabras

daa

Ajuste decimal para adicin

inc destino

Incremento

Instrucciones de Substraccin
aas

Ajuste ASCII para substraccin

cmp destino, fuente

Compara

Das

Ajuste decimal para substraccin

dec destino

Decrementa byte o palabra

neg destino

Negar (complemento a dos)

sbb destino, fuente

Substrae

sub destino, fuente

Substrae

Instrucciones de Multiplicacin
Aam

Ajuste ASCII para multiplicacin

imul fuente

Multiplicacin con enteros

mul fuente

Multiplicar

Instrucciones de Divisin
Aad

Ajuste ASCII para divisin

Cbw

Convierte bytes a palabras

Cwd

Convierte palabras a dobles palabras

div fuente

Divide

idiv fuente

Divisin de Enteros

Existen dos formas de incrementar el poder matemtico del lenguaje ensamblador. Primero, se puede
comparar) o escribir) un paquete de funciones matemticas con rutinas que implementan las funciones
matemticas de alto nivel que se necesitan. Otra solucin es comprar un chip coprocesador matemtico,
18 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

aunque esto puede ser muy caro. Como una tercera opcin , y probablemente la mejor, es utilizar un
lenguaje de alto nivel como Pascal o C para codificar las expresiones de punto flotante. Estos lenguajes
vienen con un detector automtico de presencia de coprocesador matemtico o cambiar a un software
emulador para sistemas que carezcan del chip opcional. Despus de escribir el programa, se puede
combinar el cdigo compilado de alto nivel, con nuestro programa en lenguaje ensamblador. Ya que el
coprocesador matemtico tiene requerimientos estrictos acerca de los datos y formatos de instrucciones,
la mayora de los compiladores generan cdigo mquina optimizado, y hay poca ventaja en escribir
expresiones de punto flotante directamente en lenguaje ensamblador.

2.10 Manipulacin de la pila


Una de las funciones de la pila del sistema es la de salvaguardar (conservar) datos (la otra es
la de salvaguardar las direcciones de retorno de las llamadas a subrutinas):
PUSH introducir
POP extraer
PUSHF introducir indicadores
La pila es un grupo de lo calidades de memoria que se reservan con la finalidad de proporcionar un
espacio para el almacenamiento temporal de informacin. La pila de los programas es del tipo LIFO (Last
In First Out, Ultimo en entrar, Primero en salir).
Para controlar la pila el microprocesador cuenta con dos instrucciones bsicas:
Push (Meter) y Pop (sacar).
El formato de estas instrucciones es el siguiente:
Push operando y Pop operando
Cuando se ejecuta la instruccin Push, el contenido del operando se almacena en la ltima posicin de la
pila.
Por ejemplo:
Si AX se carga previamente con el valor 5, un a instruccin Pus h AX almacenara el valor 5 en la ultima
posicin de la pila.
Por otro lado la instruccin Pop saca el ltimo dato almacenado en la pila y lo coloca en el operando.
Siguiendo el ejemplo anterior, la instruccin Pop BX obtendra el nmero 5 y lo almacenara en el registro
BX
Uso del Stack
El Stack es un segmento especial de memoria que opera en conjuncin con varias instrucciones del
8086. Como con todos los segmentos, la localizacin del stack y su tamao (hasta 64K) dependen del
programador determinarlo. En los programas de lenguaje ensamblador, la forma ms fcil de crear un
stack es usar la directiva STACK. Un stack tiene tres propsitos principales:
19 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

- Preservar valores de los registros temporalmente.


- Almacenar direcciones al las cuales las rutinas regresaran.
- Almacenar variables dinmicas.
El ltimo de stos viene a jugar ms frecuentemente en los lenguajes de programacin de alto nivel,
donde las variables son pasadas va stack hacia y desde, funciones y procedimientos. Similarmente,
variables temporales pueden se almacenadas en el stack. Estos usos son raros en la programacin pura
en lenguaje ensamblador, aunque se puede almacenar variables de memoria de sta manera si se desea.
Como opera el Stack
Conceptualmente, un stack es como una torre de platos en una cocina de un restaurante. El plato
de encima de la pila est fcilmente disponible. Pero para tomar los platos de abajo, otros platos de
encima primeramente deben ser removidos. Colocar un nuevo plato en la pila es llamado push, Remover
un plato de la parte superior de la pila, es llamado pop. Ya que de la manera en que el ltimo plato
colocado en el stack es el primer plato disponible a ser removido, ste tipo de stack es llamado stack LIFO
o UEPS, por "Last-In-First-Out".
No como los platos, los valores en la computadora no pueden moverse fsicamente hacia arriba y
hacia abajo. Por lo tanto, para simular la accin de un movimiento de los valores del stack, requiere de
utilizar registros para localizar la direccin base del Stack y la direccin OFFSET del plato superior - que
es, la localidad donde el valor superior de la pila es almacenado. En programacin 8086, el registro
segmento ss direcciona al segmento de stack base. El registro sp direcciona el desplazamiento OFFSET
tope del Stack en dicho segmento.
Manipulacin del Stack
El punto principal de la manipulacin del stack es simple: Para cada push en un programa, debe
haber su correspondiente pop. Igualando pops y pushes mantiene el stack en forma correcta- en otras
palabras, en sincronizacin con la habilidad del programa para almacenar y recuperar el valor que necesita.
Considere lo que sucede si se falla en ejecutar un correspondiente pop para cada push. En ste
caso, pushes futuros causarn que el stack crezca mas y ms largo, eventualmente rebasando el espacio
segmento permitido para el programa. Este grave error normalmente termina en un crash sobre
escribiendo otras reas de memoria por el puntero del stack. Un error similar ocurre si se ejecutan ms
pops que pushes, causando un bajoflujo y tambin resultar en un crash.
Una forma de prevenir stos problemas es escribir los programas en pequeos mdulos, o
subrutinas. En cada modulo, realizar un push con todos los registros que se utilizarn. Entonces, justo
antes de que sta seccin de cdigo termine, realizar un pop a los mismos registros retirndolos pero en
orden inverso.
push

ax

push

bx

push

cx

; ------ Programa objetivo


pop

cx
20 | P g i n a

JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

pop

bx

pop

ax

En ste ejemplo, los registros ax, bx y cx, son posiblemente utilizados; por lo tanto, stos registros
son almacenados en el stack para preservar los valores de los registros. Por ltimo, los valores son
retirados (pop) del stack en orden inverso, restaurando los valores originales de los registros y
manteniendo el stack en sincrona.
PUSH y POP realizan las operaciones de apilado y desapilado en la pila del procesador
respectivamente, admiten todos los tipos de direccionamiento (excepto inmediato). Los operandos deben
ser siempre de 16 bits.

2.11 Obtencin de cadena con representacin decimal


En las computadoras el formato natural para la aritmtica es el binario.
La representacin del nmero decimal 1; 527 en los tres formatos decimales:
ASCI I 31 35 32 37 (cuatro bytes)
BCD desempaquetado 01 05 02 07 (cuatro by tes )
BCD empaquetado 15 27 (dos bytes)
El procesador realiza aritmtica en valores ASCI I y BCD un dgito a la vez. Ya que los datos son
ingresados desde un teclado significan que estn en formato ASCI I, la representacin en memoria de un
nmero decimal ingresado tal como 1234 es
31323334H. Per o realizar aritmtica sobre tal nmero implica un tratamiento especial. Las instrucciones
AAA y AAS realizan aritmtica de manera directa sobre nmeros ASCCI
Procesos de Control
NOP (Operacin nula).
Sintaxis: NOP
Indicadores:

Realiza una operacin nula, es decir, el microprocesador descodifica la instruccin y pasa a la


siguiente. Realmente se trata de la instruccin XCHG
AX,AX.
ESC (Salida a un coprocesador).
Sintaxis: ESC cdigo operacin, origen
Indicadores:

Se utiliza en combinacin con procesadores externos, tales como los coprocesadores de coma
flotante o de E/S, y abre al dispositivo externo el acceso a las direcciones y operando requeridos. Al
mnemnico ESC le siguen los cdigos de operacin apropiados para el coprocesador as como la
instruccin y la direccin del operando necesario.
21 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Ejemplo: ESC 21,AX


HLT (Parada hasta interrupcin o reset).
Sintaxis:
HLT
Indicadores:

El procesador se detiene hasta que se restaura el sistema o se recibe una interrupcin. Como en
los PC se producen normalmente 18,2 interrupciones de tipo 8 por segundo (del temporizador)
algunos programadores utilizan HLTpara hacer pausas y bucles de retardo. Sin embargo el mtodo no
es preciso y puede fallar con ciertos controladores
de memoria.
LOCK (Bloquea los buses).
Sintaxis: LOCK
Indicadores:

Es una instruccin que se utiliza en aplicaciones de recursos compartidos


para asegurar que no accede simultneamente a la memoria ms de un procesador. Cuando una
instruccin va precedida por LOCK, el procesador bloquea inmediatamente el bus, introduciendo una
seal por la patilla LOCK.
WAIT (Espera).
Sintaxis: WAIT
Indicadores:

Provoca la espera del procesador hasta que se detecta una seal en la patilla
TEST. Ocurre, por ejemplo, cuando el coprocesador ha terminado una operacin e indica su finalizacin.
Suele preceder a ESC para sincronizar las acciones del procesador y coprocesador.
XLAT (traduccin).
Sintaxis: XLAT tabla
Indicadores:
La instruccin XLAT tabla carga en el registro AL el contenido de la posicin [BX][AL], en donde el
registro BX ha de apuntar al comienzo de una tabla. Dicho de otra manera, AL hace de ndice de la
tabla y de almacn destino del contenido de la tabla.
Por ejemplo, el siguiente programa:
DATOS SEGMENT
TABLA DB 2, 3, 5, 8, 16, 23
DATOS ENDS
22 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

CODIGO SEGMENT
MOVE BX, OFFSET TABLA; Inicializa BX con la direccin donde comienza la tabla
MOVE AL, 5
XLAT TABLA
CODIGO ENDS Hace que al final el contenido de AL sea 16 ya que es el quinto elemento de la tabla y AL
antes de XLAT TABLA contena el valor 5.
Otro ejemplo:
MOV BX, OFFSET TABLA
MOV AL, 4
XLAT TABLA Para finalizar con las instrucciones de transferencia veremos un grupo de tres
instrucciones:
LEA o cargar direccin efectiva
LDS o cargar el puntero en DS
LES o cargar el puntero en ES denominadas de transferencia de direcciones.
LEA (carga direccin efectiva).
Sintaxis:
LEA destino, origen Indicadores:
Transfiere el desplazamiento del operando fuente al operando destino.
Otras instrucciones pueden a continuacin utilizar el registro como desplazamiento para acceder a los
datos que constituyen el objetivo. El operando destino no puede ser un registro de segmento. En
general, esta instruccin es equivalente a MOV destino, OFFSET fuentey de hecho los buenos
ensambladores (TASM) la codifican como MOV para economizar un byte de memoria. Sin embargo,
LEA es en algunos casos ms potente que MOV al permitir indicar registros de ndice y
desplazamiento para calcular el offset: En el ejemplo de arriba, el valor depositado en DX es el OFFSET
de la etiqueta DATOS ms el registro SI. Estas son las instrucciones equivalentes a estas dos:
MOV DX, OFFSET DATOS
ADD DX, SI
LDS (carga un puntero utilizando DS).
Sintaxis:
LDS destino, origen
Indicadores:

Traslada un puntero de 32 bits (direccin completa de memoria compuesta por segmento y


desplazamiento), al destino indicado y a DS. A partir de la direccin indicada por el operando origen,
el procesador toma 4 bytes de la memoria: con los dos primeros forma una palabra que deposita
en destino y, con los otros dos, otra en DS.
Ejemplo:
PUNT DD 12345678H
LDS SI, PUNT
Como resultado de esta instruccin, en DS: SI se hace referencia a la posicin de memoria 1234h:
5678h; 'DD' sirve para definir una variable larga de 4 bytes (denominada PUNT en el ejemplo).
LES (carga un puntero utilizando ES).
23 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Sintaxis:
LES destino, origen. Esta instruccin es anloga a LDS, pero utilizando ES en lugar de D.

2.12 nstrucciones lgicas


Son operaciones bit a bit que trabajan sobre octetos o palabras completas: NOT negacin , AND
producto lgico (), OR suma lgica y suma lgica exclusive.
Se cuenta con un grupo de instrucciones lgicas que operan a nivel de bit, estas instrucciones son: AND,
OR, XOR y NOT.Las instrucciones que se enlistan antes requieren dos operando, a excepcin de la
operacin NOT que slo requiere uno.
La operacin OR establece el resultado a 1 si cualquiera de los dos operandos es 1, de lo contrario el
resultado ser 0. La instruccin XOR coloca en 0 el resultado si los operando son iguales, de lo contrario
establece 1.
Finalmente, la instruccin NOT cambia de estado todos los bits del operando, los unos por ceros y los
ceros por unos. La principal aplicacin de estas instrucciones es el enmascaramiento de informacin. La
operacin AND nos permite poner a cero cualquier bit de un dato; la operacin OR nos permite poner a
uno cualquier bit de un dato y la operacin XOR permite borrar el contenido de algn registro o lo calidad
de memoria, as como para negar algn bit.
AND: FUNCION LOGICA Y
OR: FUNCION LOGICA O
XOR: FUNCION LOGICA O EXCLUSIVO
TEST: FUNCION LOGICA Y SIN RESULTADO
Los operadores lgicos permiten combinar expresiones simples en expresiones ms complejas. Al
escribir expresiones en las que se combinan varias comparaciones mediante lgicos es conveniente
utilizar parntesis, aunque en muchos casos no sean necesarios porque las comparaciones tienen
precedencia sobre los operadores lgicos.

2.13 Desplazamiento y rotacin


Las instrucciones para rotacin son cuatro y nos permiten mover de forma cclica los bits que forman parte
de un registro o lo calidad de memoria, estas instrucciones son ROL, ROR, RCL, RCR.
ROL y ROR funcionan de forma muy semejante; al ejecutar una instruccin ROL, el bit ms significativo
del dato es desplazado hacia la bandera de acarreo y tambin hacia la posicin del bit memos significativo,
por lo cual todos los bits restantes son rotados o movidos hacia la izquierda.
La instruccin ROR funciona igual, slo que sta trabaja hacia la derecha.
Las instrucciones RCL y RCR permiten la rotacin de los bits de una localidad de memoria o registro,
considerando tambin el contenido de la bandera de acarreo. En el caso de RCL, el bit ms significativo
pasa hacia la bandera de acarreo, el bit que se encontraba en la bandera de acarreo pasa al bit menos
significativo y finalmente los bits restantes son rotados hacia la izquierda. La instruccin RCR funciona
igual, p ero aplica su rotacin hacia la derecha
24 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Las instrucciones de desplazamiento son cuatro: shl, shr, sar y sal; y su objetivo es desplazar los bits
de un operando un determinado nmero de posiciones a la izquierda o a la derecha. La estructura de los
operandos manejados por estas instrucciones y su significado es idntico para las cuatro instrucciones.
Todas
ellas
trabajan
sobre
un operando
fuente
y
un
operando
destino.
El Operando Destino contiene el dato que va a ser objeto del desplazamiento y debe ser del tipo, registro o
memoria. El Operando Fuente determina la cantidad de posiciones que va a ser desplazado el operando
destino. El operando fuente slo puede ser un dato inmediato de 8 bits (I8) o bien el registro CL.
SHL
(Shift
Left
=
desplazamiento
a
la
izquierda)
Se desplazan a la izquierda los bits del operando destino tantas posiciones como indique el operando
fuente. El desplazamiento de una posicin se realiza de la siguiente forma: el bit de mayor peso del
operando se desplaza al bit CF del registro de estado, el resto de los bits se desplazan una posicin hacia
la izquierda, y la posicin de menor peso se rellena con un 0. Este proceso se representa en la figura
siguiente.

SHR

(Shift

Right

desplazamiento

la

derecha)

La instruccin shr funciona de la misma forma que shl, pero desplazando los bits a la derecha en lugar de
a la izquierda, tal y como se muestra en la figura siguiente.

SAR

(Shift

Arithmetic

Right

desplazamiento

aritmtico

la

derecha)

Esta instruccin desplaza los bits del operando destino a la derecha tantos bits como indique el operando
fuente. Esta forma de funcionamiento es similar a la de la instruccin shr; sin embargo, ambas
instrucciones se diferencian en que sar, en vez introducir ceros por la izquierda del operando, replica el bit
de mayor peso (bit de signo) en cada desplazamiento. esquemticamente, la instruccin sar trabaja de la
siguiente forma:

25 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

El desplazamiento a la derecha realizado por la instruccin sar recibe el nombre de aritmtico porque
sirve
para
dividir
un
operando
entre
una
potencia
entera
de
2.
El desplazamiento aritmtico a la derecha de un operando (considerado con signo) n posiciones equivale a
la divisin entera del operando entre 2n. SAL (Shift Arithmetic Left = desplazamiento aritmtico a la
izquierda)
El objetivo de un desplazamiento aritmtico a la izquierda es multiplicar un operando, interpretado con
signo, por una potencia de 2.

Para llevar a cabo este tipo de desplazamiento, hay que desplazar los bits del operando hacia la
izquierda introduciendo ceros por su derecha. En realidad, este tipo de desplazamiento es idntico al
llevado a cabo por la instruccin shl; por tanto, sal y shl son, de hecho, la misma instruccin y se codifican
con el mismo cdigo mquina.

2.14 Obtencin de una cadena con la representacin


hexadecimal
Procesos de Control
NOP (Operacin nula).
Sintaxis:
NOP
Indicadores:
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Realiza una operacin nula, es decir, el microprocesador decodifica la instruccin y pasa
a la siguiente. Realmente se trata de la instruccin XCHG AX,AX.
ESC (Salida a un coprocesador).
26 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

Sintaxis:
ESC cdigo_operacin, origen
Indicadores:
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Se utiliza en combinacin con procesadores externos, tales como los coprocesadores de coma
flotante o de E/S, y abre al dispositivo externo el acceso a las direcciones y operandos requeridos. Al
mnemnico ESC le siguen los cdigos de operacin apropiados para el coprocesador as como la
instruccin y la direccin del operando necesario.
Ejemplo:
ESC 21,AX
HLT (Parada hasta interrupcin o reset).
Sintaxis:
HLT
Indicadores:
F

IF

TF

SF

ZF

AF

PF

F
F
El procesador se detiene hasta que se restaura el sistema o se recibe una interrupcin. Como en los
PC se producen normalmente 18,2 interrupciones de tipo 8 por segundo (del temporizador) algunos
programadores utilizan HLT para hacer pausas y bucles de retardo. Sin embargo, el mtodo no es preciso
y puede fallar con ciertos controladores de memoria.
LOCK (Bloquea los buses).
Sintaxis:
LOCK
Indicadores:
OF
-

DF
-

IF
-

TF
-

SF
-

ZF
-

AF
-

PF
-

CF
-

Es una instruccin que se utiliza en aplicaciones de recursos compartidos para asegurar que no
accede simultneamente a la memoria ms de un procesador. Cuando una instruccin va precedida por
LOCK, el procesador bloquea inmediatamente el bus, introduciendo una seal por la patilla LOCK.
WAIT (Espera).
Sintaxis:
27 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

WAIT
Indicadores:
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Provoca la espera del procesador hasta que se detecta una seal en la patilla TEST. Ocurre, por
ejemplo, cuando el coprocesador ha terminado una operacin e indica su finalizacin. Suele preceder a
ESC para sincronizar las acciones del procesador y coprocesador.
XLAT (traduccin).
Sintaxis:
XLAT tabla
Indicadores:
OF
DF
IF
TF
SF
ZF
AF
PF
CF
La instruccin XLAT tabla carga en el registro AL el contenido de la posicin [BX][AL], en donde el
registro BX ha de apuntar al comienzo de una tabla. Dicho de otra manera, AL hace de ndice de la tabla y
de almacn destino del contenido de la tabla.
Ejemplo:
MOV BX, OFFSET TABLA
MOV AL, 4
XLAT TABLA
Para finalizar con las instrucciones de transferencia veremos un grupo de tres instrucciones:
LEA o cargar direccin efectiva
LDS o cargar el puntero en DS
LES o cargar el puntero en ES
Denominadas de transferencia de direcciones.
LEA (carga direccin efectiva).
Sintaxis:
LEA destino, origen
Indicadores:
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Transfiere el desplazamiento del operando fuente al operando destino. Otras instrucciones pueden a
continuacin utilizar el registro como desplazamiento para acceder a los datos que constituyen el objetivo.
28 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

El operando destino no puede ser un registro de segmento. En general, esta instruccin es equivalente a
MOV destino, OFFSET fuentey de hecho los buenos ensambladores (TASM) la codifican como MOV para
economizar un byte de memoria. Sin embargo, LEA es en algunos casos ms potente que MOV al permitir
indicar registros de ndice y desplazamiento para calcular el offset:
En el ejemplo de arriba, el valor depositado en DX es el OFFSET de la etiqueta DATO S ms el
registro SI. Esa sola instruccin es equivalente a estas dos:
MOV DX, OFFSET DATOS
ADD DX, SI
LDS (carga un puntero utilizando DS).
Sintaxis:
LDS destino, origen
Indicadores:
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Traslada un puntero de 32 bits (direccin completa de memoria compuesta por segmento y
desplazamiento), al destino indicado y a DS. A partir de la direccin indicada por el operando origen, el
procesador toma 4 bytes de la memoria: con los dos primeros forma una palabra que deposita endestino y,
con los otros dos, otra en DS.
Ejemplo:
PUNT DD 12345678H
LDS SI, PUNT
Como resultado de esta instruccin, en DS:SI se hace referencia a la posicin de memoria
1234h:5678h; 'DD' sirve para definir una variable larga de 4 bytes (denominada PUNT en el ejemplo).
LES (carga un puntero utilizando ES).
Sintaxis:
LES destino, origen
Esta instruccin es anloga a LDS, pero utilizando ES en lugar de D

2.15 Captura y almacenamiento de datos


Numricos
MODELOS DE MEMORIA.
Los modelos de memoria constituyen las diversas maneras de acceder a la memoria por parte de
los compiladores de C. En el caso del Turbo C se pueden distinguir los siguientes:
29 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

TINY: Se emplea en los programas donde es preciso apurar el consumo de memoria hasta el ltimo
byte. Los 4 registros de segmento (CS, DS, ES, SS) estn asignados a la misma direccin, por lo que
existe un total de 64 Kb donde se mezclan cdigo, datos y pila. Los programas de este tipo pueden
convertirse a formato COM.
SMALL: Se utiliza en aplicaciones pequeas. Los segmentos de cdigo y datos son diferentes y no se
solapan. Por ello, hay 64 kb para cdigo y otros 64 Kb a repartir entre datos y pila.
MEDIUM: Este modelo es ideal para programas largos que no manejan demasiados datos. Se utilizan
punteros largos para el cdigo (que puede extenderse hasta 1 Mb) y cortos para los datos: la pila y los
datos juntos no pueden exceder de 64 Kb.
COMPACT: Al contrario que el anterior, este modelo es el apropiado para los programas pequeos
que emplean muchos datos. Por ello, el programa no puede exceder de 64 Kb aunque los datos que
controla pueden alcanzar el Mb, ya que los punteros de datos son de tipo far por defecto.
LARGE: Empleado en las aplicaciones grandes y tambin por los programadores de sistemas que no
tienen paciencia para andar forzando continuamente el tipo de los punteros (para rebasar el lmite de 64
Kb). Tanto los datos como el cdigo pueden alcanzar el Mb, aunque no se admite que los datos estticos
ocupen ms de 64 Kb. Este modo es el que menos problemas da para manejar la memoria, no siendo
quiz tan lento y pesado como indica el fabricante.
HUGE: Similar al anterior, pero con algunas ventajas: por un lado, todos los punteros son
normalizados automticamente y se admiten datos estticos de ms de 64 Kb. Por otro, y gracias a esto
ltimo, es factible manipular bloques de datos de ms de 64 Kb cada uno, ya que los segmentos de los
punteros se actualizan correctamente. Sin embargo, este modelo es el ms costoso en tiempo de
ejecucin de los programas.
Usando la pila
Una seccin de la memoria del programa es reservado para el uso de una pila. La Intel 80386 y
procesadores superiores contienen un registro llamado puntero a la pila, esp, el cual almacena la direccin
del tope de la pila, la figura 1 de abajo muestra 3 valores enteros, 49, 30 y 72, almacenados en la pila(cada
entero ocupando 4 bytes) con el registro esp apuntando a la direccin del tope de la pila.
A diferencia de una pila creciendo hacia arriba, en las mquinas intel crecen hacia abajo. En la Figura
2 muestra las capas de la pila despus de la ejecucin pushl $15. El punter de la pila es decrementado de
cuatro en cuatro y el nmero 15 es almacenando como lugares de 4 bytes, 1988, 1989, 1990 y 1991

30 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

2.16 Operaciones bsicas sobre archivos de disco


Funciones que realiza
Vamos a sealar las funciones que debe realizar un computador para ejecutar trabajos de
entrada/salida:
- Direccionamiento o seleccin del dispositivo que debe llevar a cabo la operacin de E/S.
- Transferencia de los datos entre el procesador y el dispositivo (en uno u otro sentido).
- Sincronizacin y coordinacin de las operaciones.
Esta ltima funcin es necesaria debido a la deferencia de velocidades entre los dispositivos y la CPU
y a la independencia que debe existir entre los perifricos y la CPU (por ejemplo, suelen tener relojes
diferentes).
Se define una transferencia elemental de informacin como la transmisin de una sola unidad de
informacin (normalmente un byte) entre el procesador y el perifrico o viceversa. Para efectuar una
transferencia elemental de informacin son precisas las siguientes funciones: Establecimiento de una
comunicacin fsica entre el procesador y el perifrico para la transmisin de la unidad de informacin.
Control de los perifricos, en que se incluyen operaciones como prueba y modificacin del estado del
perifrico. Para realizar estas funciones la CPU gestionar las lneas de control necesarias.
Definiremos una operacin de E/S como el conjunto de acciones necesarias para la transferencia de
un conjunto de datos (es decir, una transferencia completa de datos). Para la realizacin de una operacin
de E/S se deben efectuar las siguientes funciones: Recuento de las unidades de informacin
transferidas (normalmente bytes) para reconocer el fin de operacin. Sincronizacin de velocidad entre
la CPU y el perifrico. Deteccin de errores (e incluso correccin) mediante la utilizacin de los cdigos
necesarios (bits de paridad, cdigos de redundancia cclica, etc.) Almacenamiento temporal de la
informacin. Es ms eficiente utilizar un buffer temporal especfico para las operaciones de E/S que
utilizan el rea de datos del programa. Conversin de cdigos, conversin serie/paralelo, etc.
Dispositivos externos
Una de las funciones bsicas del ordenador es comunicarse con los dispositivos exteriores, es decir,
el ordenador debe ser capaz de enviar y recibir datos desde este dispositivo. Sin esta funcin, el
ordenador no sera operativo porque sus clculos no seran visibles desde el exterior.
Existe una gran variedad de dispositivos que pueden comunicarse con un ordenador, desde los
dispositivos clsicos (terminales, impresoras, discos, cintas, etc.) hasta convertidores A/D y D/A para
aplicaciones de medida y control de procesos, De todos los posibles perifricos, algunos son de lectura,
otros de escritura y otros de lectura y escritura (es importante resaltar que este hecho siempre se mira
31 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

desde el punto de vista del proceso). Por otra parte, existen perifricos de almacenamiento tambin
llamados memorias auxiliares o masivas.
La mayora de los perifricos estn compuestos por una parte mecnica y otra parte electrnica.
Estas partes suelen separarse claramente para dar una mayor modularidad. A la componente electrnica
del perifrico se le suele denominar controlador del dispositivo o, tambin, adaptador del dispositivo. Si el
dispositivo no tiene parte mecnica (como, por ejemplo, la pantalla de un terminal), el controlador estar
formado por la parte digital del circuito. Frecuentemente los controladores de los dispositivos estn
alojados en una placa de circuito impreso diferenciada del resto del perifrico. En este caso es bastante
habitual que un mismo controlador pueda dar servicio a dispositivos de caractersticas similares.
El principal problema planteado por los perifricos es su gran variedad que tambin afecta a las
velocidades de transmisin. Por tanto, el mayor inconveniente que encontramos en los perifricos es la
diferencia entre sus velocidades de transmisin y la diferencia entre stas y la velocidad de operacin del
ordenador.

32 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

CONCLUSIN
Se puede observar que un ensamblador es un lenguaje de bajo nivel para
las computadoras el cual es difcil de entender ya que utiliza de manera
simblica los nmeros en cdigo binario, en un lenguaje ensamblador se
realizan los ciclos numricos por medio de bucles y este es un es un grupo
de instrucciones que se ejecutan cclicamente N veces.

Una captura bsica de cadenas se realiza por medio de instrucciones y


una cadena es un conjunto de localidades de memoria consecutivas que
se reserva bajo el nombre de una variable; esta trabaja mediantes
instrucciones LCD. Para realizar una comparacin y prueba se utiliza CMP
para comparar este compara si dos valor es son iguales o diferentes.

Las instrucciones se realizan por medios de saltos las cuales se utilizan


junto con las de comparacin y prueba esto para poder determinar un flujo
de diagrama. Tambin existen ciclos condicionales los cuales son
instrucciones, una instruccin de salto condicional, revisa si ocurre alguna
situacin para poder transferir el control del programa a otra seccin.

33 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

BIBLIOGRAFA
Martnez, Jaime Garza JAOR. Organizacin y arquitectura de computadoras. Estado de
Mxico, Mxico.: Pretince Hall; 2000.
Canal, Ramn; Elias, Eduard; Gonzlez, Jos; Marcuello, Pedro; Molina,Carlos, Pea,
M.A.; Valero, Miguel. Estructura y Diseo de Computadores .Barcelona, 2000. Revert.
ISBN: 84-291-2619-8.
Blanco Viejo, Cecilio.Electrnica Digital. Universidad de Oviedo. ISBN: 84-8317-3727.http://books.google.com.mx/books?id=myOXwYAhOwgC&pg=PA209&dq=MEMORIA
+RAM&hl=en&s
Gil, Jos; Pealver, Lourdes; Pont, Ana; Robles, Antonio. Estructura de computadores
(vol I); Un recorrido por la Unidad Central de Pro cesos. Universidad Politcnica de
Valencia. ISBN: 84-7721-415-8.
Garca, Manuel; Lpez, Jos. Apuntes de Organizacin de Computadoras.Ediciones de
la Universidad de Oviedo. 2007. IS BN: 978-84-8317-606-1.
Tanenbaum, Andrew S. Sistemas Operativos Modernos; Segunda Edicin.Pearson
Educacin. Mx ico, 2003. ISBN: 970-26-0315-3. Pg.: 976.
http://www.infor.uva.es /cllamas/2/2-2.pdf
Apuntes de Modos de Direccionamiento. Departamento de Informtica, Universidad de
Valladolid. www.infor.uva.es/~bastida/OC/mo d os .pd.

34 | P g i n a
JAZMN MONTIEL RAMREZ

ISMA-VI

UNIDAD II

También podría gustarte