EDIT
より多くの時間を利用できるようになったので、より便利なものを提供するために元の回答を書き直しました。
あなたの質問に対して具体的な答えを提供することはできません。MIPS マシンでコードを実行しようとしたことはありません。私が持っているのは、さまざまな「ベアメタル」ボードを立ち上げて実行する豊富な経験です。あらゆる種類の CPU、あらゆる種類のコンパイラ、クロス コンパイラ。そのため、私はそのようなすべての状況に適用される原則を理解しています。このような仕事で成功する前に吸収する必要がある知識の種類を指摘し、その知識の学習を開始するためのリソースへのリンクをいくつか挙げることができれば幸いです.
ポインターがまさにベア メタル コンパイラーが処理できる種類のものであり、基本的なマシン プリミティブであることをあなたが知らないことを心配しています。これは、あなたがおそらく、この特定のシナリオに行き詰まっているエキスパートの組み込み開発者ではないことを示しています。どうでも。組み込みシステムのプログラミングに魔法はなく、知っておくべきことを学ぶことができます。
最初のステップは、C とコードを実行したいマシンとの関係を理解することです。基本的に、C は移植可能なアセンブリ言語です。これは、マシンの基本操作を操作するには C が適していることを意味します。この意味で、マシンの基本的な操作は、メモリ位置の読み取りと書き込み、メモリから読み取ったデータに対する算術演算とブール演算の実行、およびそのデータに基づく分岐とループの決定です。特に、ポインターの C の概念により、指定したメモリ内の場所でデータを操作できます。
ここまでは順調ですが、通常、メモリ内で生の計算を行うだけでは十分ではありません。メモリからデータを入出力する方法が必要です。そのためには、ボード上のハードウェア ペリフェラルを操作する必要があります。ハードウェア ペリフェラルがメモリ マップされている場合次に、周辺機器を制御するために使用されるマシン レジスタはメモリ位置とまったく同じように見え、C はそれらを直接操作できます。その場合でも、有用な I/O を実行するには、その目的のためだけに提供されたルーチンのライブラリを使用して C コア言語を拡張することによって最も適切に処理される可能性が高くなります。これらのライブラリ ルーチンは、ボード上のペリフェラル ハードウェアの操作に関連する厄介な詳細 (タイマー、割り込み、メモリ マップされていない I/O) をすべて処理し、便利な C 関数呼び出しインターフェイスでそれらをラップします。アイデアは、単純に printf("hello world"); に行くことができるということです。ライブラリ呼び出しは、文字列の表示の詳細を処理します。
適切なスキルを持つ開発者は、既存の I/O ライブラリを新しいボードに適合させる方法、または非標準のカスタム ハードウェアへのアクセスを提供する新しいライブラリ ルーチンを開発する方法を知っています。これらのスキルを開発する古典的な方法は、単純なものから始めることです。通常は、出力デバイス用の LED と入力デバイス用のスイッチです。予測可能な方法で LED をパルスする、またはスイッチを読み取って LED に反映するプログラムを作成します。初めてこれを機能させると、非常に満足のいくものになります。
さて、私は十分にとりとめのないことをしました。学習するためのリソースをさらに提供する時が来ました。幸いなことに、ハードウェアとソフトウェアの間のインターフェイスで物事がどのように機能するかを学ぶのに、今ほど良い時期はありません。自由に利用できるコードとドキュメントが豊富にあります。ご存じのとおり、Stackoverflow は優れたリソースです。幸運を!リンクは次のとおりです。
組み込みシステムの概要
C言語をよく知っていることは基本です
実際のハードウェアを試す前に、シミュレーターでコードを動作させてみませんか?
別のエミュレート環境
Linux デバイス ドライバー - 重複するテーマ
ベアメタルプログラミングに関する別の本