Está en la página 1de 144

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

CARRERA DE INGENIERIA ELECTRONICA



ASIGNATURA: MICROPROCESADORES

2da PARCIAL

TRABAJO I
CONJUNTO DE INSTRUCCIONES
Profesor: Ing. Cristian Vega

INTEGRANTES:
Alex Bez Espinosa
Alexander Jaramillo
Xavier Tito


1. INSTRUCCIONES DE TRANSFERENCIA DE DATOS.
MOV: Mover datos
Inmediato





Esta instruccin nos permite mover datos inmediatamente al registro que deseemos

Registro





Permite mover un operando de un registro a otro en este caso de BX a AX

Directo(Absoluto a memoria)



Transfiere lo que se encuentra un una direccin de memoria a un registro, es necesario guardar
antes algo en esa direccin

Indirecto




Transfiere lo que se encuentra en una direccin de un registro a otro registro

Directo(Relativo a registro base)





Mueve la direccin ms un desplazamiento al registro que deseemos



XCHG: Intercambiar datos
Inmediato





Transfiere los datos de un registro inmediatamente, en el ejemplo de la parte izquierda a la parte
derecha











Registro






















Transfiere lo datos de un registro a otro

Directo(Absoluto a memoria)



Transfiere un operando que se encuentra en una direccin de memoria


Indirecto



Transfiere lo que se encuentra en una direccin de memoria a otra












PUSH: Guardar en la pila
Inmediato



Guarda en la pila lo que se encuentra en el registro, instruccin de 1 byte
Registro



Guarda en la pila lo que se encuentra en algn registro, instrucciones de 3 bytes
Directo(Absoluto a memoria)




Instruccin de 3 bytes, guarda en una direccin de la pila

Directo(Relativo a registro base)




Instruccin de 4 bytes, guarda en una direccin de la pila + 2
Directo(Relativo a un registro ndice)




La instruccin es de 3 bytes






POP: Sacar una palabra de la pila
Inmediato
No funciona para este modo de direccionamiento
Registro


Saca la palabra que estaba en la pila, instruccin de 1 byte
Directo(Absoluto a memoria)





Aumenta el tamao de la instruccin a 4

Directo(Relativo a registro base)





Aumenta en 2 la direccin que se desea sacar

Directo(Relativo a un registro ndice)



Aumenta a 3 el nmero de instrucciones


LEA: Cargar direccin efectiva
Inmediato
No funciona para este modo de direccionamiento
Registro




Esta instruccin hace lo mismo que MOV pero antes debe haber una instruccin para poder leerla y
luego ponerla en otra direccin.

Directo(Absoluto a memoria)




Pone lo que est en la memoria a un registro

Directo(Relativo a registro base)





Lee y suma el desplazamiento al registro BX y lo pone en la direccin indicada, instruccin de 3
bytes
Directo(Relativo a un registro ndice)




Suma lo que se encuentra en SI y lo pone en el registro deseado
2. INSTRUCCIONES ARITMTICAS
ADD: Sumar nmeros binarios
Inmediato


Suma directamente un operando a un registro o memoria
Registro






Esta instruccin permite sumar nmeros binarios que se encuentran en los registros o en la
memoria, al sumar pueden activarse varias banderas como en este caso:
SF el cual se activa para indicarnos que es el resultado de la operacin
PF Se activ ya que al sumar tenemos que tenemos un nmero par de bits (paridad)
IF Es el que controla las interrupciones, cuando est activo permite las interrupciones


Directo(Absoluto a memoria)






Suma cualquier un operando que se encuentra en una direccin a un registro


Directo(Relativo a registro base)




Se suma un desplazamiento a un registro base y se aade al registro AX

Directo(Relativo a un registro ndice)




La instruccin es de 3 bytes
Indexado





SUB: Restar nmeros binarios
Inmediato


Resta un operando que se encuentra en un registro de uno que ingresemos
Registro




La instruccin SUB permite restar dos nmeros binarios que se encuentran en los registros o en la
memoria, al restar pueden activarse las banderas para indicarnos la constancia de la operacin
realizada:
CF nos indica que existe un acarreo y se da al restar 5 de 9
SF nos indica que es el resultado de la operacin realizada
OF indica que hubo desbordamiento aritmtico ya que solo restamos la parte izquierda
PF Se activ ya que al sumar tenemos que tenemos un nmero par de bits (paridad)
IF Es el que controla las interrupciones, cuando est activo permite las interrupciones
Directo(Absoluto a memoria)



Resta lo que se encuentra en una direccin con el registro que deseemos, la instruccin es de 4
bytes

Directo(Relativo a registro base)




Instruccin de 3 bytes que resta del registro base
Directo(Relativo a un registro ndice)



Instruccin de 3 bytes

DEC: Disminuye en uno
Inmediato





Disminuye en 1 byte o en una palabra en un registro o memoria

Registro







Disminuye en 1 byte o en una palabra en un registro
Directo(Absoluto a memoria)



