Karoshi MSX Community
06 de Julio de 2021, 12:10:54 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Mitos y leyendas del mnemonico CP 0  (Leído 4435 veces)
0 Usuarios y 1 Visitante están viendo este tema.
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« : 02 de Febrero de 2011, 04:40:08 pm »

Supongo que me vais a abuchear Roll Eyes...pero tengo que preguntarlo... Roll Eyes

¿Produciria el mismo resultado...
Código:
ld a,[HL]
and 00001111b
cp 0
jp z,ESZERO
que ...
Código:
ld a,[HL]
and 00001111b
jp z,ESZERO
?

¿Es cierto que los CP 0 no tienen sentido si la operación anterior ya da un resultado (cero o no) dado que pone el flag Z indicandolo ?
¿Que verdad hay en toda esta mitologia del CP 0 ?
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
OKI09
Karoshi Maniac
****
Mensajes: 275



WWW Email
« Respuesta #1 : 02 de Febrero de 2011, 06:22:20 pm »

Al hacer una operacion logica con el acumulador, como es :

AND 00001111b

Si es cero el flag Z se activara solo, no tienes porque hacer el CP 0.

Funcionarian las dos opciones, pero la segunda ocuparia menos Bytes.
En línea

La derrota no es una opción y no hay excusas.
"Parasiempre"
j4mk3
Karoshi Maniac
****
Mensajes: 376


MSx Powa!


WWW Email
« Respuesta #2 : 02 de Febrero de 2011, 06:58:52 pm »

¿ Y tras un LD A,[HL] que lleve un cero a A?
¿ Se pone el flag Z a cero ?
En línea

---  G Fan  ---  Galious & Gradius  & G Boys   ---
--- Play HANS' ADVENTURE, STAN, THE DREAMER & BITLOGIC ---
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #3 : 02 de Febrero de 2011, 07:09:28 pm »

No. En el Z80 las instrucciones de carga no actualizan las banderas de estado, salvo, claro está POP AF. Y puede que alguna otra un poco más rara, que tenga que ver con los registros I o R.

Ojo. Otras instrucciones aritméticas no actualizan la bandera de estado, como los incrementos y decrementos de 16 bits. Es decir, si haces INC HL o DEC BC o cualquiera de sus primos, olvídate de las banderas de acarreo, cero y todas las demás. Hay que comprobarlo a pelo después de la operación. Afortunadamente, las instrucciones ADC, SBC de 16 bits sí que cambian el estado. Pero no así ADD.

Así que la moraleja más sencilla es: RTFM! Es decir, conseguid un buen manual de referencia y aseguraos antes de que os pase como a cualquier hijo de vecino y tiréis a la basura horas tratando de depurar un programa en el que todo es correcto, excepto lo que el programador cree que va a hacer el Z80. A mí me resulta muy práctico tener a la vista el UNDOCUMENTED Z80 de Sean Young y herederos.

Si tenéis más dudas, RTFM. O preguntad aquí, que para eso estamos...

En línea
OKI09
Karoshi Maniac
****
Mensajes: 275



WWW Email
« Respuesta #4 : 02 de Febrero de 2011, 10:26:18 pm »

No tenia ni idea de lo del incremento/decremento  en 16 bits.

Bueno, aunque es un poco logico, pues no actuan directamente sobre el acumulador. ¿no?
En línea

La derrota no es una opción y no hay excusas.
"Parasiempre"
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #5 : 02 de Febrero de 2011, 10:40:38 pm »

No, no es lógico. Todas las instrucciones de incremento / decremento de 8 bits sí que actualizan correctamente las banderas de estado del procesador. Incluso el INC/DEC [HL], es decir, con indirección incluida.

La primera vez que me enfrenté a esto fue programando para GAMEBOY clásica Wink Ah, qué tiempos aquellos, descubriendo el ensamblador...
En línea
OKI09
Karoshi Maniac
****
Mensajes: 275



WWW Email
« Respuesta #6 : 02 de Febrero de 2011, 10:52:10 pm »

Oido cocina.  Grin
En línea

La derrota no es una opción y no hay excusas.
"Parasiempre"
Metalbrain
Karoshi Fan
**
Mensajes: 92


Z80jutsushi


« Respuesta #7 : 02 de Febrero de 2011, 11:07:28 pm »

Y a todo esto, añadir que salvo alguna ocasión muy muy rara en la que querais cambiar con código automodificable el valor de la comparación, para comparar el acumulador con 0 es muchísimo mejor hacer AND A (o bien su equivalente en este caso OR A), con lo que se ahorra 1 byte y varios estados respecto al CP 0 (que hay que evitar).
En línea
burguera
Visitante
« Respuesta #8 : 03 de Febrero de 2011, 01:12:57 pm »

Yo tengo en todo momento abierto un listado de instrucciones del Z80 con indicaciones de como afectan a los flags.
En línea
aorante
Karoshi Maniac
****
Mensajes: 451


nuTella Power!


WWW Email
« Respuesta #9 : 05 de Febrero de 2011, 11:57:48 am »

como se agradece que exista este templo de sabidudida compartida!  Cheesy
En línea

--------------------------------- ------ ----- --- -- -
aorante/303bcn
http://aorante.blogspot.com
http://twitter.com/#!/aorante
http://303bcn.wordpress.com/
--------------------------------- ------ ----- --- -- -
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!