Está en la página 1de 13

Alumno

Juan de Dios Chavelas Aldrete

Maestro
Marco Antonio Salas Aceves

Materia
Microprocesadores

Fecha
06-02-21
Modos de direccionamiento
Se les llama modos de direccionamiento a las distintas formas de combinar los operandos
según el acceso que se hace a memoria. Dicho de otra manera, un modo de
direccionamiento será una forma de parámetro para las instrucciones. Una instrucción que
lleve un parámetro, por lo tanto, usará un modo de direccionamiento, que dependerá de
cómo direccionará al parámetro; una instrucción de dos parámetros combinará dos modos
de direccionamiento.
Direccionamiento implícito
Depende solamente de la instrucción, es decir, la instrucción no lleva parámetros.
Particularmente en instrucciones que no accesan memoria, o bien que tienen una forma
específica de accesarla.
Ejemplos: PUSHF, POPF, NOP
Modo registro
Usa solamente registros como operandos Es el más rápido, pues minimiza los recursos
necesarios (toda la información fluye dentro del EU del CPU)
Ejemplo:
MOV AX, BX
Ejemplo Simuproc
MSG imprimir lo ingresado 5 veces
LDT ingrese un numero
STA cx, 01a
MOV cx, 01b
MOV ax, 01a
MSG "+++++"
EAP
LOOP 005
HLT

#01b
0101
Modo inmediato
Tiene dos operandos: un registro y una constante que se usa por su valor. El valor
constante no se tiene que buscar en memoria, pues ya se obtuvo al hacer el “fetch” de la
instrucción.
Ejemplo:
MOV AH, 9
Modo directo
Uno de los operandos involucra una localidad específica de memoria El valor constante se
tiene que buscar en memoria, en la localidad especificada. Es más lento que los
anteriores, pero es el más rápido para ir a memoria, pues ya “sabe” la localidad, la toma
de la instrucción y no la tiene que calcular.
Ejemplo:
MOV AH, [0000]
MOV AH, Variable
Estas dos instrucciones serían equivalentes, si Variable está, por ejemplo, en la localidad
0 de memoria. En la forma primitiva del lenguaje de máquina, como el primer ejemplo, se
tiene que indicar “mover a AH el contenido (indicado por los corchetes), de la localidad 0
de los datos (lo de los datos es implícito). El lenguaje Ensamblador, sin embargo, nos
permite la abstracción del uso de variables, pero como una variable tiene una localidad
determinada en memoria, para el procesador funciona igual. La única diferencia consiste
en que el programador no tiene que preocuparse por la dirección, ese manejo lo hace
automáticamente el Ensamblador.
#SimuProc 1.4.2.0
MSG Sumar la cantidad 4 a dos numeros diferentes
LDT Introduzca el primer numero
PUSH AX
LDT Introduzca el segundo numero
PUSH AX
POP BX
POP AX
INC AX
INC BX
INC AX
INC BX
INC AX
INC BX
INC AX
INC BX
MSG El resultado de los dos numeros es:
EAP
XAB
EAP
HLT
Modo indirecto
Se usan los registros SI, DI como apuntadores El operando indica una localidad de
memoria, cuya dirección (sólo la parte desplazamiento) está en SI o DI. Es más lento que
los anteriores, pues tiene que “calcular” la localidad
Ejemplos:
MOV AL, [SI]
MOV BL, ES: [SI] ; Aquí se dice que se usa un “segment override”, donde se indica que
en vez de usar el segmento de datos por defecto, se use en su lugar como referencia el
segmento extra.

#SimuProc 1.4.2.0
MSG Sumar la cantidad 4 a dos numeros diferentes
LDT Introduzca el primer numero
ADD 20
STA 21
LDT Introduzca el segundo numero
ADD 20
STA 22
MSG El resultado de los dos numeros es:
LDA 21
EAP
LDA 22
EAP
HLT

