Pregunta

Estoy trabajando en un proyecto de sistemas embebidos y me he topado con un problema de compilación programada en el IDE de Paradigm C ++. Me gustaría poder automatizar la construcción.

El procesador es el AMD186ES. No estoy trabajando con el sistema operativo, solo cosas de baremetal. Necesito generar código de máquina 8086 de 16 bits en modo real desde C ++.

Mi búsqueda en Google indica que G ++ puede construir dicho código.

Mis preguntas son:

¿Se puede configurar g ++ para construir este código de máquina?

¿Hay otros compiladores de C ++ que también puedan hacerlo?

¿Fue útil?

Solución

Actualmente estoy usando gnu como (parte de binutils y el ensamblador utilizado para gcc) y he estado ensamblando con éxito el código de ensamblaje de 16 bits con lo siguiente:

as <file>
ld --oformat binary -Ttext 0x0 -e start <file>

con mis archivos de ensamblaje comenzando con:

.code16
.globl start
.text
start:

ya que su binario simple omite las líneas,

.globl start
start:

simplemente mostrará una advertencia, aunque los binarios planos no necesitan un punto de entrada.


algo que aprendí de la manera más difícil;

-Ttext 0x0

es crítico, de lo contrario, el segmento .text se empuja fuera del rango de direccionamiento de 16 bits (no me preguntes por qué)

Personalmente todavía estoy aprendiendo ensamblaje, así que esta es solo mi manera, no necesariamente la mejor.


EDITAR: Si está escribiendo el código de inicio, debe cambiar

-Ttext 0x7c00

a

<*>

esto compensará sus direcciones de memoria con 0x7c00 ya que el código de inicio generalmente se carga en 0x7c00 por la BIOS.

Otros consejos

Su mejor apuesta es probablemente OpenWatcom , que incluye un compilador de C ++. A principios de la década de los 90, creo que este fue el mejor compilador de C / C ++. Fue de código abierto hace unos años.

¿Su proveedor de chips (AMD, supongo) no tiene ningún puntero a los compiladores para el chip?

Si no, puedes usar algunos compiladores de DOS de 16 bits, pero tendrás varios problemas potenciales:

  1. obtener una biblioteca para el compilador que no depende de la BIOS o MS-DOS
  2. depuración
  3. los enlazadores para sistemas embebidos generalmente tienen soporte específico para localizar código en regiones de memoria específicas. Generalmente, esto no se incluye en los compiladores para DOS, pero es posible que pueda encontrar algún tipo de enlazador / localizador que haga el truco por usted.

Un par de compiladores que aún son compatibles y generan código de 16 bits son:

Esta búsqueda de google muestra una serie de enlaces para configurar gcc como compilador cruzado. Para lograr que apunte a algo más que un binario ELF estándar, puede enviar la salida. Este enlace trata sobre la exclusión de las bibliotecas estándar y la personalización del formato de salida. Es posible que tenga que hacer algunos trucos para que funcione.

Como alternativa, openwatcom.org tiene una versión de código abierto de Watcom Compilador de C, que también podría hacer lo que quieras.

El más reciente de 2014 es Dev86 .

Hay un parche para GCC 4.3: Nuevo back end ia16: x86 Intel de 16 bits

Y aquí hay una actualización para ello . Tenga en cuenta que probablemente no funcione muy bien, por ejemplo, la publicación actualizada dice: "Constructores y destructores ahora son compatibles, pero por alguna razón   solo funciona en la configuración de los alces. "

Este contenedor de Docker tiene una compilación de este: https: // registry.hub.docker.com/u/ysangkok/ia16-gcc-rask

Todavía no logré crear binarios de DOS: ¿Cómo armo el ensamblaje GAS y lo vinculo con la biblioteca Open Watcom C?

Echa un vistazo a bcc , que es un compilador x86 C de 16 bits. Por ejemplo, también hay paquetes Debian para ello .

No estoy seguro, pero creo que la versión antigua de borland c ++ pudo hacer eso. puede descargar la versión 5.5 t: aquí buena suerte

Hace mucho tiempo que no veo las cosas de Paradigm (¿están todavía alrededor?). ¿Está seguro de que no tienen equivalentes de línea de comandos para el compilador? Mi recuerdo es que fueron construidos en la parte superior de la cadena de herramientas del compilador de Borland ... ¿Entonces tal vez una vieja copia de los compiladores de Borland podría hacer el truco?

- Ah, mirando un poco más allá, encuentro que Paradigm todavía está por ahí (www.devtools.com) vendiendo herramientas X86. (¡Debe ser una vaca de efectivo!)

Su producto profesional incluye secuencias de comandos ... Dependiendo de la cantidad de trabajo que planee hacer, podría valer la pena morder la bala y comprar su oferta completa ...

Buena suerte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top