Programación en c y en ensamblador: Compiladores y alternativas para PC

Click here to see in English

En el momento de escribir este documento las principales alternativas para programar en c, pudiendo además meter lineas de ensamblador mezcladas con el código en c son z88dk y SDCC. Otra alternativa es usar SDCC para compilar y generar un fichero en ensamblador, después usar SDCC2Pasmo para convertir la sintaxis y finalmente usar Pasmo para ensamblar. Por otro lado también podemos programar directamente en ensamblador y usar Pasmo. Vamos a comparar estas alternativas:

 

  • z88dk: Es un compilador de c para PC (Linux, MacOS X, Solaris, BeOS, Win32, Win16 y MSDOS) que genera código para z80 y que cuenta con un ensamblador/linkador. Cuenta con una buena parte de la librería estándar de c implementada y soporta un montón de plataformas incluyendo Amstrad CPC, para la que por ejemplo soporta el manejo de ficheros, la consola (leer teclado, imprimir por pantalla, ...). Es decir, con z88dk podemos compilar y generar un binario directamente ejecutable en Amstrad CPC.
  •  

  • SDCC: Es un compilador de c para PC (Linux, Windows y Mac OS X) que genera código para Intel 8051, Maxim 80DS390, Zilog Z80, Z180, Rabbit 2000 y Motorola 68HC08 y que cuenta con un ensamblador/linkador para cada uno de esas plataformas. Genera código 'genérico' para esas plataformas, por lo que en el caso del Amtrad, no ejecuta directamente, hay que hacer una serie de cambios que ya veremos posteriormente para poder usarlo en el CPC. También incluye su propia implementación de la librería estándar de c, pero al ser genérica no podemos, por ejemplo, directamente imprimir un texto por pantalla.
  •  

  • SDCC + SDCC2Pasmo + Pasmo: En la web http://www.norecess.net hay una serie de tutoriales para usar este método. Usamos SDCC para generar código en ensamblador desde nuestro código en c, después usamos SDCC2Pasmo para 'traducir' este código al estilo Maxam y luego usamos Pasmo para compilarlo y generar el binario final. Creo que este método se usa para los que realmente prácticamente sólo usan ensamblador, ya que está muy limitado en cuanto a usar código en c, por la sencilla razón de que el código en ensamblador que genera SDCC incluye únicamente nuestro código en c, pero no lleva incluida nada de la librería de c, por lo que no podremos usar 'ninguna' de las habituales funciones de c (manejo de memoria, cadenas de caracteres, etc), incluso no podremos, por ejemplo, ni hacer una división de enteros, ni muchas otras cosas ya que el binario final compilado por Pasmo revienta en ejecución al intentar 'saltar' a estas funciones... Yo este método lo veo más como un conversor de algoritmos de c a ensamblador.
  •  

  • Pasmo: Si queremos programar directamente en ensamblador Pasmo es una gran opción, que permite por ejemplo generar binarios con cabecera Amsdos (directamente ejecutables en Amstrad CPC).

 

www.CPCMania.com 2012