#20
100
Modo indexado de base
Formato:
[
BX o BP
+ SI o DI (opcionales)
+ constante (opcional)
]
BX o BP indica una localidad base de la memoria A partir de BX o BP, se puede tener un
desplazamiento variable y uno constante La diferencia es el segmento sobre el que
trabajan por defecto:
BX por defecto en el segmento de datos
BP por defecto en el segmento de pila.
Ejemplos:
MOV AX, [BX]
MOV DX, [BX+2]
MOV CX, [BX+DI]
MOV DL, [BX+SI+3]

Instrucciones de transferencia de datos


Lenguaje de Manipulación de Datos (Data Manipulation Language, DML) es un idioma
proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de
la misma llevar a cabo las tareas de consulta o modificación de los datos contenidos en
las Bases de Datos del Sistema Gestor de Bases de Datos.
El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar
y manipular datos en una base de datos relacional. Otros ejemplos de DML son los
usados por bases de datos IMS/DL1, CODASYL u otras.
PUSH/POP
PUSH y POP son instrucciones importantes utilizadas para empujar o sacar datos del
segmento de pila. El microprocesador 8088 posee la instrucción PUSH y POP puede
operar sobre registros, registro/memoria, registro de segmento y banderas. En la
operación con registros, siempre opera sobre registros de 16 bits para transferir la
información al segmento de pila. En registro/memoria almacena el contenido de 16 bits de
alguna localidad de memoria (2 localidades) al segmento de pila. Cuando se opera sobre
registros de segmento es permitido transferir cualquier registro de segmento al segmento
de pila pero el segmento de código (CS) no puede ser recuperado de la pila. Cuando las
instrucciones PUSH y POP operan sobre el registro de banderas se puede transferir o
recuperar el estado de este registro.
PUSH
La instrucción PUSH siempre transfiere 2 bytes de información a la pila. Cuando un dato
es metido a la pila, el primer byte (más significativo) es almacenado en la pila en la
localidad direccionada por SP-1. El segundo byte (menos significativo) es almacenado en
la pila en la localidad direccionada por SP-2. Después de que el dato se ha empujado a la
pila, el registro SP es decrementado en 2. La Figura 1 muestra la ejecución de la
instrucción PUSH AX, la cual transfiere el contenido de AX en la pila ([SP-1]=AH, [SP-
2]=AL y SP=SP-2).
POP
La instrucción POP realiza lo inverso a la instrucción PUSH. POP remueve datos de la
pila a un registro dado. Supóngase que la instrucción POP BX es ejecutada. El primer
byte del dato es removido de la pila, esto de la localidad direccionada por SP y es
almacenado en registro BL. El segundo byte es removido de la localidad dada por SP+1 y
colocado en el registro BH. Después de que ambos datos fueron extraídos de la pila, el
apuntador de pila (SP) es incrementado en 2. La figura 2 muestra la ejecución de la
instrucción POP BX.

PUSHF
La instrucción PUSHF copia el contenido del registro de bandera a la pila. Al igual que la
instrucción PUSH, PUSHF almacena la parte más significativa del registro de banderas en
la localidad SP-1 y la menos significativa en la localidad SP-2. Después del almacenar el
registro de banderas, SP se decrementa 2 unidades.
POPF
La instrucción POPF realiza la operación inversa de PUSHF, POPF remueve de la pila un
dato de 16 bits que es cargado como el contenido del registro de banderas.
LAHF
Carga el registro AH con banderas, LAHF copia el byte de orden inferior del registro de
banderas en AH. Después de la ejecución de esta instrucción, los bits 7,6,4,2 y 1 de AH
son iguales a las banderas S, Z, A, P y C respectivamente.
SAHF
Almacena AH en el registro de banderas, SAHF copia el contenido de AH en el byte de
orden inferior del registro de banderas. Después de la ejecución de esta instrucción las
banderas S, Z, A, P y C son iguales a los bits 7, 6, 4, 2 y 1 de AH, respectivamente.
IN y OUT
La Tabla 2 muestra una lista de la forma de las instrucciones IN y OUT. Note que solo el
registro AL y AX están siendo utilizados para la transferencia de datos entre los
dispositivos de E/S y el microprocesador. La instrucción IN transfiere un dato desde un
puerto E/S al registro AL o AX, y la instrucción OUT transfiere un dato del registro AX o AL
a un puerto de E/S.