Disminuye a la palabra que se encuentra en la direccin seleccionada, instruccin de 4 bytes

Directo(Relativo a registro base)



Suma un desplazamiento a la direccin de la palabra
Directo(Relativo a un registro ndice)




INC: Incrementa en uno
Inmediato




Incrementa inmediatamente a un operando
Registro







Disminuye en 1 byte o en una palabra en un registro o memoria

Directo(Absoluto a memoria)




Aumenta el operando que se encuentra en la direccin

Directo(Relativo a registro base)




Redireccina la direccin que se requiere aumentar

Directo(Relativo a un registro ndice)




MUL: Multiplicar sin signo
Inmediato



Permite multiplicar entre dos registros o memorias existentes


Registro





La instruccin permite multiplicar dos operandos sin signo como hubo un desbordamiento se
guarda parte de la respuesta en DX ya que multiplicamos 16 por 16, las banderas que se activan
son:
CF Que nos indica que existe acarreo
OF Que nos indica el desbordamiento
IF Es el que controla las interrupciones, cuando est activo permite las interrupciones

Directo(Absoluto a memoria)




Multiplica el registro por el operando que se encuentra en la direccin especificada
Directo(Relativo a registro base)



Multiplica el registro base ms el desplazamiento que deseemos


IMUL: Multiplicar con signo (enteros)
Inmediato



Multiplica nmeros con signo directamente
Registro




Esta instruccin permite multiplicar dos operandos con signo, donde el signo es el bit ms
significativo

Directo(Absoluto a memoria)



Multiplica el contenido de una direccin con otro operando
Directo(Relativo a registro base)




Tiene una instruccin de 3 bytes

DIV: Dividir sin signo
Inmediato



Divide dos operandos ingresados

Registro



Permite dividir dos operandos si signo, las banderas quedan desactivadas. La respuesta se presenta
en dos partes:
En AX el cociente de la divisin
En DX el residuo de la divisin

Directo(Absoluto a memoria)



Divide un registro para un operando ingresado, la instruccin tiene 4 bytes





IDIV: Dividir con signo
Inmediato



Divide dos operandos con signo, tiene 3 bytes de instruccin
Registro



Divide el contenido de 2 registros
Directo(Absoluto a memoria)



Se divide para el contenido de un registro

NEG: Niega
Inmediato
No se puede realizar
Registro




Con esta instruccin se puede cambiar de un nmero positivo a negativo, NEG trabaja con
complemento a 2
En el cdigo solo queremos que se niegue la parte izquierda de la palabra con lo cual tendamos: La
parte izquierda de la palabra: 1011 0111
El complemento a 2 de esa parte: 0100 1001


Directo(Absoluto a memoria)



Niega a al operando de la direccin seleccionada

3. INSTRUCCIONES LGICAS Y MANEJO DE BITS.
AND.
Modo: Registro

org 100h
mov ax,10100101b ; 00A5 en decimal
mov bx,01011100b ; 005C en decimal
and ax,bx ; 00000100 and
ret


Modo: inmediato

org 100h
mov ax, 0a1bah
and ax, 013abh
ret



Modo: Directo (Absoluto a memoria)

org 100h
mov [05412h], 013abh
and ax, [05412h]
ret







Modo: Directo con referencia (Relativo) a un registro base.

org 100h
mov [bx+2], 013abh
and ax, [bx+2]
ret









Modo: Indirecto con una referencia a una base

org 100h
mov [bx], 013abh
and ax, [bx]
ret






Modo: Directo con referencia a un ndice.

org 100h
mov [DI+2], 013abh
and ax, [DI+2]
ret




Modo: Indirecto con referencia a un ndice.

org 100h
mov [DI], 013abh
and ax, [DI]
ret



Modo: Indexado.

org 100h
mov [BP+DI+2], 013abh
and ax, [BP+DI+2]
ret





Modo: Indexado Indirecto

org 100h
mov [BP+DI], 013abh
and ax, [BP+DI]
ret



OR

Modo: Registro

org 100h
mov ax, 10100101b ; 00A5 en decimal
mov bx, 01011100b ; 005C en decimal
or ax, bx ; 11111101b and
ret


Modo: Inmediato



Modo: Directo (Absoluto a memoria)

org 100h
mov [05412h], 013abh
and ax, [05412h]
ret




Modo: Directo con referencia (Relativo) a un registro base.

org 100h
mov [bx+2], 013abh
or ax, [bx+2]
ret


Modo: Indirecto con una referencia a una base

org 100h
mov [bx], 013abh
or ax, [bx]
ret



Modo: Directo con referencia a un ndice.

org 100h
mov [DI+2], 013abh
or ax, [DI+2]
ret




Modo: Indirecto con referencia a un ndice.

org 100h
mov [DI], 013abh
or ax, [DI]
ret




Modo: Indexado.

org 100h
mov [BP+DI+2], 013abh
or ax, [BP+DI+2]
ret



Modo: Indexado Indirecto

org 100h
mov [BP+DI], 013abh
or ax, [BP+DI]
ret


