Título: Mitos y leyendas del mnemonico CP 0 Publicado por: j4mk3 en 02 de Febrero de 2011, 04:40:08 pm Supongo que me vais a abuchear ::)...pero tengo que preguntarlo... ::)
¿Produciria el mismo resultado... Código: ld a,[HL] que ...and 00001111b cp 0 jp z,ESZERO 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 ? Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: OKI09 en 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. Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: j4mk3 en 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 ? Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: pitpan en 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... Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: OKI09 en 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? Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: pitpan en 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 ;) Ah, qué tiempos aquellos, descubriendo el ensamblador... Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: OKI09 en 02 de Febrero de 2011, 10:52:10 pm Oido cocina. ;D
Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: Metalbrain en 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).
Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: burguera en 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.
Título: Re: Mitos y leyendas del mnemonico CP 0 Publicado por: aorante en 05 de Febrero de 2011, 11:57:48 am como se agradece que exista este templo de sabidudida compartida! :D
|