XCHG
La instrucción XCHG intercambia el contenido de cualquier registro con el contenido de
cualquier otro registro o localidad de memoria. no incluyendo los registros de segmento o
intercambios de memoria a memoria. La Tabla 3 muestra las formas de la instrucción
XCHG y el tamaño de esta.
XLAT
La instrucción XLAT (translate) convierte el contenido del registro AL en un numero
almacenado en una tabla. Esta instrucción se utiliza para realizar una técnica directa de
conversión de un código a otro (lookup table).
Una instrucción XLAT primero suma el contenido de AL con el contenido del registro BX
para formar una dirección del segmento de datos, luego el dato almacenado en esta
dirección es cargado en el registro AL. Esta instrucción no posee operando, ya que
siempre opera sobre AL.
LEA
La instrucción LEA se utiliza para cargar un registro con la dirección de un dato
especificado por un operando (Variable). En el primer ejemplo de la Tabla 4 la dirección
de DATA se almacena en el registro AX, cabe notar que la dirección y no el contenido de
la dirección DATA se almacena en el registro AX.
LDS y LES
Las instrucciones LDS y LES cargan un registro de 16 bits con un desplazamiento
(dirección) y el registro segmento DS o ES con una nueva dirección de segmento. Estas
instrucciones utilizan cualquier modo de direccionamiento a memoria válido para
seleccionar la localidad del nuevo desplazamiento y valor de segmento. En la Figura 3 se
muestra la operación de la instrucción LDS BX[DI] la cual transfiere la dirección de 32 bits
al registro BX y DS que inicia en la localidad de memoria direccionada por el registro DI.

Instrucciones de manipulacion de datos


Es un lenguaje proporcionado por los sistemas gestores de bases de datos. En ingles su
nombre es Data Manipulation Laguage (DML).
Permite a los usuarios introducir datos para posteriormente realizar tareas de consultas o
modificación de los datos que contienen las Bases de Datos.
Las instrucciones que se utilizan para manipular los datos, son los siguientes:

 SELECT, esta sentencia se utiliza para realizar consultas sobre los datos.


 INSERT, con esta instrucción podemos insertar los valores en una base de
datos.
 UPDATE, sirve para modificar los valores de uno o varios registros.
 DELETE, se utiliza para eliminar las finas de una tabla

Aritmetica de punto flotante


En un ordenador típico los números en punto flotante se representan de la manera
descrita en el apartado anterior, pero con ciertas restricciones sobre el número de dígitos
de q y m impuestas por la longitud de palabra disponible (es decir, el número de bits que
se van a emplear para almacenar un número).

Para ilustrar este punto, consideraremos un ordenador hipotético que


denominaremos MARC-32 y que dispone de una longitud de palabra de 32 bits (muy
similar a la de muchos ordenadores actuales). Para representar un número en punto
flotante en el MARC-32, los bits se acomodan del siguiente modo: 

Signo del número real x: 1 bit


Signo del exponente m: 1 bit
Exponente (entero |m|): 7 bits
Mantisa (número real |q|): 23 bits
En la mayoría de los cálculos en punto flotante las mantisas se normalizan, es decir, se
toman de forma que el bit más significativo (el primer bit) sea siempre '1'. Por lo tanto, la
mantisa q cumple siempre la ecuación (19).

Dado que la mantisa siempre se representa normalizada, el primer bit en q es siempre 1,
por lo que no es necesario almacenarlo proporcionando un bit significativo adicional. Esta
forma de almacenar un número en punto flotante se conoce con el nombre de técnica del
'bit fantasma'.

Se dice que un número real expresado como aparece en la ecuación (18) y que satisface
la ecuación (19) tiene la forma de punto flotante normalizado. Si además puede
representarse exactamente con |m| ocupando 7 bits y |q| ocupando 24 bits, entonces es
un número de máquina en el MARC-323

La restricción de que |m| no requiera más de 7 bits significa que:

