CMP
– Referencia del Lenguaje Ensamblador
CMP
instrucción: Compara dos valores no signados.
CMP
Value1,
Value2
#
Resultado: opcionalmente, estado de igualdad y mayor que/menor que se escriben en Z y C.
Value1
(campo-d) es el registro que contiene el valor a comparar con Value2.
Value2
(campo-s) es un registro o literal de 9-bit cuyo valor se compara con Value1.
Tabla Opcode:
–INSTR– ZCRI –CON–
–DEST–
100001 000i 1111 ddddddddd sssssssss
Tabla de verdad:
Destino
1
$0000_0003; 3
$0000_0003; 3
$0000_0003; 3
$8000_0000; 2,147,483,648 $7FFF_FFFF; 2,147,483,647 - -
$7FFF_FFFF; 2,147,483,647 $8000_0000; 2,147,483,648 - -
$FFFF_FFFE; 4,294,967,294 $FFFF_FFFF; 4,294,967,295 - -
$FFFF_FFFE; 4,294,967,294 $FFFF_FFFE; 4,294,967,294 - -
$FFFF_FFFE; 4,294,967,294 $FFFF_FFFD; 4,294,967,293 - -
fuente y destino se tratan como valores no signados.
1
El destino no se escribe a menos que se de el efecto WR.
2
Destino Salida (destino escrito) puede ser signado o no signado; se muestra aqui como signado para propósitos de demostración
3
solamente.
La bandera C resulta de CMP (Compare no signado) puede diferir de CMPS (Compare signado) donde el "signo interpretado" de la
4
fuente y destino son opuestos. El primer ejemplo en el segundo grupo, arriba, muestra que CMP limpia C porque es no signado
$8000_0000 (2,147,483,648) no es menor que el no signado $7FFF_FFFF (2,147,483,647). CMPS, sin embargo debería 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 fuente y destino se cambian.
Explicación
CMP
(Compare no signado) compara los valores no signados de Value1 y Value2. Las
banderas Z y C, si están escritas, indican el igual relativo, y relación mayor o menor entre los
dos.
Pagina 278 · Manual Propeller v1.1
–SRC–
Resultado Z
D = S
Entrada
Fuente
Z C Efectos
1
$0000_0002; 2
- -
$0000_0003; 3
- -
$0000_0004; 4
- -
Resultado C
Resultado
no signado (D < S)
Not Written
Salida
Destino
2
wr wz wc
$0000_0001; 1
wr wz wc
$0000_0000; 0
wr wz wc
$FFFF_FFFF; -1
wr wz wc
$0000_0001; 1
wr wz wc
$FFFF_FFFF; -1
wr wz wc
$FFFF_FFFF; -1
wr wz wc
$0000_0000; 0
wr wz wc
$0000_0001; 1
Ciclos
4
Z C
0
0
1
0
3
0
1
4
0 0
3
4
0 1
3
0
1
1
0
0
0