XOR
Modo: Registro
org 100h
mov ax, 00100101b ; 00A5 en decimal
mov bx, 01011100b ; 005C en decimal
xor ax, bx ; 01111001b 79h and
ret





Modo: Inmediato

org 100h
mov ax, 0a1bah
xor ax, 013abh
ret

t




Modo: Directo (Absoluto a memoria)

org 100h
mov [05412h], 013abh
xor ax, [05412h]
ret


Modo: Directo con referencia (Relativo) a un registro base.

org 100h
mov [bx+2], 013abh
xor ax, [bx+2]
ret


Modo: Indirecto con una referencia a una base

org 100h
mov [bx], 013abh
xor ax, [bx]
ret





Modo: Directo con referencia a un ndice.

org 100h
mov [DI+2], 013abh
xor ax, [DI+2]
ret


Modo: Indirecto con referencia a un ndice.

org 100h
mov [DI], 013abh
xor ax, [DI]
ret







Modo: Indexado.

org 100h
mov [BP+DI+2], 013abh
xor ax, [BP+DI+2]
ret





Modo: Indexado Indirecto

org 100h
mov [BP+DI], 013abh
xor ax, [BP+DI]
ret



NOT
Modo: Registro
org 100h
mov ax, 00100101b ; 00A5 en decimal
not ax ; 11011010b DAh
ret



Modo: Inmediato
No existe la forma de realizar en este modo

Modo: Directo (Absoluto a memoria)

org 100h
mov [05412h], 013abh
not [05412h]
mov ax, [05412h]
ret


Modo: Directo con referencia (Relativo) a un registro base.

org 100h
mov [bx+2], 013abh
not [bx+2]
mov ax, [bx+2]
ret

Modo: Indirecto con una referencia a una base

org 100h
mov [bx], 013abh
not [bx]
mov ax, [bx]
ret


Modo: Directo con referencia a un ndice.

org 100h
mov [DI+2], 013abh
not [DI+2]
mov ax, [DI+2]
ret



Modo: Indirecto con referencia a un ndice.

org 100h
mov [DI], 013abh
not [DI]
mov ax, [DI]
ret











Modo: Indexado.

org 100h
mov [BP+DI+2], 013abh
not [BP+DI+2]
mov ax, [BP+DI+2]
ret



Modo: Indexado Indirecto

org 100h
mov [BP+DI], 013abh
not [BP+DI]
mov ax, [BP+DI]
ret

CMP
Modo: Registro
org 100h
mov ax,00100101b ; 0025 en decimal
mov bx,01011100b ; 005C en decimal
cmp ax,bx ;
ret



Modo: Inmediato








Modo: Directo absoluto a memoria

Modo: Directo con referencia a una base


Modo: Indirecto con referencia a una base

Modo: Directo con referencia a un ndice

Modo: Indirecto con referencia a un ndice

Modo: Indexado










Modo: Indexado indirecto


3.2 INSTRUCCIONES DE DESPLAZAMIENTO
SHR, desplazamiento lgico a la derecha
Modo: Inmediato y Registro
org 100h
mov cl, 03
mov al, 10110111b
shr al, 100b ; desplazar 4 ceros hacia la derecha
shr al, cl ; desplazar 3 ceros en un solo paso
ret
Se obtendr lo siguiente
B7 10110111; CF=0
5B 01011011; CF=1
2D 00101101; CF=1
16 00010110; CF=1
0B 00001011; CF=0
01 00000001; CF=0 despus de shr al, cl









Nota: Para los modos restantes no se permite hacer para la instruccin SHR, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.



SAR, desplazamiento aritmtico a la derecha
org 100h
mov cl, 03
mov al, 10110101b
sar al, 10b ; desplazar 2 bits hacia la derecha
sar al, cl ; desplazar 3 ceros en un solo paso
ret
Se obtendr lo siguiente:
B5 10110101; CF=0, SF=0
DA 11011010; CF=1, SF=1
ED 11101101; CF=0, SF=1

FD 11111101; CF=1, SF=1 despus de shr al, cl





Nota: Para los modos restantes no se permite hacer para la instruccin SAR, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.


SHL, desplazamiento lgico a la izquierda
org 100h
mov cl, 03
mov al, 10110101b
shl al, 10b ; desplazar 2 bits de cero hacia la izquierda
shl al, cl ; desplazar 3 ceros a la izquierda en un solo paso
ret
La misma funcionalidad que en shr, pero en cada paso el bit ms significativo se coloca en CF
cuando un cero entra por la derecha, analticamente se obtendr:
B5 10110101; CF=0
6A 01101010; CF=1
D4 11010100; CF=1

A0 10100000; CF=0 en el ltimo shl




Nota: Para los modos restantes no se permite hacer para la instruccin SHL, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.



