CMPSX
– Referencia del Lenguaje Ensamblador
El resultado de la bandera C de CMPS (Compare signado) puede diferir de CMP (Compare no signado) donde el signo interpretado
2
de la fuente y destino son opuestos. El primer ejemplo en el segundo grupo, muestra que CMPS activa C porque el signado
$8000_0000 (-2,147,483,648) es menor que el signado $7FFF_FFFF (2,147,483,647). CMP, sin embargo, limpiara C debido a que el no
signado $8000_0000 (2,147,483,648) no es menor que el no signado$7FFF_FFFF (2,147,483,647). El segundo ejemplo es el caso
complementario donde la fuente y destino se intercambian.
El ejemplo del tercer grupo, arriba, demuestra casos donde la comparación se refleja apropiadamente en las banderas pero la
3
salida de destino cruzo la frontera del signo (error de sobre flujo de signo) en cualquiera de las direcciones negativo o positivo.
Esta condición de sobre flujo signado no puede reflejarse en las banderas. Si esta condición es importante en alguna aplicación,
desarrolle un CMPS sin efecto WR, observe el estado de C (signado borrow), luego desarrolle un SUBS y observe el estado de C
(signado overflow).
Explicación
CMPSX
(Compare signado, Extended) compara los valores signados de SValue1 y SValue2 mas
C. Las banderas Z y C , si se escribieron, indican la relación relativa igual, mayor o menor
entre los dos. La instrucción
; comparaciones de 64-bit, por ejemplo.
En una operación multi-long signada, la primera instrucción es no signada (Ej.:
cualquier instrucción intermedia son no signadas, extendidas (Ej.:
instrucción es signada, extendida (Ej.:
todas las operaciones de comparación.
por ejemplo, una comparación doble long signado (64-bit) deberá verse así:
cmp
XLow, YLow
cmpsx
XHigh, YHigh wc wz
Después de ejecutar lo anterior, las banderas Z y C indican la relación entre los dos valores
doble-long (64-bit). Si XHigh:XLow inicio como $FFFF_FFFF:FFFF_FFFF (-1) y
YHigh:YLow era $0000_0000:0000_0001 (1) el resultado de las banderas será: Z = 0 y C = 1;
(Value1 < Value2). Esto se demuestra abajo. Note que la comparación es realmente solo una
resta y el resultado no se escribe; los resultados de las banderas Z y C son importantes.
(XHigh:XLow)
- (YHigh:YLow)
Pagina 284 · Manual Propeller v1.1
CMPSX
se usa para desarrollar comparaciones signadas multi-long
CMPSX
). Asegúrese de usar
wc wz
'Compara long bajo; guarda C y Z
'Compara long alto; guarda C y Z
Hexadecimal
(alto)
(bajo)
$FFFF_FFFF:FFFF_FFFF
- $0000_0000:0000_0001
----------------------
= $FFFF_FFFF:FFFF_FFFE
CMPX
), y la ultima
WC
, y opcionalmente
Decimal
-1
-
1
---------------
=
-2
CMP
),
WZ
, en
Banderas
n/a
n/a
--------
Z=0, C=1