Написать и протестировать функцию sub - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь написать sub func для nachOS, но когда я объединяю, это не работает. Не знаю причину. Подробности: В ../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

Это папка начос. Он не содержит подпрограммы «ошибка», которую я пишу.

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

1 Ответ

0 голосов
/ 01 декабря 2009

хм .. Ну, я ничего не знаю о NachOS, но я занимался разработкой ОС.

cannot open crt0.o: No such file or directory

Вы отправляете правильные команды компоновщика? Давайте посмотрим ваш скрипт компоновщика.

Я предполагаю, что вы создали кросс-компилятор MIPS. Вы настроили его для использования стандартной библиотеки. Если стандартной библиотеки нет, настроили ли вы ее по умолчанию на crt0?

Обратите внимание, что crt0 является объектом "начальной загрузки". Он содержит __main, что в первую очередь выполняется ОС. Затем этот объект начальной загрузки анализирует аргументы командной строки и другие элементы инициализации, а затем вызывает вашу функцию main. Я не уверен, сколько всего есть в NachOS, но вам, возможно, даже придется сделать свой собственный crt0 и связать его с помощью скрипта компоновщика в качестве образа запуска (не могу вспомнить точное имя)

...