SAL, desplazamiento aritmtico a la izquierda, (misma actividad que
SHL)
Entonces con el siguiente cdigo:
org 100h
mov cl, 03
mov al, 10110101b
sal al, 10b ; desplazar 2 bits de cero hacia la izquierda
sal al, cl ; desplazar 3 ceros a la izquierda en un solo paso
ret
Tendremos los mismos resultados
B5 10110101; CF=0
6A 01101011; CF=1
D4 11010101; CF=1

A0 10101111; CF=0 en el ltimo shl






Nota: Para los modos restantes no se permite hacer para la instruccin SAL, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.




ROR, rotacin lgica a la derecha
Cada bit saliente por la derecha, entrar por el ms significativo, y se copiar en la bandera CF.

org 100h
mov cl, 03
mov al, 10110101b
ror al, 10b ; desplazar 2 bits hacia la derecha
ror al, cl ; desplazar 3 bits la derecha en un solo paso
ret
B5 10110101; CF=0
DA 11011010; CF=1
6D 01101101; CF=0

AD 10101101; CF=1 en el ltimo ror





Nota: Para los modos restantes no se permite hacer para la instruccin ROR, pues solo puede
usarse con el registro CL o un byte inmediato como se hizo anteriormente.


RCR, rotacin a la derecha con acarreo.
Por el bit ms significativo entrar el bit ms significativo de la bandera CF, y al mismo tiempo el bit
saliente por el menos significativo se copiar en la bandera CF.

org 100h
mov cl, 03
mov al, 10110101b
rcr al, 10b ; desplazar 2 bits hacia la derecha
rcr al, cl ; desplazar 3 bits la derecha en un solo paso
ret

B5 10110101; CF=0
5A 01011010; CF=1
AD 10101101; CF=0

AD 01010101; CF=1 en el ltimo rcr





Nota: Para los modos restantes no se permite hacer para la instruccin RCR, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.

ROL, rotacin lgica a la izquierda.
Cada bit saliente por la izquierda, entrar por el menos significativo(derecha), y se copiar en la
bandera CF.

org 100h
mov cl, 03
mov al, 10110101b
rol al, 10b ; desplazar 2 bits hacia la izquierda
rol al, cl ; desplazar 3 bits a la izquierda en un solo paso
ret
B5 10110101; CF=0
6B 01101011; CF=1
D6 11010110; CF=0

B6 10110110; CF=0 en el ltimo rol





Nota: Para los modos restantes no se permite hacer para la instruccin ROL, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.

RCL, rotacin lgica a la izquierda.
Por el bit menos significativo entrar el bit contenido en la bandera CF, y al mismo tiempo el bit
saliente por la izquierda se copiar en la bandera CF.

org 100h
mov cl, 03
mov al, 10110101b
rcl al, 10b ; desplazar 2 bits hacia la izquierda
rcl al, cl ; desplazar 3 bits a la izquierda en un solo paso
ret
B5 10110101; CF=0
6A 01101010; CF=1
D5 11010101; CF=0

AB 10101011; CF=0 en el ltimo rol





Nota: Para los modos restantes no se permite hacer para la instruccin RCL, pues solo puede usarse
con el registro CL o un byte inmediato como se hizo anteriormente.


4. INSTRUCCIONES DE TRANSFERENCIA DE
CONTROL.
Conforme de una operacin aritmtica o comparacin, en la bandera ZF tenemos, 0 si se tiene un
resultado diferente de cero, y es 1 si el resultado es cero
Datos sin signo:
JE/JZ
Con cualquiera de estas instrucciones, la transferencia hacia un nuevo control se realiza
dependiendo de si la bandera ZF contiene el bit 1:
org 100h
mov ax, 0001h
dec ax ; decrementa ax en 1
je a20 ; salta a a20 si ax es 0000h
not ax
shr ax,1
a20:
mov al, 23h
ret






JNE/JNZ
Es el caso inverso de la anterior instruccin, pues salta si la bandera ZF=0, entonces con el mismo
cdigo anterior pero partiendo





JA/JNBE
org 100h
mov ax, 1001b
dec ax
jnbe a20
not ax
shr ax,1
a20:
mov al, 23h
ret

En este caso veremos que las banderas CF y ZF especialmente estarn en 0, ya que la instruccin
cumple si se tiene un resultado diferente de cero




JAE/JNB
Esta instruccin salta si el valor del registro es mayor o igual a cero, y a la vez si el registro de
bandera CF sea igual a cero, pues sabemos que ste lleva un acarreo luego de una op. aritmtica o
rotacin de bits.

Con el siguiente cdigo se cumple el salto ya que al rotar 0010 un bit a la derecha, CF se mantiene
todava en cero.

org 100h
mov ax, 0010b
ror ax,1 ; al rotar se tiene 0001 y cf=0
jae a20
not ax
shr ax,1
a20:
mov al, 23h
ret




Pero si partisemos desde ax=0001b no tendramos el salto condicional.
De ax=0001b pasa a 100000b

Pasa a la instruccin contigua que es NOT