Ya que  , la MARC-32 puede manejar números tan pequeños como 10-38 y


tan grandes como 1038. Este no es un intervalo de valores suficientemente generoso, por
lo que en muchos casos debemos recurrir a programas escritos en aritmética de doble
precisión e incluso de precisión extendida.

Como q debe representarse empleando no más de 24 bits significa que nuestros números


de máquina tienen una precisión limitada cercana a las siete cifras decimales, ya que el
bit menos significativo de la mantisa representa unidades de  . Por tanto, los
números expresados mediante más de siete dígitos decimales serán objeto
de aproximación cuando se almacenen en el ordenador.

Por ejemplo: 0.5 representado en punto flotante en el MARC-32 (longitud de palabra de


32 bits) se almacena en la memoria del siguiente modo:

Instrucciones de control de programa


Son aquellas que nos permiten variar o alterar la secuencia normal de ejecución de un
programa. Prácticamente la totalidad de lenguajes de programación de alto nivel soportan
tres tipos de instrucciones de control:

 Instrucciones condicionales o alternativas.


 Instrucciones de salto.
 Instrucciones repetitivas.

INSTRUCCIONES CONDICIONALES O ALTERNATIVAS:

1.- Alternativa simple:

Se evalúa una condición, ejecutándose un grupo de sentencias si el resultado es


«verdadero», y no ejecutándose este grupo de sentencias si el resultado es «falso».

2.- Alternativa doble:

Se evalúa la condición, ejecutándose un grupo de sentencias si el resultado es


«verdadero», y ejecutándose otro grupo alternativo de sentencias si el resultado es
«falso».
3.- Alternativa múltiple (o selector):

En lugar de una condición, se evalúa una expresión con múltiples pero finitos resultados,
ejecutándose en función del resultado de la expresión, un grupo de sentencias entre
múltiples posibles.

Instrucciones alternativas anidadas:

También es posible utilizar la instrucción Si-Sino para diseñar estructuras de selecciones


entre más de dos alternativas. Esto se consigue mediante las estructuras anidadas, donde
tanto la rama Si como la Sino pueden contener a su vez otra instrucción Si-Sino, y así
sucesivamente un número determinado de veces.

INSTRUCCIONES DE SALTO:

Se utilizan para realizar un salto, es decir, para transferir el control a un punto del
programa donde seguirá la ejecución de este, pero perdiendo toda posibilidad de retornar
de forma controlada la ejecución del programa al punto de llamada.

No se aconseja su utilización porque crean un código difícil de leer y mantener, estando


su uso muy restringido en programación estructurada.

Tipos de sentencias de salto:

 Salto condicional: alteran la secuencia de ejecución de un programa sólo y


exclusivamente en el caso de que una condición específica sea cierta.
 Salto incondicional: alteran la secuencia de ejecución de un programa siempre al
no ir acompañadas de una condición de limite en determinadas ocasiones la
realización del salto a otra parte del programa.
INSTRUCCIONES REPETITIVAS:

Este tipo de instrucciones también son conocidas como bucles, ciclos o lazos. Lo que
hacen es que mientras se verifique una condición, un segmento del algoritmo o programa
se repita consecutivamente.

En cada repetición del bucle (o iteración) se evalúa la expresión de control del bucle (o
condición), que determinará si continuamos realizando otra iteración o bien salimos
definitivamente del bucle.

Podemos distinguir tres tipos de bucles, dependiendo de que la condición de control del
bucle se evalúe antes o después de cada iteración, y de que se pueda fijar de antemano o
no el número de iteraciones a realizar.

1.- El bucle «mientras»:

Se utiliza cuando se desea que un bucle de instrucciones se ejecute mientras una


condición sea cierta.

2.- El bucle «repetir mientras»:

Es similar al bucle «mientras» con la diferencia de que la condición se evalúa después de


ejecutar el cuerpo del bucle.

3.- El bucle «desde»:

Se utiliza cuando se desea que un bucle se ejecute repetidamente un número


determinado de veces que se conoce por anticipado.

También podría gustarte