El resultado de la bandera C CMPX (Compare no signado, Extended) puede diferir de CMPSX (Compare signado, Extended) donde el
4
"signo interpretado" de la fuente y destino son opuestos. El primer ejemplo en el segundo grupo, arriba, muestra que CMPX limpia
C porque el no signado $8000_0000 (2,147,483,648) no es menor que el no signado $7FFF_FFFF (2,147,483,647). CMPSX, sin
embargo, tendrá que activar C porque el signado $8000_0000 ( 2,147,483,648) es menor que el signado $7FFF_FFFF
(2,147,483,647). El segundo ejemplo es el caso complementario donde los valores fuente y destino se cambian. Observe que los
ejemplos con diferente Z y C no se muestran pero tienen efectos similares a los otros ejemplos.
Explicación
CMPX
(Compare Extended) compara los valores no signados de Value1 y Value2 mas C. Las
banderas Z y C, si están escritas indican la relación relativa igual, mayor o menor entre las
CMPX
dos. La instrucción
64 bit, por ejemplo.
En una operación multi-long, la primer instrucción es no signada (Ej.:
instrucción intermedia es no signada, extendida (Ej.:
CMPX
signada, extendida (
valores originales multi-long. Vamos a discutir valores no signados multi-long aqui; ver
CMPSX
en Pág. 283 para ejemplos con valores multi-long signados. Asegúrese de usar efectos
WC
WZ
, y opcionalmente
, en todas las instrucciones en la operación de comparación.
Por ejemplo, una comparación doble-long no signado (64-bit) deberá verse como:
cmp
XLow, YLow
cmpx
XHigh, YHigh wc wz
Después de ejecutar la instrucción la banderas C y Z indicaran la relación entre los dos
valores dobles longs (64-bit). Si XHigh:XLow inicio como $0000_0001:0000_0000
(4,294,967,296) y YHigh:YLow fue $0000_0000:0000_0001 (1) el resultado de las banderas
será: Z = 0 y C = 0; (Value1 > Value2). Esto se demuestra a continuación. Observe que la
comparación es realmente solo una resta con el resultado no escrito; sin embrago el resultado
de la bandera Z y C es importante.
(XHigh:XLow)
- (YHigh:YLow)
CMPX
WZ
Para
, si el efecto
Value1 es igual a Value2 + C (use
WC
efecto
, la bandera C se activa (1) si Value1 es menor que Value2 (como valor multi-long).
3: Referencia del Lenguaje Ensamblador –
se usa para desarrollar comparaciones multi-long; comparaciones de
) o signada, extendida (
wc wz
'Compara longs bajos; Guarda C y Z
'Compara longs altos
Hexadecimal
(high)
(low)
$0000_0001:0000_0000
- $0000_0000:0000_0001
----------------------
= $0000_0000:FFFF_FFFF
se especifico, la bandera Z se activa (1) si Z se activo previamente y
WC
WZ
y
en instrucciones
CMPX
), y la ultima instrucción es no
CMPSX
) dependiendo de la naturaleza de los
Decimal
4,294,967,296
-
---------------
= 4,294,967,295
CMP
CMPX
y
CMPX
CMP
), cualquier
Banderas
n/a
1
n/a
--------
Z=0, C=0
). Si se especifico el