zvrba, возможно, поразил гвоздь по голове, вы не можете / не должны вызывать функции библиотеки C, такие как printf, в вашей программе.
Напишите простую программу на C, для начала возможно:
const unsigned char hello[]="helloworld";
void notmain ( void )
{
unsigned int ra;
for(ra=0;hello[ra];ra++)
{
PUT32(0x1234,hello[ra]);
}
}
и вызовите notmain из программ на ассемблере, которые вы написали и у которых есть работа и связь вместе.
PUT32просто записывает некоторые данные на какой-то адрес, я обычно реализую их на ассемблере, ymmv.
Выберите какой-либо адрес, отличный от 0x1234, я предполагаю, что в вашей среде сима вы можете наблюдать доступ к местоположению адреса и смотреть символы.пока нет необходимости разговаривать с uart и декодировать серийный номер в симуляции, когда вы можете наблюдать байты на шине.
Файлы эльфов действительно просты для анализа, если вы написали симулятор, читая эльфафайл не имеет большого значения.Я не беспокоюсь о библиотеках, они только усложняют работу.Это несколько структур, если вы решили использовать структуры.Я могу предоставить вам код, который поможет вам начать, если хотите.Альтернативой является использование инструментов gnu для преобразования эльфа в двоичный файл (mips-what-objcopy file.elf -O binary file.bin).Если ваши .text и .data не находятся близко друг к другу, программа objcopy создаст огромный файл с нулями для заполнения между двумя адресными пространствами.Для встроенных вы все равно хотите избегать наличия чего-либо в своем разделе .data, всегда инициализируйте переменные в программе не раньше времени, и таблицы только для чтения создают const, поэтому они находятся в .text вместо .data
, если этопроект для развлечения или работы или общественного потребления?Я мог бы быть заинтересован в том, чтобы использовать его когда-нибудь, мне нравится концепция verilator, но она либо ограничена, либо слишком жестка для стандарта verilog, и так много verilog там не будет работать под ним без работы, поэтому я не смог по-настоящему поиграть с ней.
удачи.