CF=1 OF=1

Anuncio
Registros
Arquitectura x86
M. en C. Erika Vilches
Registro
• Area especial de almacenamiento de alta
velocidad dentro del CPU
• Registros del procesador x86
• Registros de datos de propósito general
• Registros de segmento
• Registros de estado y control (EIP e
EFLAGS)
Registros de datos de
propósito general
• Ocho registros de 32 bits para almacenar:
• Operandos enteros para operaciones
lógicas y aritméticas
• Apuntadores (direcciones de memoria)
Los 4 que usaremos Data
hoy: Registers (continued)
General-Purpose
31
16
8
ah
eax
bh
ebx
ch
ecx
dh
edx
ax
bx
cx
dx
0
al
bl
cl
dl
Accumulator
Base
Count
Data
69
Registro de banderas
• Registro de 32 bits
• Colección de bits individuales de estado y
control llamados banderas.
• Generalmente, cada bandera es manipulada
independientemente y no como un
conjunto.
Flags Register (continued)
eflags
...
31
of df
11
10
! CF carry flag
! PF parity flag
! AF auxiliary flag
! ZF Zero Flag
sf zf
7
6
af
pf
cf
4
2
0
! SF sign flag
! DF direction flag
! OF overflow flag
77
cf - Carry Flag
pf - Parity Flag
af - Auxiliary flag
zf - Zefo Flag
sf - Sign Flag
of - Overflow Flag
Ejercicio 1
Indique el estado de las banderas af, sf, pf y
zf después de realizar la siguiente
operación:
mov eax, 0x45612378
add eax, 0xA20001F2
CF y OF
Regla Universal
XOR
A
0
0
1
1
NOT
B
0
1
0
1
Z
0
1
1
0
A
0
1
Z
1
0
ADD
bold itálica = Carry Flag (CF)
bold itálica XOR bold = Overflow Flag (OF)
Interno
unsigned
00001000→
10001101
141
01101000
104
11110101
245
válido
signed
CF=0, OF=0
−115
104
− 11
válido
Interno
unsigned
01100000→
01100001
97
01110000
112
11010001
209
válido
signed
CF=0, OF=1
97
112
− 47
inválido
Interno
unsigned
11110000→
11010000
208
01110000
112
01000000
64
inválido
signed
CF=1, OF=0
− 48
112
64
válido
Interno
unsigned
10000000→
11000100
196
10010001
145
01010101
85
inválido
signed
CF=1, OF=1
− 60
−111
85
inválido
Carry Flag reporta validez bajo la interpretación unsigned.
Overflow Flag reporta validez bajo la interpretación signed.
Saltos Condicionales: JC, JNC, JO, JNO
Ejercicios ADD
Sume (con 8 bits) e indique todas las
banderas:
• 1+1
• 1 + (-1)
• 127 + 1
• (-128) + (-1)
SUB
NOT bold itálica = Carry Flag (CF)
Original
unsigned
signed
11000100
10010001
Diferencia
196
145
51
válido
CF=0
− 60
−111
51
válido
OF=0
Original
unsigned
signed
01100001
01110000
Diferencia
97
112
241
inválido
CF=1
97
112
− 15
válido
OF=0
bold itálica XOR bold = Overflow Flag (OF)
interno
11001100
11000100
01101111
00110011
Original
unsigned
10001101
01101000
Diferencia
141
104
37
válido
CF=0
interno
00000000
01100001
10010000
11110001
Original
unsigned
01100001
10010000
Diferencia
97
144
209
inválido
CF=1
signed
−115
104
37
inválido
OF=1
signed
97
−112
− 47
inválido
OF=1
interno
10011000
10001101
10011000
00100101
interno
01100000
01100001
01110000
11010001
Carry Flag reporta validez bajo la interpretación unsigned.
Overflow Flag reporta validez bajo la interpretación signed.
Saltos Condicionales: JC, JNC, JO, JNO
NOTA: SUB se hace internamente sumando (ADD) el complemento a 2 del substraendo
Ejercicios SUB
Reste (con 8 bits) e indique todas las
banderas:
• 0-1
• (-128) - 1
• 127 – (-1)
• (-32) - 65
Reglas de validez
Unsigned
•
•
•
Restar a – b es válido cuando a > b (CF = 0)
Restar a – b es inválido cuando a < b (CF = 1)
La suma es invalida cuando el resultado es menor que los sumandos (CF = 1)
Signed
•
•
•
•
•
•
La resta a – b es válida cuando a > b y el resultado es positivo (CF = 0, SF = 0)
•
La suma de dos cantidades de diferente signo es siempre válida (OF = 0)
La resta a – b es inválida cuando a > b y el resultado es negativo (OF = 1, SF = 1)
La resta a – b es válida cuando a < b y el resultado es negativo (OF = 0, SF = 1)
La resta a – b es inválida cuando a < b y el resultado es positivo (OF = 1, SF = 0)
La resta de dos cantidades del mismo signo es siempre valida (OF = 0)
La suma es inválida cuando la suma dos cantidades del mismo signo tiene el signo
opuesto (OF = 1)
Reglas de validez
Unsigned
•
•
•
X
Restar a – b es válido cuando a > b (CF = 0)
Restar a – b es inválido cuando a < b (CF = 1)
La suma es invalida cuando el resultado es menor que los sumandos (CF = 1)
Signed
•
•
•
•
•
•
La resta a – b es válida cuando a > b y el resultado es positivo (CF = 0, SF = 0)
•
La suma de dos cantidades de diferente signo es siempre válida (OF = 0)
La resta a – b es inválida cuando a > b y el resultado es negativo (OF = 1, SF = 1)
La resta a – b es válida cuando a < b y el resultado es negativo (OF = 0, SF = 1)
La resta a – b es inválida cuando a < b y el resultado es positivo (OF = 1, SF = 0)
La resta de dos cantidades del mismo signo es siempre valida (OF = 0)
La suma es inválida cuando la suma dos cantidades del mismo signo tiene el signo
opuesto (OF = 1)
Resumiendo
ADD
SUB
bold itálica = Carry Flag (CF)
NOT bold itálica = Carry Flag (CF)
bold itálica XOR bold = Overflow Flag (OF)
bold itálica XOR bold = Overflow Flag (OF)
Carry Flag reporta validez bajo la interpretación unsigned.
Overflow Flag reporta validez bajo la interpretación signed.
Descargar