0

nachOS の sub func を書こうとしていますが、組み合わせるとうまくいきません。理由がわからない。詳細: ../userprog/syscall.h 追加:

#define SC_Sub 11
int Sub(int a, int b);

../test/

 .globl Sub
 .ent Sub
Sub: 
 addiu $2,$0,SC_Sub
 syscall
 j  $31
 .end Sub

その後、sub.c を書きます。

#include "syscall.h"
int main()
{
   int result;
   result = Sub(100,99);
   Halt();
}

exception.cc: 例外をキャッチしようとしています:

case SC_Sub:
   op1 = machine->ReadRegister(4);
   op2 = machine->ReadRegister(5);
   result = op1 - op2;
   printf("op1:%d\n",op1);
   printf("op2:%d\n",op2);   
   printf("result:%d\n",result);
   machine->WriteRegister(2,result);
   machine->WriteRegister(PCReg,machine->ReadRegister(PCReg)+4);  
   break;

結合するには、に行き、/code/gmake all エラーがあります:(

../../../gnu-decstation-ultrix/decstation-ultrix/2.95.3/gcc -B../../../gnu-decstation-ultrix/ -T script -N  sub.o   -o sub
../../../gnu-decstation-ultrix/decstation-ultrix/2.95.3/ld: cannot open crt0.o: No such file or directory
make[1]: *** [sub] Error 1
make[1]: Leaving directory `/home/nxqd/Desktop/nachos-3.4/code/test'
gmake: *** [all] Error 2

nachos のフォルダです。私が書いた「バグ」サブ関数は含まれていません。

http://www.mediafire.com/?g3mnjxz4wdc
enter code here
4

1 に答える 1

0

うーん..まあ、私は NachOS については何も知りませんが、OS の開発を行ったことはあります。

cannot open crt0.o: No such file or directory

正しいリンカ コマンドを送信していますか? リンカー スクリプトを見てみましょう。

MIPS クロス コンパイラを構築したことがあると思います。標準ライブラリを使用するように構成しましたか。標準ライブラリがない場合、デフォルトの crt0 を使用するように構成しましたか?

crt0 は「ブートストラップ」オブジェクトであることに注意してください。__mainOSによって最初に実行されるものが含まれています。次に、このブートストラップ オブジェクトは、コマンド ライン引数とその他の初期化要素を解析してから、main関数を呼び出します。NachOS にどれだけのものが含まれているかわかりませんが、独自の crt0 を作成し、それをリンカー スクリプトで起動イメージとしてリンクする必要があるかもしれません (正確な名前を思い出せません)。

于 2009-12-01T01:23:25.923 に答える