Download MOV (copiar)

Document related concepts
no text concepts found
Transcript
MICROPROCESADORES Y
CONTROL DE PERIFÉRICOS
INSTRUCCIONES Y LENGUAJES
Prof. Juan Álvarez
CONTENIDO
•
•
•
•
Repertorio de Instrucciones
Modos de Direccionamiento
Lenguaje de Máquina
Programas con Debug
REPERTORIO DE INSTRUCCIONES
El repertorio de instrucciones de los
microprocesadores 8086 y 80286 se agrupan
según el tipo de operación que realizan:
• De transferencia de datos.
• Aritméticas, lógicas, desplazamiento y
rotación.
• De cadenas.
• De manipulación de bits.
• De control de programas.
• De control de máquina.
REPERTORIO DE INSTRUCCIONES
Las instrucciones de transferencia de datos
consisten en copiar, mover o intercambiar
datos entre, registros o registro-memoria o
registro-puerto E/S:
• MOV (copiar), XCHG (intercambiar),
PUSH (almacenar en pila), POP (cargar de
pila), LEA (cargar dirección efectiva), OUT
(sacar dato por puerto), IN (ingresar dato
por puerto), XLAT (ingresar una tabla de
conversión).
REPERTORIO DE INSTRUCCIONES
Las instrucciones aritméticas son operaciones
de la ALU:
• ADD (sumar), ADC (sumar con acarreo),
SUB (restar), SBB (restar con préstamo),
CMP (comparar), DEC (decrementa), INC
(incrementa), MUL (multiplicación sin
signo), IMUL (multiplicación con signo),
DIV (división sin signo), IDIV (división con
signo)
REPERTORIO DE INSTRUCCIONES
Las instrucciones lógicas son también
operaciones de la ALU:
• NEG (complemento a dos), NOT
(complemento a uno), AND (and bit a bit),
OR (or bit a bit), XOR (xor bit a bit).
• Los desplazamientos SAL,SHL (hacia la
izquierda), SAR, SHR (hacia la derecha)
• Las rotaciones RCL, ROL (hacia la
izquierda), RCR, ROR (hacia la derecha)
REPERTORIO DE INSTRUCCIONES
Las instrucciones de cadenas se emplean para
manipular una lista de datos en la memoria:
• MOVS (copiar cadena), CMPS (comparar
cadenas), INS (almacenar cadenas desde
puerto), OUTS (sacar cadena hacia puerto).
Las instrucciones de manipulación de bits se
emplean para manejar datos de bits:
• STC (carry = 1), CLC (carry = 0), CMC
(complementar carry), STD (direcction = 1),
CLD (direction = 0), STI (interrupt = 1),
CLI (interrupt = 0).
REPERTORIO DE INSTRUCCIONES
Las instrucciones de control de programa
sirven para posicionarse dentro de una
programa o para llamar a subrutina):
• CALL (llamar subrutina), RET (retornar a
programa principal), JMP (salto
incondicional), LOOP (bucle).
• Los saltos condicionales forman una larga
lista. Ej: JE, JNE, JG, JNG, JCXZ, JZ,
JNZ, JNC, JC, JPO, JPE, JP, JS.
REPERTORIO DE INSTRUCCIONES
Las instrucciones de control de máquina
afectan la operación del procesador:
• INT (interrupciones y las hay de variadas
formas), HLT (alto), LOCK (bloquear el
bus), NOP (no operación), ESC (transmitir
información al coprocesador), WAIT
(esperar que acabe el coprocesador.
MODOS DE DIRECCIONAMIENTO
En los microprocesadores Intel se encuentran varios
modos de direccionamiento básicos:
• De registro
• Inmediato
• Directo
• Indirecto
• Base + índice
• Relativo de registro
• Relativo base + índice
MODOS DE DIRECCIONAMIENTO
Para ilustrar los modos de direccionamiento se tomará como
ejemplo la instrucción MOV que es muy sencilla como
operación y tiene varios modos. La sintaxis de esta
instrucción es:
MOV destino, fuente
y lo que está en la fuente se copia en el destino.
En el destino puede haber registro o memoria, en la fuente
puede haber registro, memoria o dato inmediato. Las
principales opciones son:
MOV reg, reg
MOV reg, mem
MOV mem, reg
MOV reg, inm
MODOS DE DIRECCIONAMIENTO
• El direccionamiento por registro opera solamente con
registros: destino y fuente son registros.
Ejemplo:
MOV AX, BX
lo que está en BX se copia en AX.
MODOS DE DIRECCIONAMIENTO
• En el direccionamiento inmediato, el dato que va a ser
manipulado se conoce al momento de leer la instrucción y
antes de ser ejecutada.
Ejemplo: MOV AX, 1234h
el dato 1234h se copia en AX.
MODOS DE DIRECCIONAMIENTO
• En el direccionamiento directo, el dato se encuentra en
memoria y debe ser ubicado con la dirección que se provee
al momento de leer la instrucción.
Ejemplo:
MOV AX, [0100h]
lo que está entre corchetes es el desplazamiento dentro del
segmento de datos y sirve para localizar el dato a ser
copiado en AX.
MODOS DE DIRECCIONAMIENTO
• En el direccionamiento indirecto, el dato está en la
memoria y se posiciona con el desplazamiento que se
encuentra en el registro puntero o base.
Ejemplo:
MOV AX, [BX]
BX contiene el desplazamiento en el segmento de datos
para ubicar el dato que será copiado en AX.
MODOS DE DIRECCIONAMIENTO
• En el direccionamiento base + índice, el dato de la
memoria se posiciona con la suma del contenido de un
registro base y un registro índice.
Ejemplo:
MOV AX, [BX + SI]
al sumar BX con SI se obtiene el desplazamiento del
segmento donde se ubica el dato a ser copiado en AX.
MODOS DE DIRECCIONAMIENTO
• En el direccionamiento relativo por registro, la posición del
dato en la memoria es la suma del contenido de un registro
puntero con un número de uno o dos bytes (offset).
Ejemplo:
MOV AX, [BX + 0020h]
la suma de BX con 0020h permite posicionar el dato en la
memoria que se copia en AX.
MODOS DE DIRECCIONAMIENTO
• En el direccionamiento relativo base + índice, el dato de
memoria se ubica con la suma del contenido de un registro
base y un registro índice más un número offset.
Ejemplo:
MOV AX, [BX + SI + 0020h]
la suma de BX con SI con 0020h es la posición en memoria
del dato que va a ser copiado en AX.
MODOS DE DIRECCIONAMIENTO
Otras reglas adicionales deben ser consideradas en los modos
de direccionamiento:
• Si el orden del destino y de la fuente se intercambian se
mantiene el mismo modo de direccionamiento. [Notar que
no se puede intercambiar operandos en el modo de
direccionamiento inmediato donde el dato a manipular
siempre está en la fuente].
MODOS DE DIRECCIONAMIENTO
• Destino y fuente no pueden ser ambos memoria del mismo
segmento. Uno de ellos tiene que ser registro. El registro
determina el tamaño del operando. En procesadores Intel
posteriores aparecerán nuevos modos de direccionamiento
con opciones de transferencia memoria - memoria o
memoria - inmediato.
• Destino y fuente deben tener el mismo tamaño. Si en el
destino o en la fuente se encuentra un registro, entonces el
tamaño del operando debe corresponder al tamaño del
registro.
MODOS DE DIRECCIONAMIENTO
• Un dato mayor de un byte se escribe en la memoria en
varias posiciones consecutivas: el byte más significativo va
en la dirección más grande y el byte menos significativo, en
la menor.
Por ejemplo: En la instrucción MOV AX, 5734h seguido de
MOV [0100h], AX , el dato a escribir en la memoria es:
0100
34
Byte menos significativo
0101
57
Byte más significativo
Al leer de la memoria, el dato mayor de un byte tiene
también la misma disposición.
LENGUAJE DE MÁQUINA
El lenguaje de máquina es el código binario
que el microprocesador utiliza para
identificar instrucciones y controlar su
funcionamiento. En los procesadores Intel,
la longitud de las instrucciones del lenguaje
de máquina puede variar desde 1 hasta 13
bytes.
Para los procesadores de 16 bits la estructura
de las instrucciones en lenguaje de máquina
varía según el modo de direccionamiento.
LENGUAJE DE MÁQUINA
Para los Modos de Direccionamiento de
Registro o los que posicionan memoria, el
formato es:
LENGUAJE DE MÁQUINA
Para el Modo de Direccionamiento Inmediato
el formato es:
A veces el código de operación se escribe con
más de un byte.
LENGUAJE DE MÁQUINA – FORMA BÁSICA
El código de operación elige la operación que realiza
el microprocesador. Generalmente es de un byte y
contiene la siguiente información:
Código operación
D
W
Cuando D=1, el dato fluye del campo de R/M al
campo de REG; cuando D=0, el dato fluye del campo
de REG al campo de R/M. Cuando W=1, el dato es
de 16 bits; cuando W=0, el dato es de 8 bits.
LENGUAJE DE MÁQUINA – FORMA BÁSICA
LENGUAJE DE MÁQUINA – FORMA BÁSICA
En el byte de Campos MOD-REG-R/M, el campo
MOD especifica el modo de direccionamiento de
acuerdo a la tabla adjunta.
El campo REG especifica el tipo de registro que es
utilizado de acuerdo a lo que indica la tabla de
registros.
El campo R/M especifica el tipo de puntero utilizado
en la memoria o en todo caso especifica el otro
registro si MOD=00
LENGUAJE DE MÁQUINA – FORMA BÁSICA
TABLA PARA EL CAMPO MOD
MOD
función
00
Usa memoria sin desplazamiento (offset)
01
Usa memoria con un desplazamiento de 8 bits
con signo (offset)
Usa memoria con un desplazamiento de 16 bits
con signo (offset)
10
11
El campo R/M es un registro. Sólo para el
modo de direccionamiento de registro.
LENGUAJE DE MÁQUINA – FORMA BÁSICA
LENGUAJE DE MÁQUINA – FORMA BÁSICA
TABLA PARA EL CAMPO REG
Código
000
001
010
011
100
101
110
111
W=0
AL
CL
DL
BL
AH
CH
DH
BH
W=1
AX
CX
DX
BX
SP
BP
SI
DI
LENGUAJE DE MÁQUINA – FORMA BÁSICA
TABLA PARA
EL CAMPO
DE R/M
Código
Direccionamiento
000
DS:[BX+SI]
001
DS:[BX+DI]
010
SS:[BP+SI]
011
SS:[BP+DI]
100
DS:[SI]
101
DS:[DI]
110
SS:[BP]
111
DS:[BX]
LENGUAJE DE MÁQUINA – FORMA BÁSICA
Ejemplo: MOV DL,[DI]
Se escribe como: 10001010 = 8Ah, seguido
del byte: 00010101= 15h.
Ejemplo: código: 10001011 = 8Bh,
seguido del byte: 11101100 = ECh.
Corresponde a la instrucción MOV BP,SP
Ejemplo: MOV DL,[DI+1000h]
Se escribe en lenguaje de máquina cómo
8Ah, 85h, 00h, 01h.
LENGUAJE DE MÁQUINA – FORMA BÁSICA
Un modo de direccionamiento especial es el modo de
direccionamiento directo para el cual se utiliza
para MOD = 00 y para R/M = 110. Esta excepción
se explica por el hecho que el uso del registro
puntero base BP sólo puede usarse con
desplazamiento. Como MOD=00 le impide este
desplazamiento, entonces se trata del modo de
direccionamiento directo.
LENGUAJE DE MÁQUINA – CASO INMEDIATO
El modo de direccionamiento inmediato posee su
propio formato y su propio código de operación.
Por ejemplo, MOV SI, 2233h se escribe como:
BE = 10111110 , 33 = 00110011, 22 = 00100010
PROGRAMAS CON DEBUG
Ejecutar el programa
paso a paso y comprobar
cada transferencia:
mov ax, 1234
mov bx, 0200
mov si, 0020
mov cx, ax
mov dx, [bx]
mov [bx+si], cx
mov di, [bx+22]
int 20
Ejecutar el programa
paso a paso y comprobar
cada transferencia:
mov bx, 2040
push bx
mov ax, 1234
pop ax
int 20
La última instrucción
devuelve el control al
sistema operativo
PROGRAMAS CON DEBUG
C:\>debug
-n one.com
-l
-u 100 109
0D80:0100 B80600
MOV AX,0006
0D80:0103 BB0400
MOV BX,0004
0D80:0106 01D8
ADD AX,BX
0D80:0108 CD20
INT 20
-n one.com ; se usa para nombrar el programa
-l ; cargar el programa
-u 100 109 ; lista el programa en lenguaje de máquina
PROBLEMAS PROPUESTOS: 1
1. Determinar el modo de direccionamiento de cada una de
las siguientes instrucciones:
MOV DX, 1234H
MOV [BX + SI + 100h], BX
MOV CL, [BX + DI + 01h]
MOV [579AH], CX
MOV DX, [BX]
MOV AX, [BX + 2]
MOV CX, [0104H]
ADD AX, DX
MOV [BX + 6], AX
PROBLEMAS PROPUESTOS: 2
2. Considerar el siguiente conjunto de instrucciones en
lenguaje ensamblador:
MOV [SI + 200H], BX
MOV [BX + DI + 120H], AX
MOV [BX], CL
ADD CH, CL
PUSH AX
POP DX
Considerar los registros:
CS = 1000H IP = 0100H AX = 2030H DS = 2000H
DI = 0200H BX = 4050H ES = 3000H SI = 0300H
DX = 6070H SS = 4000H SP = 0400H CX = 8090H
F = 56F0H BP = 0500H
PROBLEMAS PROPUESTOS: 2
Se pide:
a. Traducir a lenguaje de máquina cada instrucción y escribir
las instrucciones en la memoria principal.
b. Indicar el contenido de los registros, incluyendo el registro
de estado, al término de la ejecución de este conjunto de
instrucciones y agregar el modo de direccionamiento de
cada una de las instrucciones.
PROBLEMAS PROPUESTOS: 3
3. Considerar el siguiente programa en lenguaje ensamblador
que incluye algunas etiquetas como mycode, mydata, stack,
las que representan números de 2 bytes.
ASSUME
CS: mycode, DS: mydata, SS: stack
PUSH DS
PUSHA
SUB AX, AX
MOV AX, mydata
MOV DS, AX
MOV BX, 0100H
MOV AX, [BX]
ADD AX, [BX + 2]
ADD AX, [BX + 4]
PROBLEMAS PROPUESTOS: 3
MOV [BX + 6], AX
POPA
HLT
Se pide:
a. Describir qué es lo que hace esta fracción de programa
b. Deducir el modo de direccionamiento de cada instrucción.
c. Traducir a lenguaje de máquina este programa con la
información que se adjunta.