c++ compiler-construction embedded x86-16

c++ - Buscando el compilador x86 de 16 bits



compiler-construction embedded (10)

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

Si no es así, es posible que pueda utilizar algunos compiladores de DOS de 16 bits, pero tendrá varios posibles problemas importantes:

  1. obtener una biblioteca para el compilador que no depende del BIOS o MS-DOS
  2. depuración
  3. Los enlazadores para sistemas integrados generalmente tienen soporte específico para ubicar código en regiones de memoria específicas. Eso no suele incluirse en los compiladores para DOS, pero es posible que pueda encontrar algún tipo de vinculador / localizador que lo haga por usted.

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

Estoy trabajando en un proyecto de sistemas integrados y me he encontrado con el problema de que el compilador está incorporado programáticamente en Paradigm C ++ IDE. 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 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 puedan hacerlo también?




El más reciente según 2014 es Dev86 .


Ha pasado mucho tiempo desde que eché un vistazo a las cosas de Paradigm (¿todavía están aquí?) ¿Estás seguro de que no tienen equivalentes de línea de comandos para el compilador? Mi recuerdo es que fueron construidos sobre 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, me parece que Paradigm todavía está por aquí (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 planeas hacer, puede valer la pena para morder la bala y comprar su oferta completa ...

Buena suerte.


Hay un parche para GCC 4.3: Nuevo back-end ia16: 16-bit Intel x86

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

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

No logré hacer binarios de DOS todavía: ¿cómo ensamblo GAS y lo vinculo con la biblioteca Open Watcom C?


No estoy seguro pero creo que la versión anterior de Borland C ++ fue capaz de hacer eso. puedes descargar la versión 5.5 t: aquí buena suerte


Su mejor apuesta es probablemente OpenWatcom , que incluye un compilador de C ++. De regreso a principios y mediados de los 90, creo que este fue el mejor compilador C / C ++. Fue de código abierto hace unos años.


Esta búsqueda de Google muestra una serie de enlaces para configurar gcc como un compilador cruzado. Para hacer que apunte a algo que no sea un binario ELF estándar, puede frigir la salida. Este enlace analiza la exclusión de las bibliotecas estándar y la personalización del formato de salida. Puede que tengas que hacer algunos ajustes para que funcione.

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


Actualmente estoy usando gnu as (parte de binutils y el ensamblador utilizado para gcc) y he estado ensamblando con éxito el código ensamblador 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 generará una advertencia, aunque los binarios planos no necesitan punto de entrada.

algo que aprendí de la manera más dura;

-Ttext 0x0

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

Personalmente sigo aprendiendo asamblea, así que este es solo mi camino, no necesariamente la mejor manera.

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

-Ttext 0x0

a

-Ttext 0x7c00

esto compensará las direcciones de su memoria por 0x7c00 ya que el BIOS normalmente carga el código de arranque en 0x7c00 .