Долго спрашивайте, извините заранее. Хорошо, поэтому я работаю с несколькими необычными ограничениями, поэтому я пока не нашел много помощи в Интернете. Основное ограничение состоит в том, что я не могу использовать эмулятор, и поэтому я не могу использовать syscalls. Мне нужно сделать несколько вещей с MIPS и C и не знаю достаточно о том, как эти программы выполняются, чтобы понять, как заставить их работать так, как они мне нужны. Во-первых, согласно инструкциям моего преподавателя, мне нужно создать файл под названием «rng.s». Он также указывает, что он должен начинаться со следующим кодом:как запустить программу MIPS без основной и вызывать программу MIPS из программы C
.abicalls
.option pic0
.globl rng, seed
.set nomips16
Как я понимаю, это означает, что я создаю две функции «ГСЧ» и «семени», и мне не нужно, чтобы создать основной функция. В шаблоне, предусмотренном ранее заданий, был некоторый код, который выглядит следующим образом:
.ent main
.type main, @function
И я не уверен, стоит ли или не нужно мне сделать что-то подобное здесь с функциями ГСЧ и семенами. Кроме того, когда я не включаю основной, ассемблер отбрасывает ошибку. Позже в присваивании я должен написать программу на языке C, которая вызывает функцию rng() (ту же, что написана в моей программе MIPS) и передать ей некоторые значения. Я не совсем понимаю, как вызвать rng() из моей программы на C. Сначала я попробовал это так:
#include<stdio.h>
int main(int argc, char* argv[])
{
//int a, b, c are input from command line using atoi(argv)
//i've tested it and that part works fine, so it's not important
rng(a, b, c);
return 0;
}
Мой профессор включил Makefile, который должен собрать обе программы в один исполняемый файл, но если я пытаюсь использовать это, я получаю сообщение об ошибке, потому что есть несколько деклараций главный.
Итак, большой вопрос: как я могу запустить свою программу MIPS без основного? И как мне вызвать функцию внутри моей программы MIPS изнутри моей программы на C?
Я уже провел два дня на этом, и я никуда не ушел, поэтому любая помощь будет очень признательна. Спасибо.
Найти документацию для MIPS ABI (возможно, профессор дал некоторые ссылки) или просто посмотреть, какой код сборки gcc генерирует для main(), который вызывает ваши функции (см. Параметры '-c',' -S'). –
У меня есть некоторые проблемы с пониманием, на какой архитектуре вы смешиваете C и MIPS. Существует причина, почему MIPS обычно запускается в эмуляторе на обычном ПК. – grek40
Как я понимаю, когда обе программы превращаются в объектные файлы, на самом деле не имеет никакого значения, как это получилось, теперь файлы могут работать на архитектуре машины, которая выполняла компиляцию/сборку и, следовательно, способна совместной работы. Поэтому я считаю, что Makefile запускает мою программу MIPS через ассемблер и мою программу C через gcc. Я предполагаю, что это в основном упражнение в определении того, как сделать эти программы общими. Мне просто нужно понять нюансы того, как облегчить это общение. –