JB/JNAE
Esta instruccin har saltar a la secuencia del programa, si se tiene un resultado previo menor, o lo
que se dira si en la bandera cf se tiene el bit 1.
org 100h
mov ax, 0001b
ror ax,1 ; al rotar se tiene 1000 y cf=1
jae a20
not ax
shr ax,1
a20:
mov al, 23h
ret









JBE/JNA
El salto condicional se da si las banderas CF=1 y ZF=1, es decir un igual a cero o inferior si fuese
ZF=0.




Datos con signo:

JE/JZ

org 100h
mov ax, -1h
add ax,1
je a20 ; salta a a20 si ax es 0000h
not ax
shr ax,1
a20:
mov al, 23h
ret




JNE/JNZ
org 100h
mov ax, -1h
jne a20 ; salta a a20 si ax es 0000h
not ax
shr ax,1
a20:
mov al, 23h
ret





JGE/JNL
JGE



Test aritmticos.

JS
IP=0106


JNS/JN
org 100h
mov ax, 1h
jne a20 ; salta a a20 si ax es 0000h
not ax
shr ax,1
a20:
mov al, 23h
ret





JNC
IP=0103


JP/JPE
JP
IP=0106

4.2.- INSTRUCCIONES DE TRANSFERENCIA DE
CONTROL INCONDICIONALES

Operacin JMP: Salto incondicional
Descripcin Salta a la direccin designada (operando). La direccin especificada puede ser
corta (-128 a +127 bytes), cercana (dentro de 32K) o lejana (a otro segmento).
Banderas No las afecta
Formato JMP {registro/memoria}
Ejemplo JMP FINAL

1. Direccionamiento inmediato


Salta a la direccion designada en este caso es una etiqueta label1




























Como podemos observar el direccionamiento es inmediato


2. Direccionamiento de registro


Se cargan los registros ax,bx
se hace el modo de direccionamiento por registro mov al,bh
quiere decir que la parte alta de bx su destino es la parte baja de al.

3. Direccionamiento Directo (absoluto a memoria)








Se suma con el segmento de datos y el valor que tengo entre corchetes su
resultado es la direccin

4. Direccionamiento Indirecto (absoluto a memoria)


Se suma con el segmento de datos y el valor que tengo entre corchetes ms la
suma de un offset y su resultado es la direccin



5. Direccionamiento Directo (relativo a un registro base)


Se suma con el segmento de datos y el valor que tengo entre corchetes ms la
suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)


6. Direccionamiento Indirecto (relativo a registro base)







Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a un registro base)






7. Direccionamiento Directo (relativo a registro indice)




Se suma con el segmento de datos y el valor que tengo entre corchetes ms el
offset y su resultado es la direccin a esto llamamos direccionamiento Directo
(relativo a registro ndice)

8. D
i
r
e
c
c
i
o
n
a
m
i
e
n
t
o

I
n
directo (relativo a registro indice)






Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a registro ndice)















9. Indexado
se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin a esto llamamos direccionamiento indexado




















2.4.3.- Bucles.

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

Operacin LOOP: Repetir
Descripcin Controla la ejecucin de un grupo de instrucciones un nmero especfico de veces.
Antes de iniciar el ciclo, CX debe contener el nmero de veces que ha de repetirse.
LOOP aparece al final del conjunto de instrucciones que se repiten y decrementa
CX. Al llegar a cero, permite que el flujo de ejecucin pase a la siguiente
instruccin. En caso contrario salta a la etiqueta que determina el comienzo del
bucle.
Banderas No las afecta.
Formato LOOP etiqueta
Ejemplo MOV CX,num_veces
Etiqueta:
;Instrucciones del bucle
LOOP Etiqueta

Nota: LOOPE/LOOPZ tienen la misma funcin que LOOP, pero la condicin para salir del bucle es
que CX = 0 Z = 0. Para LOOPNZ/LOOPNE la condicin es CX = 0 Z = 1.










1. Direccionamiento inmediato
















Se carga el dato en el registro de la parte baja al y repite 2 veces

2.- Direccionamiento de registro

El dato de la parte alta se enva a la parte baja del registro al.



3. Direccionamiento Directo (absoluto a memoria)


Se suma con el segmento de datos y el valor que tengo entre corchetes su
resultado es la direccin fsica utilizando loop para repetir el mismo proceso
dos veces















4. Direccionamiento Directo (relativo a un registro base)



5. Direccionamiento Indirecto (relativo a registro base)


Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a un registro base)
















6. Direccionamiento Directo (relativo a registro indice)



























7. Direccionamiento Indirecto (relativo a registro indice)


















Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a registro ndice)



8. Indexado indirecto










Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 2 veces a esto llamamos direccionamiento
indexado




















9. Indexado directo











Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 2 veces a esto llamamos direccionamiento
indexado











2.4.4.- Llamada a
procedimientos.

Dentro del segmento de
cdigo es posible tener cualquier nmero de procedimientos. Un procedimiento (o subrutina) es una
seccin de cdigo que realiza una tarea bien definida y clara (por ejemplo, situar el cursor en
una posicin concreta de la pantalla). La utilizacin de procedimientos en los programas es
aconsejable porque:
Reduce el nmero de lneas de cdigo.
Permite una mejor organizacin del programa.
Facilita la localizacin de errores.
Aumenta la legibilidad del programa.

