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.