Amigo
@Dozznar: con seguidad te confirmo que cualquier multiplicación que hagas por 8, 16, 32, 64, etc, el compilador genera desplazamientos a la izquierda. Lo mismo con la división. El riesgo en estos casos es que confíes en que el compilador va a solucionar todo lo que tu imagines a tu gusto. Quizá llegues a confiar tanto en el compilador que no busques alternativas mejores, ya que al no escribir tu el código assembler no veas la verdadero problema del asunto. Ejemplo, puedes poner a:=13*17 y el compilador utilizara una excelente rutina de multiplicación preferida en CodeBase64. Al no ver el tamaño y el costo en ciclos de la rutina (que tu le has pedido al compilador al poner una multiplicación pura) quizá no te des cuenta que no la necesitas y te puedes arreglar con dos desplazamientos a la izquierda y una suma. Quizá trabajes con un rango de datos y puedas usar una tabla en vez de una multiplicación. Otra vez lo mismo, no es tan importante si trabajas en assembler o en C si conoces el ordenador y las limitaciones que contiene.
Amigo
@Laddh:
Cuando hablo de compiladores modernos doy por sentado que la compilación es optima en todos los sentidos. Por ahí me equivoco y hay compiladores que no son tan eficientes.
No he programado en CC65 pero te confirmo que el TRSE tiene, por ejemplo:
Para mover datos tiene 6 o 7 comandos donde arrancamos moviendo memoria con una lenta rutina que anida dos bucles y, por supuesto, acepta 16bit para la cantidad de datos (los dos bucles anidados). Con esto logramos mínimo consumo de memoria, máximo uso CPU. Para cuando tenemos poca ram y nos sobra tiempo de CPU.
Tenemos MemCpyFast, donde acepta solo 8 bit para cantidad de datos a mover (un solo bucle). Usa una rutina de un solo bucle. Medio uso de memoria y medio de CPU.
Tenemos MemCpyUnroll, donde no se usa anidado. Utilizar grandes cantidades de ram ya que utiliza la técnica del unroll, pero el uso del CPU es excelente. Para usos donde el tiempo es critico.
En el medio hay varias formas más de mover datos según tus necesidades. Por ahí el cc65 tiene varias formas de hacer las cosas, no lo sé.
Por supuesto que tienes razón en cuanto que, para que perder tiempo en conocer un compilador si puedes conocer el assembler y ya olvidarte del tema? En ese caso, personalmente, le encontré la ventaja de que el compilador utiliza las ultimas y más modernas técnica de programación en assembler. Yo soy programador de assembler!, sin embargo me encontré que cuando analicé el código generado, este, utilizaba técnicas que yo desconocía y era más eficiente de lo que yo hacía.
Bueno, esto es solo mi opinión y, por supuesto, cada cual programa como le guste.
Aprovecho para mandarles un abrazo cordial y estoy a su disposición por si tienen algún problema donde yo pueda ayudar.
MAriano.