La llamada a procedimientos se gestiona mediante dos instrucciones: CALL y RET.

Operacin CALL: Llamar a un procedimiento
Descripcin Llama a un procedimiento cercano o lejano. En una llamada a un procedimiento
cercano se guarda en la pila IP. Despus se carga el IP con el desplazamiento de la
direccin de destino (donde se encuentra la primera instruccin del procedimiento).
Si la llamada es a un procedimiento lejano, el proceso a seguir es el mismo pero
ahora el tratamiento de las direcciones incluye tambin considerar el registro de
segmento CS.
Banderas No las afecta.
Formato CALL {registro/memoria}
Ejemplo CALL PROCEDIMIENTO
1. Direccionamiento inmediato



call llamada a subrutina que se repite varias veces en el programa se utiliza
procedimiento y fin de procedimiento
















2. Direccionamiento de registro









El dato de la parte alta se enva a la parte baja del registro al.


















3. Direccionamiento Directo (absoluto a memoria)











Se suma con el segmento de datos y el valor que tengo entre corchetes su
resultado es la direccin fsica utilizando call llamado a subrutina para repetir
el mismo proceso.














4. Direccionamiento Directo (relativo a un registro base)



Se suma con el segmento de datos y el valor que tengo entre corchetes ms la
suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)


















5. Direccionamiento Indirecto (relativo a registro base)

Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a un registro base) call llamada a subrutina.















6. Direccionamiento Directo (relativo a registro indice)



Se suma con el segmento de datos y el valor que tengo entre corchetes ms el
offset y su resultado es la direccin a esto llamamos direccionamiento Directo
(relativo a registro ndice)

























7. Direccionamiento Indirecto (relativo a registro indice)












Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a registro ndice)

















8. Indexado indirecto












Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 2 veces a esto llamamos direccionamiento
indexado

















9. Indexado directo











Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 1 veces a esto llamamos direccionamiento
indexado























Operacin RET: Regresar de un procedimiento
Descripcin Regresa de un procedimiento al que se entr previamente con un CALL cercano o
lejano. Lo que hace esta instruccin es recuperar de la pila la direccin de la
siguiente instruccin que se almacen al hacer la llamada. Esto permitir continuar
la ejecucin del programa en la siguiente instruccin al CALL.
Banderas No las afecta.
Formato RET [VALOR POP]
Ejemplo RET


1. Direccionamiento inmediato



call llamada a subrutina que se repite varias veces en el programa se utiliza
procedimiento y fin de procedimiento
















2. Direccionamiento de registro









El dato de la parte alta se enva a la parte baja del registro al.


















3. Direccionamiento Directo (absoluto a memoria)











Se suma con el segmento de datos y el valor que tengo entre corchetes su
resultado es la direccin fsica utilizando call llamado a subrutina para repetir
el mismo proceso.














4. Direccionamiento Directo (relativo a un registro base)



Se suma con el segmento de datos y el valor que tengo entre corchetes ms la
suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)














5. Direccionamiento Indirecto (relativo a registro base)

Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a un registro base) call llamada a subrutina.















6. Direccionamiento Directo (relativo a registro indice)




Se suma con el segmento de datos y el valor que tengo entre corchetes ms el
offset y su resultado es la direccin a esto llamamos direccionamiento Directo
(relativo a registro ndice)



















7. Direccionamiento Indirecto (relativo a registro indice)












Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a registro ndice)


















8. Indexado indirecto












Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 2 veces a esto llamamos direccionamiento
indexado

















9. Indexado directo











Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 1 veces a esto llamamos direccionamiento
indexado

















5. INSTRUCCIONES PARA MANEJO DE CADENAS

Una cadena es una secuencia de bytes contiguos. Las operaciones que se pueden realizar
sobre las cadenas son las siguientes:

Operacin MOVSB/MOVSW: Mover cadena
Descripcin Mueve cadenas entre localidades de memoria. El primer operando es apuntado por
ES:DI (destino) y el segundo operando por DS:SI (fuente). Normalmente se utiliza
el prefijo REP que hace que la operacin se ejecute CX veces (se le resta uno a CX
tras cada operacin), de forma que segn DF sea uno o cero, tras cada transferencia
(byte o palabra) DI y SI disminuyen o aumentan.
Banderas No las afecta.
Formato [REP] MOVSB/MOVSW
Ejemplo MOV CX,3
REP MOVSB

Nota: CMPSB y CMPSW son similares a las dos instrucciones anteriores pero se utilizan para
comparar bytes o palabras.


1. Direccionamiento inmediato













Copiar un
byte de la
cadena
fuente al
destino.



2. Direccionamiento de registro




El dato de la parte alta se enva a la parte baja del registro al.



3. Direccionamiento Directo (absoluto a memoria)





Se suma con el segmento de datos y el valor que tengo entre corchetes su
resultado es la direccin fsica utilizando call llamado a subrutina para repetir
el mismo proceso.







