Universidad deValladolid
Sistemas Electrónicos para elTratamiento de la Información 1
Dr. D. Jesús M. Hernández MangasDepartamento de Electricidad y Electrónica
2
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.1.- Entorno básico de ejecución
Estudiaremos un microprocesador de 32 bits (registros y ALU de 32 bits) con undireccionamiento de 36 bits (2^36=64 Gb)
3
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.1.- Entorno básico de ejecución
ü 2.1.1.- Modos de operación• Modo protegido
– Modo nativo– Todas las prestaciones disponibles– Mayor rendimiento– Recomendado S.O. y aplicaciones– Submodo Virtual86
Permite ejecutar software 8086 con direccionamiento real en un entorno multitareaprotegido
• Modo de direccionamiento real– Entorno de trabajo de un 8086 con algunas extensiones– El microprocesador arranca (reset) en este modo
• Modo de manejo del sistema– Permite el control del ahorro de energía– Aumenta la seguridad del sistema
4
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.1.- Entorno básico de ejecución
ü 2.1.2.- Organización de la memoria• La memoria que direcciona el procesador en sus buses se llama memoria
FÍSICA• Esta memoria está organizada en grupos de 8 bits (bytes) apuntados por una
única dirección física• El espacio de direcciones físicas es de 32 bits (0..2^32-1): 4 Gb• El acceso a memoria utiliza mecanismos como la segmentación y la
paginación, muy útiles para los S.O. Seguros• Los programas no referencian directamente la memoria física sino a una
memoria de direcciones lineales• Modelos de memoria
– Modelo plano– Modelo segmentado– Modelo de direccionamiento real
5
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.2.- Organización de la memoria
• Modelo plano– Toda la memoria aparece como un espacio
de direcciones continuo llamado espacio dedirecciones lineales 0.. 2^32-1
– El código, los datos y la pila están contenidosen él
• Modelo segmentado– Código, datos y pila están en segmentos
separados– Para acceder a un byte necesitamos una
dirección lógica compuesta de un selectorde segmento y un desplazamiento (offset).También se conoce como puntero far olejano
– El selector identifica el segmento y el offsetindica el byte dentro del segmento
– Se pueden direccionar 16383 segmentos dediferentes tamaños y tipos. El tamañomáximo es de 4 Gb
• Modelo de direccionamiento real
Segmento de PILA
Segmento deDATOS
Segmento deCÓDIGO
Memoria
Dirección 0
Segmento deCÓDIGO
Segmento deDATOS
Segmento dePILA
Funcionamiento de la PILAEs una estructura de datos cuyo funcionamiento es automático.Existen instrucciones para apilar (PUSH) datos y para extraer (POP) datos de la PILA.Se trata de una PILA LIFO (Last In, First Out) El último dato apilado es el primero que se extrae.
Dato 4Punterode pila
Dato 4
Dato 3
Punterode pila
PUSH
Dato 3
Dato 2
Dato 1 Dato 1
Dato 2
Dato 5
POP
Estructura programasTodos los programas se dividen en tres secciones: CÓDIGO, DATOS y PILA
Última dirección
Segmentode PILA
6
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.2.- Organización de la memoria
• Modelo de direccionamiento real– Es el modelo de memoria del 8086– Es un caso particular del modelo segmentado– El espacio de direcciones lineales es de
2^20 bytes = 1 Mb– El tamaño máximo de un segmento es de
64 kb– La dirección lógica se convierte en
dirección lineal como sigue:
– En este modelo hay “problemas” si elsegmento es pequeño y el programa esgrande (>64 kb), ya que hay que dividir elprograma en varios segmentos y hay quemodificar los selectores de segmento altransferir el control de unos a otros
7
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.1.- Entorno básico de ejecución
ü 2.1.2.- Organización de la memoriaHay dos tamaños de operandos y direcciones:
• Direccionamiento de 32 bits– Selector de segmento de 16 bits– Offset de 32 bits– Operandos de 8 y 32 bits
• Direccionamiento de 16 bits– Selector de segmento de 16 bits– Offset de 16 bits– Operandos de 8 y 16 bits
8
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.3.- Registros
• 2.1.3.1.- Registros de datos– EAX: Acumulador– EBX: Base. Puntero de datos en DS– ECX: Contador– EDX: Datos. Puntero de E/S. Extensión de
EAX en * y %– ESI: Puntero índice fuente (DS:ESI)– EDI: Puntero índice destino (ES:EDI)– ESP: Puntero de pila (SS:ESP)– EBP: Puntero base (SS:EBP)
• 2.1.3.2.- Registros selectores de segmento– CS: Selector del segmento de código– DS: Selector del segmento de datos– SS: Selector del segmento de pila– ES, FS, GS: Selectores de segmentos de
datos extra
9
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.3.- Registros
• 2.1.3.3.- Registro EIP– Es el puntero de instrucción (32 bits)– CS:EIP apunta a la siguiente instrucción a ejecutar– No se puede modificar explícitamente (sólo con instrucciones de salto)
• 2.1.3.4.- Registro EFLAGS– Es el registro de condiciones extendido
i) Flags de estadoIndican el resultado de
instrucciones aritméticas, desplazamientos de bits, etc.
– CF. Carry flagIndica el acarreo o “la que me
llevo”
254 11111110b003 00000011b257 1 00000001b
CF
10
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.3.- Registros
• 2.1.3.4.- Registro EFLAGSi) Flags de estado
– PF: Parity flagParidad. Se activa si el byte menos significativo del resultado contiene un númeropar de “1”s
– AF: Adjust flagSemiacarreo. Indica el acarreo del bit 3 al 4. Usado en aritmética BCD (BinaryCoded Decimal)
– ZF: Zero flagCero. Se activa si el resultado es cero
– SF: Sign flagSigno. Coincide con el bit más significativo (MSB) del resultado (=1: negativo)
– OF: Overflow flagDesbordamiento. En números interpretados con signo, se activa si el resultado nocabe en el operando destino. Sirve para prevenir que el acarreo al MSB cambie elsigno del resultado
127 01111111b 127+ 2 00000010b 2¿-127? 10000001b 129 => No cabe, OF=1
11
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.3.- Registros
• 2.1.3.4.- Registro EFLAGSii) Flags de control
– DF: Direction flagIndica la dirección de procesamiento de las instrucciones que trabajan con bloquesde datos (=0, hacia posiciones de memoria crecientes; =1 hacia atrás). Estasinstrucciones autoincrementan o autodecrementan los punteros fuente y/o destinodependiendo de este bit
iii) Flags del sistemaNo deben ser modificados por los programas de usuarios– IF: Interruption enable flag
Máscara de interrupción. Las interrupciones externas debidas a la patilla /INTpueden ser inhibidas (=1) o permitidas (=0) con este bit
– TF: Trap flagEjecución paso a paso. Habilita la depuración paso a paso. Cuando está activado trasla ejecución de una instrucción se produce una interrupción para poder comprobarel resultado de la instrucción
– IOPL: Input/output privilege level field (0=mayor,.. ,3=menor)Nivel de privilegio de E/S. Si el nivel de privilegio de la tarea o programa actualCPL>=IOPL no se podrá acceder a la E/S
12
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.3.- Registros
• 2.1.3.4.- Registro EFLAGSiii) Flags del sistema
– NT: Nested task. Tarea anidada– RF: Resume flag. Reanudación. Controla la respuesta del procesador en las
excepciones de depuración– VM: Virtual 8086 mode flag. Habilita el submodo virtual86 (=1). Poniendolo a
cero se regresa al modo de funcionamiento protegido– AC: Alignment check flag. Habilita la comprobación del alineamiento en las
referencias a memoria– VIF: Virtual interrupt flag. Imagen virtual de IF. Se usa junto con VIP– VIP: Virtual interrupt pending flag. Indica que hay una interrupción pendiente. El
procesador solo lee el contenido de este flag. Lo modifica el S.O.– ID: Identification flag. Indica el soporte o no de la instrucción CPUID que identifica
la CPU
13
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.4.- Tipos de datos
Los datos no necesitan estar alineados en memoria, aunque para aumentar elrendimiento es conveniente que estén alineados
• Enteros con signo– Byte [-128 .. 127]– Word [-32768 .. 32767]– Dword [-231.. 231 –1]
• Enteros sin signo– Byte [0 .. 255]– Word [0 .. 65535]– Dword [0 .. 232 –1]
• BCD– No empaquetado– Empaquetado
14
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.4.- Tipos de datos
Los datos no necesitan estar alineados en memoria, aunque para aumentar elrendimiento es conveniente que estén alineados
• Punteros– Cercano (near): 32 bits– Lejano (far): 48 bits
• Campos de bitEs una secuencia continua de bitsPuede empezar en cualquier bit de cualquier byte
de la memoria y puede tener una longitud de hasta 32 bits
• Bloques de datos (strings)Son secuencias continuas de bit, bytes, words o dwords con una longitud
de hasta 232 –1 bits, bytes, words o dwords respectivamente
• Punto flotanteMás adelante (Tema 3)
• Tipos MMXMás adelante (Tema 4)
15
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.5.- Modos de direccionamiento de operandos
i) Operandos inmediatosEl operando va codificado detrás de la instrucción. El dato <= 232 -1Ej.: ADD EAX,14 ; EAX=EAX+14
ii) Operandos en registrosEl dato está en un registro– Registros de propósito general de 32 bits: EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP– Registros de propósito general de 16 bits: AX, BX, CX, DX, SI, DI, SP, BP– Registros de propósito general de 8 bits: AH, AL, BH, BL, CH, CL, DH, DL– Registros de segmento: CS, DS, ES, SS, FS, GS– Registro EFLAGS– Registros del sistema: GDTR, IDTR, etc,...
iii) Operandos en memoriaFormado por:– Selector de segmento– Desplazamiento u offset
16
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.5.- Modos de direccionamiento de operandos
iii) Operandos en memoria• Selector de segmento
– Implícitamente
– Explícitamente. Solo con los datos localesEj.: MOV [ES:EBX],EAX ; [ES:EBX] = EAX
• Desplazamiento u offsetExcepto la escala son valores en complemento a 2
Si usamos ESP o EBP se usa SSsino se usa DS implicitamente
4
8
17
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)ü 2.1.5.- Modos de direccionamiento de operandos
iv) Operandos en puertos de E/S
– Entrada/salida por puertos hardwareA la entrada/salida (E/S) se accede a través de un mapa de direcciones de 16 bits paralelo al de la memoriaTiene 65536 puertos de entrada/salida de 8, 16 o 32 bitsSe direcciona de forma inmediata (sólo direcciones 8 bits: 0..255)O a través del registro DX (direcciones de 16 bits)Se utilizan instrucciones especiales: IN y OUT
– Entrada/salida mapeada en memoriaSe utiliza el espacio de direcciones de la memoria para situar sistemas periféricosexternos a la CPU. Si hay un periférico no puede haber memoriaLas direcciones son de 32 bitsSe usan las instrucciones de acceso a memoria (MOV, etc.)Habitual en tarjetas PCI (reservan direcciones muy altas)
18
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
Ej.: MOV EAX,[EBX+10]
MOV DWORD [EBX+10],5
MOV BX,ES
MOV DS,AX
MOV ES,314
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.1.- Transferencia de datos• MOV destino,fuente
Copia datos de la fuente al destino
• CMOVcc destino,fuenteCopia de datos condicionalA partir de Pentium Pro
CMOVE/CMOVZ Conditional move if equal/Conditional move if zero
CMOVNE/CMOVNZ Conditional move if not equal/Conditional move if not zero
CMOVA/CMOVNBE Conditional move if above/Conditional move if not below or equal
CMOVAE/CMOVNB Conditional move if above or equal/Conditional move if not below
CMOVB/CMOVNAE Conditional move if below/Conditional move if not above or equal
CMOVBE/CMOVNA Conditional move if below or equal/Conditional move if not above
CMOVG/CMOVNLE Conditional move if greater/Conditional move if not less or equal
CMOVGE/CMOVNL Conditional move if greater or equal/Conditional move if not less
CMOVL/CMOVNGE Conditional move if less/Conditional move if not greater or equal
CMOVLE/CMOVNG Conditional move if less or equal/Conditional move if not greater
CMOVC Conditional move if carry
CMOVNC Conditional move if not carry
CMOVO Conditional move if overflow
CMOVNO Conditional move if not overflow
CMOVS Conditional move if sign (negative)
CMOVNS Conditional move if not sign (non-negative)
CMOVP/CMOVPE Conditional move if parity/Conditional move if parity even
CMOVNP/CMOVPO Conditional move if not parity/Conditional move if parity odd
Sin signo
Con signo
19
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.1.- Transferencia de datos• XCHG destino,fuente
Intercambia datos entre fuente y destino• BSWAP r32
Cambia el orden de los bytes en un registro de 32 bits. Pasa de BIG ENDIAN a LITTLEENDIAN y viceversa
• XADD r/m,rIntercambia y suma
TEMP=DESTINO+FUENTEFUENTE=DESTINODESTINO=TEMP
• CMPXCHG r/m,rCompara e intercambia
SI Acumulador==DESTINOENTONCES
ZF=1DESTINO=FUENTE
SINOZF=0Acumulador=DESTINO
20
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.1.- Transferencia de datos• CMPXCHG8B m64
Compara e intercambia 8 bytesSI EDX:EAX==DESTINO
ENTONCESZF=1DESTINO=ECX:EBX
SINOZF=0EDX:EAX=DESTINO
• PUSH r16/32 , POP r16/32– Introduce en la pila/ Extrae de la pila
PUSH
• Decrementa ESP en 2/4 bytes
• Guarda [ESP]=rm16/32
POP
• Extrae rm16/32=[ESP]
• Incrementa ESP en 2/4 bytes
Ej.: PUSH AX
PUSH DWORD [EBX]
PUSH DWORD 1000h
PUSHF
POPFD
POP WORD [SI]
POP ES
21
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.1.- Transferencia de datos• PUSHA / PUSHAD/ POPA /POPAD
Introduce en la pila/ Extrae de la pila todos los registros de propósito general de 16/32bits
Introduce en este orden:EAX, ECX, EDX, EBX, ESP, EBP, ESI y EDI
Recupera en sentido inverso, pero descarta el valor de SP/ESP
• IN Op1, Op2Lee de un puerto de E/S hardware de 8/16/32 bits. Op1=PORT[Op2]Op1 = AL, AX ó EAXOp2 = Inm8 ó DX
• OUT Op1, Op2Escribe e un puerto de E/S hardware de 8/16/32 bits. PORT[Op1]=Op2Op1 = Inm8 ó DXOp2 = AL, AX ó EAXEj.: OUT 64h,AL
OUT DX,EAXIN AX,7F8h
MOV DX,7F8h
IN AX,DX
22
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.1.- Transferencia de datos• CWD / CDQ
Convierte word en dword / convierte dword en qword. Extiende el signoAX -> DX:AXEAX –> EDX:EAX
• CBW / CWDEConvierte byte en word / convierte word en dwordAL -> AXAX -> EAX !Ojo¡
• MOVSX r16/32,rm8/16Copia y extiende el signoMOVSX AX,BH ; Antes AX=? BH=0F0h
; Después AX=0FFF0h BH=0F0h
• MOVZX r16/32,rm8/16Copia y extiende con cerosMOVZX AX,BH ; Antes AX=? BH=0F0h
; Después AX=00F0h BH=0F0h
23
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.2.- Aritméticas• ADD Op1,Op2
Suma Op1=Op1+Op2Afecta a CF, ZF, OF y SF
ADD EAX,2 ; EAX = EAX + 2ADD WORD [BX+5],5ADD EBX,[ESI]
• ADC Op1,Op2Suma con acarreo Op1=Op1+Op2+CFEj.: ADD EAX,EBX ; EDX EAX 64 bits
ADC EDX,ECX ; ECX EBX 64 bits CF EDX EAX 65 bits
• SUB Op1, Op2Resta Op1=Op1-Op2
• SBB Op1,Op2Resta con acarreo (borrow) Op1=Op1-Op2-CF
24
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.2.- Aritméticas• IMUL
Multiplicación con signo– IMUL Op AX = AL*r/m8 DX AX = AX*r/m16
EDX EAX = EAX*r/m32– IMUL Op1,Op2 Op1 = Op1 * Op2– IMUL Op1,Op2,Op3 Op1 = Op3 * Op2
Op3 = Inm8/16/32 con signo
• MUL OpMultiplicación sin signoLa diferencia con respecto a IMUL radica en cómo se modifican los FLAGS de
condicionesAX = AL*r/m8
DX AX = AX*r/m16EDX EAX = EAX*r/m32
Si el resultado nocabe, CF=OF=1
25
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.2.- Aritméticas• IDIV Op
Divide con signoAX/rm8 => Cociente = AL, Resto = AH(DX AX)/rm16 => Cociente = AX, Resto = DX(EDX EAX)/rm32 => Cociente = EAX, Resto = EDX
Si el cociente no cabe, excepción nº cero• DIV Op
Divide sin signo. Se diferencian en el rango del resto. Ej. Caso de división entre 8 bits:» Con signo -128 .. 127 y en la modif. de EFLAGS» Sin signo 0 .. 255
• INC OpIncrementa Op = Op + 1 ; No afecta a CF
• DEC OpDecrementa Op = Op - 1 ; No afecta a CF
• NEG OpComplementa a 2 Op = - Op
• CMP Op1,Op2Compara Op1 – Op2 y modifica los FLAGS. No se modifican los
operandos
26
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.3.- Aritmética BCD
• DAAAjuste decimal de AL después de la suma (BCD empaquetado)
; AL = 79h (121), BL = 35h (53)ADD AL,BL ; AL = AEh(174) valor no BCDDAA ; AL = 14h (20) y CF=1
• DASAjuste decimal de AL después de la resta (BCD empaquetado)
• AAAAjuste ASCII después de la suma (BCD no empaquetado)
• AASAjuste ASCII después de la resta (BCD no empaquetado)
• AAMAjuste ASCII después del producto (BCD no empaquetado)
• AADAjuste ASCII antes de la división (BCD no empaquetado)
79 35114
0102h AAD 0Ch----- ==> ---- = 3h 4h 4h
27
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
4 2.2.- Repertorio básico de instruccionesü 2.2.4.- Lógicas
• AND Op1,Op2 Op1 = Op1 AND Op2• OR Op1,Op2 Op1 = Op1 OR Op2• XOR Op1,Op2 Op1 = Op1 XOR Op2• NOT Op Op = NOT Op
ü 2.2.5.- Desplazamientos y rotaciones• SAR Op1,CL/Inm8
Desplazamiento aritmético a la derecha, máximo 31 posiciones. Es una división (consigno) rápida por potencias de 2
• SHR Op1,CL/Inm8Desplazamiento lógico a la derecha, máximo 31 posiciones. Es una división (sin signo)
rápida por potencias de 2
• SAL/SHL Op1,CL/Inm8Desplazamiento aritmético/lógico a la izquierda, máximo 31 posiciones. Es un
producto por una potencia de 2
2.- Arquitectura Intel (Nivel Aplicación)
28
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.5.- Desplazamientos y rotaciones
• SHRD rm16/32, r16/32, Inm8/CL• SHLD rm16/32, r16/32, Inm8/CL
29
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.5.- Desplazamientos y rotaciones
• ROR rm8/16/32,Inm8/CL Rotación a la derecha
• ROL rm8/16/32,Inm8/CL Rotación a la izquierda
• RCR rm8/16/32,Inm8/CL Rotación a la derecha a través del acarreo
• RCL rm8/16/32,Inm8/CL Rotación a la izquierda a través del acarreo
30
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.6.- Manejo de bits o byte
• BT rm16/32,r16/32/Inm8Almacena el bit comprobado en CF. Si se refiere a memoria el rango es –231.. 231-1
• BTS rm16/32,r16/32/Inm8Comprueba el bit y lo pone a “1”
• BTR rm16/32,r16/32/Inm8Comprueba el bit y lo pone a “0”
• BTC rm16/32,r16/32/Inm8Comprueba el bit y lo complementa
• BSF r16/32,rm16/32Busca primer bit a “1” hacia delante en la fuente (16/32 bits) comenzando por el LSBit y
almacena su posición (con signo) en el destino. Si lo encuentra ZF=0, sino ZF=1
• BSR r16/32,rm16/32Busca primer bit a “1” hacia atrás en la fuente comenzando por el MSBit y almacena su
posición (con signo) en el destino. Si lo encuentra ZF=0, sino ZF=1
• SETcc rm8Si se cumple la condición (las mismas que con CMOVcc ó Jcc) introduce un “1”, sino un “0”
31
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.6.- Manejo de bits o byte
• TEST Op1,Op2Realiza la función Op1 AND Op2 y según el resultado modifica SF, ZF y PF
ü 2.2.7.- Transferencia de control• JMP rel8 Salto SHORT (relativo: -128..+127)• JMP dir Salto NEAR (intrasegmento) rm16/rm32• JMP sel:dir Salto FAR (intersegmento) ptr16/ptr32
Salto incondicionalEj.: JMP Fin ;
JMP NEAR OtroladoJMP 1230h:128383843h
FIN: ; El : indica codificar salto SHORT
• JccSalto condicional relativo. Sólo saltos intrasegmento. Utiliza las mismas condiciones
que CMOVcc y SETcc. Además:JCXZ si CX=0 salta ¡Ojo! No decrementa CX, ni comprueba ZFJECXZ si ECX=0 salta
32
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.7.- Transferencia de control
• LOOP rel8Bucle con CX/ECX como contador– Decrementa CX/ECX dependiendo del modo de direccionamiento 16/32 bits– Si CX/ECX != 0 salta a la dirección– Sino pasa a la instrucción siguiente
MOV CX,20 ; Repetirá 20 veces el bucleBucle: ....
....LOOP Bucle ; Fin del bucle
• LOOPZ/LOOPE rel8Idem, repite si ( CX/ECX distinto de cero y ZF = 1 )
• LOOPNZ/LOOPNE rel8Idem, repite si ( CX/ECX distinto de cero y ZF = 0 )
33
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.7.- Transferencia de control• CALL dir Llamada NEAR
• CALL sel:dir Llamada FAR
Su funcionamiento es mucho más complejo (modo protegido)
– ESP = ESP –4
– [ESP]=CS
– ESP=ESP-4
– [ESP]=EIP
– EIP=dir32
– CS=sel
– ESP = ESP –2
– [ESP]=CS
– ESP=ESP-2
– [ESP]=IP
– IP=dir16
– CS=sel
– ESP = ESP –2
– [ESP]=IP
– IP=dir16
– ESP = ESP –4
– [ESP]=EIP
– EIP=dir32
Direccionamiento 32 bits
Direccionamiento 16 bits
Direccionamiento 16 bits
Direccionamiento 32 bits
34
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.7.- Transferencia de control
• RET Retorno de subrutinaRecupera IP/EIP de la pila si es un retorno NEARRecupera además CS de la pila si es un retorno FAR (instr. RETF)
• RET nRetorna y ESP=ESP+n
• INT Inm8Llamada software a interrupción
• IRET/IRETDRetorno de interrupción (16/32 bits)
Mucho más complicado en modo protegido
– ESP = ESP – 2
– [ESP]= FLAGS
– ESP = ESP - 2
– [ESP]= CS
– ESP = ESP – 2
– [ESP] = IP
– IF=0, TF=0, AC=0
– IP = [ 0: Inm8*4]
– CS = [ 0: Inm8*4+2]
– IP = [ESP]
– ESP = ESP + 2
– CS = [ESP]
– ESP = ESP + 2
– EFLAGS = [ESP]
– ESP = ESP + 2
– IF=1
35
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.7.- Transferencia de control
• INT3Idéntico a INT 3, solo que ocupa un byte. Para poner puntos de ruptura
• INTOSe produce INT 4 si OF=1
• BOUND– Detecta un valor fuera de rango para indexar una matriz
• ENTER– Reserva una zona de datos en la pila para parámetros locales (para lenguajes de alto
nivel)
• LEAVE– Salida de ENTER
36
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.8.- Manejo de bloques de datos
Utiliza como punteros DS:ESI y ES:EDI si direccionamiento 32 bits (directiva BITS 32)Utiliza como punteros DS:SI y ES:DI si direccionamiento 16 bits (directiva BITS 16)
• MOVSB/MOVSW/MOVSDCopia un bloque de datos (MOVe String)[ES:EDI] = [DS:ESI]Si EFLAGS.DF=0 ESI = ESI + (1,2,4)
EDI = EDI + (1,2,4)Si EFLAGS.DF=1 ESI = ESI - (1,2,4)
EDI = EDI - (1,2,4)
• CMPSB/CMPSW/CMPSDCompara un bloque de datos (CoMPare String)CMP [ES:EDI],[DS:ESI]ESI = ESI ± (1,2,4)EDI = EDI ± (1,2,4)
La salida es EFLAGS.ZF=1 si son iguales
37
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.8.- Manejo de bloques de datos• SCASB/SCASW/SCASD
Explora un bloque de datos en busca de un elemento (SCAn String)CMP Acumulador,[ES:EDI]EDI = EDI ± (1,2,4)La salida es EFLAGS.ZF=1 si son iguales
• LODSB/LODSW/LODSDLee un bloque de datos (LOaD String)Acumulador = [DS:ESI]ESI = ESI ± (1,2,4)
• STOSB/STOSW/STOSDEscribe un bloque de datos (STOre String)[ES:EDI] = AcumuladorEDI = EDI ± (1,2,4)
• INSB/INSW/INSDLee un bloque de datos desde E/S (INput String)[ES:EDI] = Port[DX] de 8,16 o 32 bitsEDI = EDI ± (1,2,4)
• OUTSB/OUTSW/OUTSDEscribe un bloque de datos en E/S (OUTput String)Port[DX] de 8,16 o 32 bits = [DS:ESI]ESI = ESI ± (1,2,4)
38
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.8.- Manejo de bloques de datos
• REP / REPZ / REPE / REPNZ /REPNEPrefijo de repetición– REP Decrementa CX/ECX y si no es cero repite la instrucción siguiente– REPZ/REPE Idem, y repite si CX/ECX no es cero y ZF = 1– REPNZ/REPNE
Idem, y repite si CX/ECX no es cero y ZF = 0
Copia de un bloqueMOV AX,DATOSMOV DS,AXMOV ES,AXMOV ESI,TXTORG ; DS:ESI apunta al origenMOV EDI,TXTDEST ; ES:EDI apunta al destinoCLD ; DF=0, incrementará punterosMOV ECX,TAMANOREP MOVSB ; Lo copia
39
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.8.- Manejo de bloques de datosCompara dos bloques
MOV AX,DATOSMOV DS,AXMOV AX,DATOS2MOV ES,AXMOV ESI,TXTORG ; DS:ESI apunta al origenMOV EDI,TXTDEST ; ES:EDI apunta al destinoCLD ; DF=0, incrementará punterosMOV ECX,TAMANOREPZ CMPSB ; Si al salir ZF = 1 es que son iguales
; sino DS:ESI-1 apunta al primer dato; diferente
Busqueda de un dato en un bloqueMOV AL,CarácterMOV BX,DATOSMOV DS,BXMOV EDI,TXTDEST ; ES:EDI apunta al BLOQUECLD ; DF=0, incrementará punterosMOV ECX,TAMANOREPNE SCASB ; Si al salir ZF = 1 es que encontró el dato en la
; posición ES:EDI –1
40
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)4 2.2.- Repertorio básico de instrucciones
ü 2.2.9.- Control de FLAGS• STC EFLAGS.CF = 1• CLC EFLAGS.CF = 0• CMC EFLAGS.CF = /CF• CLD EFLAGS.DF = 0• STD EFLAGS.DF = 1• LAHF
Carga FLAGS en AH AH = (SF,ZF,AF,PF,CF)Bit 4 3 2 1 0
• SAHFGuarda AH en FLAGS
• STI EFLAGS.IF = 1• CLI EFLAGS.IF = 0
ü 2.2.10.- Acceso a registros de segmento• LDS, LES, LFS, LGS, LSS
Cargan un puntero FAR LDS r16/32, Ptr32/48
Ej.: LDS DX,[ES:BX]
DS
DX
BX
ES
41
Sistemas Electrónicos para el Tratamiento de la Información 1
Jesús M. Hernández
2.- Arquitectura Intel (Nivel Aplicación)
4 2.2.- Repertorio básico de instruccionesü 2.2.11.- Miscelánea
• LEA r16/32,memCarga dirección efectiva. Para simplificar direccionamientos posterioresEj.:
LEA BX,[SI+16] ; BX = SI+16LEA EAX,[ES:EBX+EAX*4+16] ; EAX = EBX + EAX*4 + 16
• NOPNo operación. Utilidad: alinear instrucciones en memoria
• UD2Instrucción no definida. Genera una excepción de instrucción no reconocida
• XLATBTraduce bytes usando una tabla de 256 valoresAL = [ DS : EBX + (sin signo) AL ]
• CPUIDIntroduce en EAX, EBX, ECX, EDX la información de identificación del procesador