4. Direccionamiento Directo (relativo a un registro base)



Se suma con el segmento de datos y el valor que tengo entre corchetes ms la
suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)


























5. Direccionamiento Indirecto (relativo a registro base)



Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a un registro base).




















6. Direccionamiento Directo (relativo a registro indice)


Se suma con el segmento de datos y el valor que tengo entre corchetes ms el
offset y su resultado es la direccin a esto llamamos direccionamiento Directo
(relativo a registro ndice)









7. Direccionamiento Indirecto (relativo a registro indice)




Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a
regi
stro
ndi
ce)


















8. Indexado indirecto



Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 2 veces a esto llamamos direccionamiento
indexado




9. Indexado directo



Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 1 veces a esto llamamos direccionamiento
indexado

















Operacin LODSB/LODSW: Cargar un byte/palabra
Descripcin Carga el registro acumulador (AX o AL) con el valor de la localidad de memoria
determinada por DS:SI. SI se incrementa tras la transferencia.
Banderas No las afecta.
Formato LODSB/LODSW
Ejemplo LODSB/LODSW

Nota: STOSB y STOSW son similares a las dos instrucciones anteriores pero se utilizan para
almacenar bytes o palabras en posiciones de memoria.



1. Direccionamiento inmediato




Copiar un byte de la cadena fuente al destino.



























2. Direccionamiento de registro





El dato de la parte alta se enva a la parte baja del registro al.



3. Direccionamiento Directo (absoluto a memoria)





Se suma con el segmento de datos y el valor que tengo entre corchetes su
resultado es la direccin fsica utilizando call llamado a subrutina para repetir
el mismo proceso.









4. Direccionamiento Directo (relativo a un registro base)





Se suma con el segmento de datos y el valor que tengo entre corchetes ms la
suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)





















5. Direccionamiento Indirecto (relativo a registro base)


Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a un registro base).

















6. Direccionamiento Directo (relativo a registro indice)



Se suma con el segmento de datos y el valor que tengo entre corchetes ms el
offset y su resultado es la direccin a esto llamamos direccionamiento Directo
(relativo a registro ndice)




7. Direccionamiento Indirecto (relativo a registro indice)










Se suma con el segmento de datos y el valor que tengo entre corchetes y su
resultado es la direccin a esto llamamos direccionamiento indirecto (relativo
a registro ndice)



























8. Indexado indirecto





Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 2 veces a esto llamamos direccionamiento
indexado































9. Indexado directo



Se suma el bp +di y se suma con el segmento de pila corchetes y su resultado
es la direccin repitindola 1 veces a esto llamamos direccionamiento
indexado.



6. INSTRUCCIONES DE ENTRADA/SALIDA


Los puertos de entrada y salida (E/S) permiten al procesador comunicarse con los perifricos. El
8086/88 utiliza buses de direcciones y datos ordinarios para acceder a los perifricos, pero
habilitando una lnea que distinga el acceso a los mismos de un acceso convencional a la memoria (si
no existieran los puertos de entrada y salida, los perifricos deberan interceptar el acceso a la
memoria y estar colocados en un rea de la misma). Para acceder a los puertos de entrada y salida se
utilizan las instrucciones IN y OUT.

Operacin IN: Entrada
Descripcin Transfiere desde un puerto de entrada un byte a AL o una palabra a AX
Banderas No las afecta.
Formato IN {AX/AL},{nmero_puerto/DX}
Nmero_puerto entre [0..255]
DX entre [0..65535]
Ejemplo IN AL, 0Bh



1. Direccionamiento inmediato









Copiar un byte de la cadena fuente al destino.





2. Direccionamiento de registro


El dato de la parte alta se enva a la parte baja del registro al.








3. Direccionamiento Directo (absoluto a memoria)



Se suma con el segmento de datos y el valor que tengo entre corchetes su resultado es la
direccin fsica utilizando call llamado a subrutina para repetir el mismo proceso.

























4. Direccionamiento Directo (relativo a un registro base)







Se suma con el segmento de datos y el valor que tengo entre corchetes
ms la suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)



5. Direccionamiento Indirecto (relativo a registro base)




Se suma con el segmento de datos y el valor que tengo entre corchetes y
su resultado es la direccin a esto llamamos direccionamiento indirecto
(relativo a un registro base).









6. Direccionamiento Directo (relativo a registro indice)





Se suma con el segmento de datos y el valor que tengo entre corchetes
ms el offset y su resultado es la direccin a esto llamamos
direccionamiento Directo (relativo a registro ndice)





















7. Direccionamiento Indirecto (relativo a registro indice)










Se suma con el segmento de datos y el valor que tengo entre corchetes y
su resultado es la direccin a esto llamamos direccionamiento indirecto
(relativo a registro ndice)




8. Indexado indirecto









Se suma el bp +di y se suma con el segmento de pila corchetes y su
resultado es la direccin repitindola 2 veces a esto llamamos
direccionamiento indexado







9. Indexado directo












Se suma el bp +di y se suma con el segmento de pila corchetes y su
resultado es la direccin repitindola 1 veces a esto llamamos
direccionamiento indexado.























Operacin OUT: Salida
Descripcin Transfiere un byte desde AL o una palabra desde AX hasta el puerto.
Banderas No las afecta.
Formato OUT {nmero_puerto/DX},{AX/AL}
Nmero_puerto entre [0..255]
DX entre [0..65535]
Ejemplo OUT AL,0Bh




1. Direccionamiento inmediato






Copiar un byte de la cadena fuente al destino.


2. Direccionamiento de registro







El dato de la parte alta se enva a la parte baja del registro al.






3. Direccionamiento Directo (absoluto a memoria)





Se suma con el segmento de datos y el valor que tengo entre corchetes su resultado es la
direccin fsica.




















4. Direccionamiento Directo (relativo a un registro base)



Se suma con el segmento de datos y el valor que tengo entre corchetes
ms la suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)


5. Direccionamiento Indirecto (relativo a registro base)











Se suma con el segmento de datos y el valor que tengo entre corchetes y
su resultado es la direccin a esto llamamos direccionamiento indirecto
(relativo a un registro base).












6. Direccionamiento Directo (relativo a registro indice)





Se suma con el segmento de datos y el valor que tengo entre corchetes
ms el offset y su resultado es la direccin a esto llamamos
direccionamiento Directo (relativo a registro ndice)


























7. Direccionamiento Indirecto (relativo a registro indice)




Se suma con el segmento de datos y el valor que tengo entre corchetes y
su resultado es la direccin a esto llamamos direccionamiento indirecto
(relativo a registro ndice)




8. Indexado indirecto




Se suma el bp +di y se suma con el segmento de pila corchetes y su
resultado es la direccin repitindola 2 veces a esto llamamos
direccionamiento indexado



















9. Indexado directo





Se suma el bp +di y se suma con el segmento de pila corchetes y su
resultado es la direccin repitindola 1 veces a esto llamamos
direccionamiento indexado.



7. PROGRAMACIN DEL PC SOBRE DOS

3.1.- Directivas del ensamblador.

El programa ensamblador permite usar diferentes enunciados que sirven para
controlar la forma en que un programa se ensambla y lista. Estos enunciados reciben el nombre
de directivas. Se caracterizan porque slo tienen influencia durante el proceso de
ensamblado, pero no generan cdigo ejecutable alguno. Estas directivas pueden variar algo
de un programa ensamblador a otro. Nosotros explicaremos algunas de las ms usadas en el
TASM.

3.1.1.- Directivas para declaracin y manejo de segmentos.

Directiva .MODEL (ntese .)
Descripcin Especifica el modelo de memoria utilizado (vase seccin 4.2).
Formato .MODEL modelo
Ejemplo .MODEL Compact

La siguiente tabla resume los distintos tipos de modelos de memoria:

MODELO CARACTERSTICAS
TINY Datos y cdigo cogen en un solo segmento de 64K.
SMALL Un segmento de datos y otro de cdigo.

COMPACT
Mltiples segmentos de datos y un nico segmento de cdigo. Este modelo y el
anterior son los que normalmente se utilizan.
LARGE Mltiples segmentos de datos y de cdigo.



1. Direccionamiento inmediato




Copiar un byte de la cadena fuente al destino.






2. Direccionamiento de registro




El dato de la parte alta se enva a la parte baja del registro al.








3. Direccionamiento Directo (absoluto a memoria)





Se suma con el segmento de datos y el valor que tengo entre corchetes su resultado es la
direccin fsica.






















4. Direccionamiento Directo (relativo a un registro base)











Se suma con el segmento de datos y el valor que tengo entre corchetes
ms la suma de un offset y su resultado es la direccin a esto llamamos
direccionamiento directo (relativo a un registro base)























5. Direccionamiento Indirecto (relativo a registro base)





Se suma con el segmento de datos y el valor que tengo entre corchetes y
su resultado es la direccin a esto llamamos direccionamiento indirecto
(relativo a un registro base).






6. Direccionamiento Directo (relativo a registro indice)





Se suma con el segmento de datos y el valor que tengo entre corchetes
ms el offset y su resultado es la direccin a esto llamamos
direccionamiento Directo (relativo a registro ndice)


























7. Direccionamiento Indirecto (relativo a registro indice)





Se suma con el segmento de datos y el valor que tengo entre corchetes y
su resultado es la direccin a esto llamamos direccionamiento indirecto
(relativo a registro ndice)




















8. Indexado indirecto




Se suma el bp +di y se suma con el segmento de pila corchetes y su
resultado es la direccin repitindola 2 veces a esto llamamos
d
i
r
e
c
c
i
o
n
a
m
i
e
n
t
o

i
n
d
exado



















9. Indexado directo






Se suma el bp +di y se suma con el segmento de pila corchetes a esto
llamamos direccionamiento indexado.

También podría gustarte